From c7518ecf428e4e810bc4a9d5b34648bc12d4c96f Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 6 Oct 2015 16:24:54 +0000 Subject: [PATCH] SVN to GIT migration (removed EPC software, updated mailing list address in all files) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7885 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- cmake_targets/CMakeLists.txt | 381 +- cmake_targets/at_commands/CMakeLists.txt | 2 +- cmake_targets/build_oai | 42 +- .../epc_build_oai/CMakeLists.template | 88 - cmake_targets/epc_test/CMakeLists.template | 77 + cmake_targets/hss_build/CMakeLists.txt | 326 -- cmake_targets/hss_build/acl.conf.in | 19 - cmake_targets/hss_build/hss.conf.in | 13 - cmake_targets/hss_build/hss_fd.conf.in | 106 - cmake_targets/tools/build_epc | 302 -- cmake_targets/tools/build_helper | 203 +- cmake_targets/tools/build_hss | 271 -- cmake_targets/tools/build_test_epc_tools | 147 + cmake_targets/tools/check_hss_s6a_certificate | 104 - cmake_targets/tools/check_mme_s6a_certificate | 107 - cmake_targets/tools/create_hss_database | 103 - cmake_targets/tools/epc.conf.in | 163 - cmake_targets/tools/epc.local.enb.conf.in | 130 - .../tools/example_enb_exmimo_mme_hss.txt | 2 +- .../example_oaisim_enb_ue_mme_virtual.txt | 2 +- cmake_targets/tools/indent_source_code | 2 +- cmake_targets/tools/init_exmimo2 | 2 +- cmake_targets/tools/init_nas_nos1 | 2 +- cmake_targets/tools/perf_oai.bash | 2 +- cmake_targets/tools/run_enb_s1_exmimo | 2 +- cmake_targets/tools/run_enb_s1_usrp | 2 +- cmake_targets/tools/run_enb_ue_virt_noS1 | 2 +- cmake_targets/tools/run_enb_ue_virt_s1 | 2 +- cmake_targets/tools/run_epc | 199 - cmake_targets/tools/run_hss | 113 - cmake_targets/tools/s6a.conf.in | 97 - common/utils/COPYING | 702 +-- common/utils/asn1_conversions.h | 56 +- common/utils/assertions.h | 56 +- common/utils/collection/COPYING | 702 +-- common/utils/collection/hashtable/COPYING | 702 +-- common/utils/collection/hashtable/hashtable.c | 56 +- common/utils/collection/hashtable/hashtable.h | 56 +- .../collection/hashtable/obj_hashtable.c | 56 +- .../collection/hashtable/obj_hashtable.h | 56 +- common/utils/itti/COPYING | 702 +-- common/utils/itti/assertions.h | 56 +- common/utils/itti/backtrace.c | 57 +- common/utils/itti/backtrace.h | 56 +- common/utils/itti/intertask_interface.c | 56 +- common/utils/itti/intertask_interface.h | 56 +- common/utils/itti/intertask_interface_dump.c | 56 +- common/utils/itti/intertask_interface_dump.h | 56 +- common/utils/itti/intertask_interface_init.h | 56 +- common/utils/itti/intertask_interface_types.h | 56 +- common/utils/itti/intertask_messages_def.h | 56 +- common/utils/itti/intertask_messages_types.h | 57 +- common/utils/itti/itti_types.h | 56 +- common/utils/itti/memory_pools.c | 56 +- common/utils/itti/memory_pools.h | 56 +- common/utils/itti/messages_def.h | 56 +- common/utils/itti/messages_types.h | 56 +- common/utils/itti/signals.c | 56 +- common/utils/itti/signals.h | 56 +- common/utils/itti/tasks_def.h | 56 +- common/utils/itti/timer.c | 56 +- common/utils/itti/timer.h | 56 +- common/utils/itti/timer_messages_def.h | 57 +- common/utils/itti/timer_messages_types.h | 56 +- common/utils/itti_analyzer/COPYING | 702 +-- common/utils/itti_analyzer/README | 2 +- common/utils/itti_analyzer/common/COPYING | 702 +-- .../utils/itti_analyzer/common/itti_types.h | 56 +- common/utils/itti_analyzer/common/logs.h | 56 +- common/utils/itti_analyzer/common/rc.h | 55 +- common/utils/itti_analyzer/itti_analyzer.c | 55 +- common/utils/itti_analyzer/libbuffers/COPYING | 702 +-- .../utils/itti_analyzer/libbuffers/buffers.c | 55 +- .../utils/itti_analyzer/libbuffers/buffers.h | 55 +- common/utils/itti_analyzer/libbuffers/file.c | 55 +- common/utils/itti_analyzer/libbuffers/file.h | 55 +- .../utils/itti_analyzer/libbuffers/socket.c | 55 +- .../utils/itti_analyzer/libbuffers/socket.h | 55 +- common/utils/itti_analyzer/libparser/COPYING | 702 +-- .../itti_analyzer/libparser/array_type.c | 55 +- .../itti_analyzer/libparser/array_type.h | 55 +- .../utils/itti_analyzer/libparser/enum_type.c | 55 +- .../utils/itti_analyzer/libparser/enum_type.h | 55 +- .../itti_analyzer/libparser/enum_value_type.c | 55 +- .../itti_analyzer/libparser/enum_value_type.h | 55 +- .../itti_analyzer/libparser/field_type.c | 55 +- .../itti_analyzer/libparser/field_type.h | 55 +- .../utils/itti_analyzer/libparser/file_type.c | 55 +- .../utils/itti_analyzer/libparser/file_type.h | 55 +- .../libparser/fundamental_type.c | 55 +- .../libparser/fundamental_type.h | 56 +- .../libparser/intertask_contexts.h | 55 +- .../itti_analyzer/libparser/pointer_type.c | 55 +- .../itti_analyzer/libparser/pointer_type.h | 55 +- .../itti_analyzer/libparser/reference_type.c | 55 +- .../itti_analyzer/libparser/reference_type.h | 55 +- .../itti_analyzer/libparser/struct_type.c | 55 +- .../itti_analyzer/libparser/struct_type.h | 55 +- .../itti_analyzer/libparser/typedef_type.c | 55 +- .../itti_analyzer/libparser/typedef_type.h | 55 +- common/utils/itti_analyzer/libparser/types.c | 55 +- common/utils/itti_analyzer/libparser/types.h | 55 +- .../itti_analyzer/libparser/union_type.c | 55 +- .../itti_analyzer/libparser/union_type.h | 55 +- .../utils/itti_analyzer/libparser/xml_parse.c | 55 +- .../utils/itti_analyzer/libparser/xml_parse.h | 55 +- .../utils/itti_analyzer/libresolver/COPYING | 702 +-- .../itti_analyzer/libresolver/locate_root.c | 55 +- .../itti_analyzer/libresolver/locate_root.h | 55 +- .../itti_analyzer/libresolver/resolvers.c | 55 +- .../itti_analyzer/libresolver/resolvers.h | 55 +- common/utils/itti_analyzer/libui/COPYING | 702 +-- .../utils/itti_analyzer/libui/ui_callbacks.c | 55 +- .../utils/itti_analyzer/libui/ui_callbacks.h | 55 +- common/utils/itti_analyzer/libui/ui_filters.c | 55 +- common/utils/itti_analyzer/libui/ui_filters.h | 55 +- .../utils/itti_analyzer/libui/ui_interface.c | 55 +- .../utils/itti_analyzer/libui/ui_interface.h | 55 +- .../itti_analyzer/libui/ui_main_screen.c | 55 +- .../itti_analyzer/libui/ui_main_screen.h | 55 +- .../utils/itti_analyzer/libui/ui_menu_bar.c | 55 +- .../utils/itti_analyzer/libui/ui_menu_bar.h | 55 +- .../utils/itti_analyzer/libui/ui_notebook.c | 55 +- .../utils/itti_analyzer/libui/ui_notebook.h | 55 +- .../utils/itti_analyzer/libui/ui_notif_dlg.c | 55 +- .../utils/itti_analyzer/libui/ui_notif_dlg.h | 55 +- .../itti_analyzer/libui/ui_notifications.c | 55 +- .../itti_analyzer/libui/ui_notifications.h | 55 +- .../libui/ui_signal_dissect_view.c | 55 +- .../libui/ui_signal_dissect_view.h | 55 +- .../utils/itti_analyzer/libui/ui_tree_view.c | 55 +- .../utils/itti_analyzer/libui/ui_tree_view.h | 55 +- common/utils/msc/msc.c | 55 +- common/utils/msc/msc.h | 56 +- openair-cn/AUTHORS | 1 - openair-cn/COMMON/common_types.h | 55 +- openair-cn/COMMON/gtpv1_u_messages_def.h | 55 +- openair-cn/COMMON/gtpv1_u_messages_types.h | 55 +- openair-cn/COMMON/intertask_interface_conf.h | 55 +- openair-cn/COMMON/ip_forward_messages_def.h | 34 - openair-cn/COMMON/ip_forward_messages_types.h | 96 - openair-cn/COMMON/messages_def.h | 55 +- openair-cn/COMMON/messages_types.h | 55 +- openair-cn/COMMON/mme_app_messages_def.h | 33 - openair-cn/COMMON/mme_app_messages_types.h | 72 - openair-cn/COMMON/nas_messages_def.h | 55 +- openair-cn/COMMON/nas_messages_types.h | 55 +- openair-cn/COMMON/s11_messages_def.h | 29 - openair-cn/COMMON/s11_messages_types.h | 32 - openair-cn/COMMON/s1ap_messages_def.h | 55 +- openair-cn/COMMON/s1ap_messages_types.h | 55 +- openair-cn/COMMON/s6a_messages_def.h | 33 - openair-cn/COMMON/s6a_messages_types.h | 94 - openair-cn/COMMON/sctp_messages_def.h | 55 +- openair-cn/COMMON/sctp_messages_types.h | 55 +- openair-cn/COMMON/security_types.h | 55 +- openair-cn/COMMON/sgw_lite_def.h | 36 - openair-cn/COMMON/sgw_lite_messages_types.h | 928 ---- openair-cn/COMMON/tasks_def.h | 55 +- openair-cn/COMMON/udp_messages_def.h | 55 +- openair-cn/COMMON/udp_messages_types.h | 55 +- openair-cn/ChangeLog | 15 - openair-cn/DOCS/DOXYGEN/Makefile.am | 2 +- openair-cn/DOCS/EPC_User_Guide.docx | Bin 1019641 -> 0 bytes openair-cn/DOCS/EPC_User_Guide.pdf | Bin 706808 -> 0 bytes openair-cn/DOCS/Latex/EPC/Makefile | 2 +- openair-cn/DOCS/Makefile.am | 2 +- openair-cn/GTPV1-U/GTPU_SP/COPYING | 339 -- openair-cn/GTPV1-U/GTPU_SP/INSTALL | 33 - openair-cn/GTPV1-U/GTPU_SP/Makefile | 104 - openair-cn/GTPV1-U/GTPU_SP/README | 80 - openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES | 6 - openair-cn/GTPV1-U/GTPU_SP/cmd.sh | 18 - openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c | 322 -- openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c | 780 --- openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h | 23 - openair-cn/GTPV1-U/Makefile.am | 2 +- openair-cn/GTPV1-U/Makefile.eNB | 2 +- openair-cn/GTPV1-U/gtpv1u.h | 2 +- openair-cn/GTPV1-U/gtpv1u_eNB.c | 2 +- openair-cn/GTPV1-U/gtpv1u_eNB_defs.h | 2 +- openair-cn/GTPV1-U/gtpv1u_eNB_task.h | 2 +- openair-cn/GTPV1-U/gtpv1u_sgw_defs.h | 2 +- openair-cn/GTPV1-U/gtpv1u_task.c | 2 +- openair-cn/GTPV1-U/gtpv1u_teid_pool.c | 2 +- openair-cn/GTPV2-C/Makefile.am | 29 - openair-cn/GTPV2-C/nwgtpv2c-0.11/AUTHORS | 1 - openair-cn/GTPV2-C/nwgtpv2c-0.11/COPYING | 26 - openair-cn/GTPV2-C/nwgtpv2c-0.11/ChangeLog | 0 openair-cn/GTPV2-C/nwgtpv2c-0.11/Makefile.am | 6 - openair-cn/GTPV2-C/nwgtpv2c-0.11/NEWS | 0 openair-cn/GTPV2-C/nwgtpv2c-0.11/README | 168 - openair-cn/GTPV2-C/nwgtpv2c-0.11/configure.ac | 58 - .../nwgtpv2c-0.11/include/NwGtpv2cLog.h | 83 - .../include/NwGtpv2cMsgIeParseInfo.h | 95 - .../nwgtpv2c-0.11/include/NwGtpv2cPrivate.h | 237 - .../nwgtpv2c-0.11/include/NwGtpv2cTrxn.h | 117 - .../nwgtpv2c-0.11/include/NwGtpv2cTunnel.h | 79 - .../GTPV2-C/nwgtpv2c-0.11/include/queue.h | 566 --- .../GTPV2-C/nwgtpv2c-0.11/include/tree.h | 678 --- .../GTPV2-C/nwgtpv2c-0.11/shared/NwError.h | 66 - .../GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h | 576 --- .../GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cIe.h | 159 - .../nwgtpv2c-0.11/shared/NwGtpv2cMsg.h | 626 --- .../nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h | 153 - .../GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h | 85 - .../GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h | 83 - .../GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h | 69 - .../GTPV2-C/nwgtpv2c-0.11/src/Makefile.am | 46 - .../GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c | 1811 ------- .../GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c | 750 --- .../src/NwGtpv2cMsgIeParseInfo.c | 703 --- .../nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c | 293 -- .../GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c | 389 -- .../nwgtpv2c-0.11/src/NwGtpv2cTunnel.c | 95 - .../nwgtpv2c-0.11/test-app/Makefile.am | 6 - .../test-app/nw-egtping/Makefile.am | 24 - .../test-app/nw-egtping/NwEgtPingMain.c | 280 -- .../nwgtpv2c-0.11/test-app/nw-egtping/NwEvt.h | 80 - .../test-app/nw-egtping/NwMiniLogMgrEntity.c | 70 - .../test-app/nw-egtping/NwMiniLogMgrEntity.h | 89 - .../test-app/nw-egtping/NwMiniTmrMgrEntity.c | 97 - .../test-app/nw-egtping/NwMiniTmrMgrEntity.h | 57 - .../test-app/nw-egtping/NwMiniUdpEntity.c | 218 - .../test-app/nw-egtping/NwMiniUdpEntity.h | 56 - .../test-app/nw-egtping/NwMiniUlpEntity.c | 220 - .../test-app/nw-egtping/NwMiniUlpEntity.h | 54 - .../test-app/nw-helloworld/Makefile.am | 21 - .../test-app/nw-helloworld/NwEvt.h | 80 - .../nw-helloworld/NwMiniLogMgrEntity.c | 71 - .../nw-helloworld/NwMiniLogMgrEntity.h | 89 - .../nw-helloworld/NwMiniTmrMgrEntity.c | 100 - .../nw-helloworld/NwMiniTmrMgrEntity.h | 57 - .../test-app/nw-helloworld/NwMiniUdpEntity.c | 149 - .../test-app/nw-helloworld/NwMiniUdpEntity.h | 51 - .../test-app/nw-helloworld/NwMiniUlpEntity.c | 278 -- .../test-app/nw-helloworld/NwMiniUlpEntity.h | 49 - .../test-app/nw-helloworld/helloworld.c | 179 - openair-cn/INSTALL | 370 -- openair-cn/MME_APP/COPYING | 674 --- openair-cn/MME_APP/Makefile.am | 59 - openair-cn/MME_APP/mme_app_authentication.c | 365 -- openair-cn/MME_APP/mme_app_bearer.c | 906 ---- openair-cn/MME_APP/mme_app_capabilities.c | 62 - openair-cn/MME_APP/mme_app_config.c | 307 -- openair-cn/MME_APP/mme_app_config.h | 41 - openair-cn/MME_APP/mme_app_context.c | 555 --- openair-cn/MME_APP/mme_app_defs.h | 92 - openair-cn/MME_APP/mme_app_extern.h | 36 - openair-cn/MME_APP/mme_app_itti_messaging.h | 81 - openair-cn/MME_APP/mme_app_location.c | 167 - openair-cn/MME_APP/mme_app_main.c | 205 - openair-cn/MME_APP/mme_app_statistics.c | 55 - openair-cn/MME_APP/mme_app_statistics.h | 35 - openair-cn/MME_APP/mme_app_ue_context.h | 265 - openair-cn/MME_APP/s6a_2_nas_cause.c | 96 - openair-cn/Makefile.am | 102 - openair-cn/NAS/COMMON/API/NETWORK/COPYING | 702 +-- openair-cn/NAS/COMMON/API/NETWORK/Makefile | 28 - .../NAS/COMMON/API/NETWORK/as_message.c | 56 +- .../NAS/COMMON/API/NETWORK/l2_message.h | 56 +- .../NAS/COMMON/API/NETWORK/nas_message.c | 56 +- .../NAS/COMMON/API/NETWORK/nas_message.h | 56 +- .../NAS/COMMON/API/NETWORK/network_api.c | 56 +- .../NAS/COMMON/API/NETWORK/network_api.h | 56 +- openair-cn/NAS/COMMON/COPYING | 702 +-- openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h | 56 +- .../NAS/COMMON/EMM/MSG/AttachComplete.c | 56 +- .../NAS/COMMON/EMM/MSG/AttachComplete.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h | 56 +- .../COMMON/EMM/MSG/AuthenticationFailure.c | 56 +- .../COMMON/EMM/MSG/AuthenticationFailure.h | 56 +- .../NAS/COMMON/EMM/MSG/AuthenticationReject.c | 56 +- .../NAS/COMMON/EMM/MSG/AuthenticationReject.h | 56 +- .../COMMON/EMM/MSG/AuthenticationRequest.c | 56 +- .../COMMON/EMM/MSG/AuthenticationRequest.h | 56 +- .../COMMON/EMM/MSG/AuthenticationResponse.c | 56 +- .../COMMON/EMM/MSG/AuthenticationResponse.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/COPYING | 702 +-- .../COMMON/EMM/MSG/CsServiceNotification.c | 56 +- .../COMMON/EMM/MSG/CsServiceNotification.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h | 56 +- .../NAS/COMMON/EMM/MSG/DownlinkNasTransport.c | 56 +- .../NAS/COMMON/EMM/MSG/DownlinkNasTransport.h | 56 +- .../NAS/COMMON/EMM/MSG/EmmInformation.c | 56 +- .../NAS/COMMON/EMM/MSG/EmmInformation.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h | 56 +- .../COMMON/EMM/MSG/ExtendedServiceRequest.c | 56 +- .../COMMON/EMM/MSG/ExtendedServiceRequest.h | 56 +- .../COMMON/EMM/MSG/GutiReallocationCommand.c | 56 +- .../COMMON/EMM/MSG/GutiReallocationCommand.h | 56 +- .../COMMON/EMM/MSG/GutiReallocationComplete.c | 56 +- .../COMMON/EMM/MSG/GutiReallocationComplete.h | 56 +- .../NAS/COMMON/EMM/MSG/IdentityRequest.c | 56 +- .../NAS/COMMON/EMM/MSG/IdentityRequest.h | 56 +- .../NAS/COMMON/EMM/MSG/IdentityResponse.c | 56 +- .../NAS/COMMON/EMM/MSG/IdentityResponse.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/Makefile | 28 - .../COMMON/EMM/MSG/NASSecurityModeCommand.h | 56 +- .../COMMON/EMM/MSG/NASSecurityModeComplete.h | 56 +- .../NAS/COMMON/EMM/MSG/SecurityModeCommand.c | 56 +- .../NAS/COMMON/EMM/MSG/SecurityModeComplete.c | 56 +- .../NAS/COMMON/EMM/MSG/SecurityModeReject.c | 56 +- .../NAS/COMMON/EMM/MSG/SecurityModeReject.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h | 56 +- .../NAS/COMMON/EMM/MSG/ServiceRequest.c | 56 +- .../NAS/COMMON/EMM/MSG/ServiceRequest.h | 56 +- .../COMMON/EMM/MSG/TrackingAreaUpdateAccept.c | 56 +- .../COMMON/EMM/MSG/TrackingAreaUpdateAccept.h | 56 +- .../EMM/MSG/TrackingAreaUpdateComplete.c | 56 +- .../EMM/MSG/TrackingAreaUpdateComplete.h | 56 +- .../COMMON/EMM/MSG/TrackingAreaUpdateReject.c | 56 +- .../COMMON/EMM/MSG/TrackingAreaUpdateReject.h | 56 +- .../EMM/MSG/TrackingAreaUpdateRequest.c | 56 +- .../EMM/MSG/TrackingAreaUpdateRequest.h | 56 +- .../NAS/COMMON/EMM/MSG/UplinkNasTransport.c | 56 +- .../NAS/COMMON/EMM/MSG/UplinkNasTransport.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c | 56 +- openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h | 56 +- openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h | 56 +- .../ActivateDedicatedEpsBearerContextAccept.c | 56 +- .../ActivateDedicatedEpsBearerContextAccept.h | 56 +- .../ActivateDedicatedEpsBearerContextReject.c | 56 +- .../ActivateDedicatedEpsBearerContextReject.h | 56 +- ...ActivateDedicatedEpsBearerContextRequest.c | 56 +- ...ActivateDedicatedEpsBearerContextRequest.h | 56 +- .../ActivateDefaultEpsBearerContextAccept.c | 56 +- .../ActivateDefaultEpsBearerContextAccept.h | 56 +- .../ActivateDefaultEpsBearerContextReject.c | 56 +- .../ActivateDefaultEpsBearerContextReject.h | 56 +- .../ActivateDefaultEpsBearerContextRequest.c | 56 +- .../ActivateDefaultEpsBearerContextRequest.h | 56 +- .../ESM/MSG/BearerResourceAllocationReject.c | 56 +- .../ESM/MSG/BearerResourceAllocationReject.h | 56 +- .../ESM/MSG/BearerResourceAllocationRequest.c | 56 +- .../ESM/MSG/BearerResourceAllocationRequest.h | 56 +- .../MSG/BearerResourceModificationReject.c | 56 +- .../MSG/BearerResourceModificationReject.h | 56 +- .../MSG/BearerResourceModificationRequest.c | 56 +- .../MSG/BearerResourceModificationRequest.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/COPYING | 702 +-- .../MSG/DeactivateEpsBearerContextAccept.c | 56 +- .../MSG/DeactivateEpsBearerContextAccept.h | 56 +- .../MSG/DeactivateEpsBearerContextRequest.c | 56 +- .../MSG/DeactivateEpsBearerContextRequest.h | 56 +- .../COMMON/ESM/MSG/EsmInformationRequest.c | 56 +- .../COMMON/ESM/MSG/EsmInformationRequest.h | 56 +- .../COMMON/ESM/MSG/EsmInformationResponse.c | 56 +- .../COMMON/ESM/MSG/EsmInformationResponse.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c | 56 +- openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/Makefile | 29 +- .../ESM/MSG/ModifyEpsBearerContextAccept.c | 56 +- .../ESM/MSG/ModifyEpsBearerContextAccept.h | 56 +- .../ESM/MSG/ModifyEpsBearerContextReject.c | 56 +- .../ESM/MSG/ModifyEpsBearerContextReject.h | 56 +- .../ESM/MSG/ModifyEpsBearerContextRequest.c | 56 +- .../ESM/MSG/ModifyEpsBearerContextRequest.h | 56 +- .../COMMON/ESM/MSG/PdnConnectivityReject.c | 56 +- .../COMMON/ESM/MSG/PdnConnectivityReject.h | 56 +- .../COMMON/ESM/MSG/PdnConnectivityRequest.c | 56 +- .../COMMON/ESM/MSG/PdnConnectivityRequest.h | 56 +- .../NAS/COMMON/ESM/MSG/PdnDisconnectReject.c | 56 +- .../NAS/COMMON/ESM/MSG/PdnDisconnectReject.h | 56 +- .../NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c | 56 +- .../NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c | 56 +- openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h | 56 +- openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h | 56 +- openair-cn/NAS/COMMON/IES/AccessPointName.c | 56 +- openair-cn/NAS/COMMON/IES/AccessPointName.h | 56 +- .../NAS/COMMON/IES/AdditionalUpdateResult.c | 56 +- .../NAS/COMMON/IES/AdditionalUpdateResult.h | 56 +- .../NAS/COMMON/IES/AdditionalUpdateType.c | 56 +- .../NAS/COMMON/IES/AdditionalUpdateType.h | 56 +- .../COMMON/IES/ApnAggregateMaximumBitRate.c | 56 +- .../COMMON/IES/ApnAggregateMaximumBitRate.h | 56 +- .../IES/AuthenticationFailureParameter.c | 56 +- .../IES/AuthenticationFailureParameter.h | 56 +- .../COMMON/IES/AuthenticationParameterAutn.c | 56 +- .../COMMON/IES/AuthenticationParameterAutn.h | 56 +- .../COMMON/IES/AuthenticationParameterRand.c | 56 +- .../COMMON/IES/AuthenticationParameterRand.h | 56 +- .../IES/AuthenticationResponseParameter.c | 56 +- .../IES/AuthenticationResponseParameter.h | 56 +- openair-cn/NAS/COMMON/IES/COPYING | 702 +-- .../COMMON/IES/CipheringKeySequenceNumber.c | 56 +- .../COMMON/IES/CipheringKeySequenceNumber.h | 56 +- openair-cn/NAS/COMMON/IES/Cli.c | 56 +- openair-cn/NAS/COMMON/IES/Cli.h | 56 +- openair-cn/NAS/COMMON/IES/CsfbResponse.c | 56 +- openair-cn/NAS/COMMON/IES/CsfbResponse.h | 56 +- .../NAS/COMMON/IES/DaylightSavingTime.c | 56 +- .../NAS/COMMON/IES/DaylightSavingTime.h | 56 +- openair-cn/NAS/COMMON/IES/DetachType.c | 56 +- openair-cn/NAS/COMMON/IES/DetachType.h | 56 +- openair-cn/NAS/COMMON/IES/DrxParameter.c | 56 +- openair-cn/NAS/COMMON/IES/DrxParameter.h | 56 +- .../NAS/COMMON/IES/EmergencyNumberList.c | 56 +- .../NAS/COMMON/IES/EmergencyNumberList.h | 56 +- openair-cn/NAS/COMMON/IES/EmmCause.c | 56 +- openair-cn/NAS/COMMON/IES/EmmCause.h | 56 +- openair-cn/NAS/COMMON/IES/EpsAttachResult.c | 56 +- openair-cn/NAS/COMMON/IES/EpsAttachResult.h | 56 +- openair-cn/NAS/COMMON/IES/EpsAttachType.c | 56 +- openair-cn/NAS/COMMON/IES/EpsAttachType.h | 56 +- .../NAS/COMMON/IES/EpsBearerContextStatus.c | 56 +- .../NAS/COMMON/IES/EpsBearerContextStatus.h | 56 +- openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c | 56 +- openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h | 56 +- openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c | 56 +- openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h | 56 +- .../NAS/COMMON/IES/EpsNetworkFeatureSupport.c | 56 +- .../NAS/COMMON/IES/EpsNetworkFeatureSupport.h | 56 +- .../NAS/COMMON/IES/EpsQualityOfService.c | 56 +- .../NAS/COMMON/IES/EpsQualityOfService.h | 56 +- openair-cn/NAS/COMMON/IES/EpsUpdateResult.c | 56 +- openair-cn/NAS/COMMON/IES/EpsUpdateResult.h | 56 +- openair-cn/NAS/COMMON/IES/EpsUpdateType.c | 56 +- openair-cn/NAS/COMMON/IES/EpsUpdateType.h | 56 +- openair-cn/NAS/COMMON/IES/EsmCause.c | 56 +- openair-cn/NAS/COMMON/IES/EsmCause.h | 56 +- .../COMMON/IES/EsmInformationTransferFlag.c | 56 +- .../COMMON/IES/EsmInformationTransferFlag.h | 56 +- .../NAS/COMMON/IES/EsmMessageContainer.c | 56 +- .../NAS/COMMON/IES/EsmMessageContainer.h | 56 +- openair-cn/NAS/COMMON/IES/GprsTimer.c | 56 +- openair-cn/NAS/COMMON/IES/GprsTimer.h | 56 +- openair-cn/NAS/COMMON/IES/GutiType.c | 56 +- openair-cn/NAS/COMMON/IES/GutiType.h | 56 +- openair-cn/NAS/COMMON/IES/IdentityType2.c | 56 +- openair-cn/NAS/COMMON/IES/IdentityType2.h | 56 +- openair-cn/NAS/COMMON/IES/ImeisvRequest.c | 56 +- openair-cn/NAS/COMMON/IES/ImeisvRequest.h | 56 +- .../NAS/COMMON/IES/KsiAndSequenceNumber.c | 56 +- .../NAS/COMMON/IES/KsiAndSequenceNumber.h | 56 +- openair-cn/NAS/COMMON/IES/LcsClientIdentity.c | 56 +- openair-cn/NAS/COMMON/IES/LcsClientIdentity.h | 56 +- openair-cn/NAS/COMMON/IES/LcsIndicator.c | 56 +- openair-cn/NAS/COMMON/IES/LcsIndicator.h | 56 +- .../NAS/COMMON/IES/LinkedEpsBearerIdentity.c | 56 +- .../NAS/COMMON/IES/LinkedEpsBearerIdentity.h | 56 +- .../IES/LlcServiceAccessPointIdentifier.c | 56 +- .../IES/LlcServiceAccessPointIdentifier.h | 56 +- .../COMMON/IES/LocationAreaIdentification.c | 56 +- .../COMMON/IES/LocationAreaIdentification.h | 56 +- openair-cn/NAS/COMMON/IES/Makefile | 29 +- openair-cn/NAS/COMMON/IES/MessageType.c | 56 +- openair-cn/NAS/COMMON/IES/MessageType.h | 56 +- openair-cn/NAS/COMMON/IES/MobileIdentity.c | 56 +- openair-cn/NAS/COMMON/IES/MobileIdentity.h | 56 +- .../NAS/COMMON/IES/MobileStationClassmark2.c | 56 +- .../NAS/COMMON/IES/MobileStationClassmark2.h | 56 +- .../NAS/COMMON/IES/MobileStationClassmark3.c | 56 +- .../NAS/COMMON/IES/MobileStationClassmark3.h | 56 +- .../NAS/COMMON/IES/MsNetworkCapability.c | 56 +- .../NAS/COMMON/IES/MsNetworkCapability.h | 56 +- .../NAS/COMMON/IES/MsNetworkFeatureSupport.c | 56 +- .../NAS/COMMON/IES/MsNetworkFeatureSupport.h | 56 +- .../NAS/COMMON/IES/NasKeySetIdentifier.c | 56 +- .../NAS/COMMON/IES/NasKeySetIdentifier.h | 56 +- .../NAS/COMMON/IES/NasMessageContainer.c | 56 +- .../NAS/COMMON/IES/NasMessageContainer.h | 56 +- openair-cn/NAS/COMMON/IES/NasRequestType.c | 56 +- openair-cn/NAS/COMMON/IES/NasRequestType.h | 56 +- .../NAS/COMMON/IES/NasSecurityAlgorithms.c | 56 +- .../NAS/COMMON/IES/NasSecurityAlgorithms.h | 56 +- openair-cn/NAS/COMMON/IES/NetworkName.c | 56 +- openair-cn/NAS/COMMON/IES/NetworkName.h | 56 +- openair-cn/NAS/COMMON/IES/Nonce.c | 56 +- openair-cn/NAS/COMMON/IES/Nonce.h | 56 +- openair-cn/NAS/COMMON/IES/PTmsiSignature.c | 56 +- openair-cn/NAS/COMMON/IES/PTmsiSignature.h | 56 +- .../NAS/COMMON/IES/PacketFlowIdentifier.c | 56 +- .../NAS/COMMON/IES/PacketFlowIdentifier.h | 56 +- openair-cn/NAS/COMMON/IES/PagingIdentity.c | 56 +- openair-cn/NAS/COMMON/IES/PagingIdentity.h | 56 +- openair-cn/NAS/COMMON/IES/PdnAddress.c | 56 +- openair-cn/NAS/COMMON/IES/PdnAddress.h | 56 +- openair-cn/NAS/COMMON/IES/PdnType.c | 56 +- openair-cn/NAS/COMMON/IES/PdnType.h | 56 +- openair-cn/NAS/COMMON/IES/PlmnList.c | 56 +- openair-cn/NAS/COMMON/IES/PlmnList.h | 56 +- .../COMMON/IES/ProcedureTransactionIdentity.c | 56 +- .../COMMON/IES/ProcedureTransactionIdentity.h | 56 +- .../COMMON/IES/ProtocolConfigurationOptions.c | 56 +- .../COMMON/IES/ProtocolConfigurationOptions.h | 56 +- .../NAS/COMMON/IES/ProtocolDiscriminator.c | 56 +- .../NAS/COMMON/IES/ProtocolDiscriminator.h | 56 +- openair-cn/NAS/COMMON/IES/QualityOfService.c | 56 +- openair-cn/NAS/COMMON/IES/QualityOfService.h | 56 +- openair-cn/NAS/COMMON/IES/RadioPriority.c | 56 +- openair-cn/NAS/COMMON/IES/RadioPriority.h | 56 +- .../NAS/COMMON/IES/SecurityHeaderType.c | 56 +- .../NAS/COMMON/IES/SecurityHeaderType.h | 56 +- openair-cn/NAS/COMMON/IES/ServiceType.c | 56 +- openair-cn/NAS/COMMON/IES/ServiceType.h | 56 +- openair-cn/NAS/COMMON/IES/ShortMac.c | 56 +- openair-cn/NAS/COMMON/IES/ShortMac.h | 56 +- openair-cn/NAS/COMMON/IES/SsCode.c | 56 +- openair-cn/NAS/COMMON/IES/SsCode.h | 56 +- .../NAS/COMMON/IES/SupportedCodecList.c | 56 +- .../NAS/COMMON/IES/SupportedCodecList.h | 56 +- openair-cn/NAS/COMMON/IES/TimeZone.c | 56 +- openair-cn/NAS/COMMON/IES/TimeZone.h | 56 +- openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c | 56 +- openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h | 56 +- openair-cn/NAS/COMMON/IES/TmsiStatus.c | 56 +- openair-cn/NAS/COMMON/IES/TmsiStatus.h | 56 +- .../NAS/COMMON/IES/TrackingAreaIdentity.c | 56 +- .../NAS/COMMON/IES/TrackingAreaIdentity.h | 56 +- .../NAS/COMMON/IES/TrackingAreaIdentityList.c | 56 +- .../NAS/COMMON/IES/TrackingAreaIdentityList.h | 56 +- .../IES/TrafficFlowAggregateDescription.c | 56 +- .../IES/TrafficFlowAggregateDescription.h | 56 +- .../NAS/COMMON/IES/TrafficFlowTemplate.c | 56 +- .../NAS/COMMON/IES/TrafficFlowTemplate.h | 56 +- .../NAS/COMMON/IES/TransactionIdentifier.c | 56 +- .../NAS/COMMON/IES/TransactionIdentifier.h | 56 +- .../NAS/COMMON/IES/UeNetworkCapability.c | 56 +- .../NAS/COMMON/IES/UeNetworkCapability.h | 56 +- ...UeRadioCapabilityInformationUpdateNeeded.c | 56 +- ...UeRadioCapabilityInformationUpdateNeeded.h | 56 +- .../NAS/COMMON/IES/UeSecurityCapability.c | 56 +- .../NAS/COMMON/IES/UeSecurityCapability.h | 56 +- .../VoiceDomainPreferenceAndUeUsageSetting.c | 56 +- .../VoiceDomainPreferenceAndUeUsageSetting.h | 56 +- openair-cn/NAS/COMMON/UTIL/COPYING | 702 +-- openair-cn/NAS/COMMON/UTIL/Makefile | 29 +- openair-cn/NAS/COMMON/UTIL/OctetString.c | 56 +- openair-cn/NAS/COMMON/UTIL/OctetString.h | 56 +- openair-cn/NAS/COMMON/UTIL/TLVDecoder.c | 56 +- openair-cn/NAS/COMMON/UTIL/TLVDecoder.h | 56 +- openair-cn/NAS/COMMON/UTIL/TLVEncoder.c | 56 +- openair-cn/NAS/COMMON/UTIL/TLVEncoder.h | 56 +- openair-cn/NAS/COMMON/UTIL/device.c | 56 +- openair-cn/NAS/COMMON/UTIL/device.h | 56 +- openair-cn/NAS/COMMON/UTIL/memory.c | 56 +- openair-cn/NAS/COMMON/UTIL/memory.h | 56 +- openair-cn/NAS/COMMON/UTIL/nas_log.c | 56 +- openair-cn/NAS/COMMON/UTIL/nas_log.h | 56 +- openair-cn/NAS/COMMON/UTIL/nas_timer.c | 56 +- openair-cn/NAS/COMMON/UTIL/nas_timer.h | 56 +- openair-cn/NAS/COMMON/UTIL/parser.c | 56 +- openair-cn/NAS/COMMON/UTIL/parser.h | 56 +- openair-cn/NAS/COMMON/UTIL/socket.c | 56 +- openair-cn/NAS/COMMON/UTIL/socket.h | 56 +- openair-cn/NAS/COMMON/UTIL/stty.c | 56 +- openair-cn/NAS/COMMON/UTIL/tst/Makefile | 29 +- openair-cn/NAS/COMMON/UTIL/tst/timer.c | 56 +- openair-cn/NAS/COMMON/securityDef.h | 56 +- openair-cn/NAS/COMMON/userDef.h | 56 +- openair-cn/NAS/MME/API/MME/COPYING | 674 --- openair-cn/NAS/MME/API/MME/Makefile | 49 - openair-cn/NAS/MME/API/MME/mme_api.c | 569 --- openair-cn/NAS/MME/API/MME/mme_api.h | 146 - openair-cn/NAS/MME/EMM/Attach.c | 1692 ------- openair-cn/NAS/MME/EMM/Authentication.c | 660 --- openair-cn/NAS/MME/EMM/COPYING | 674 --- openair-cn/NAS/MME/EMM/Detach.c | 346 -- openair-cn/NAS/MME/EMM/EmmCommon.c | 514 -- openair-cn/NAS/MME/EMM/EmmCommon.h | 109 - openair-cn/NAS/MME/EMM/EmmStatusHdl.c | 165 - openair-cn/NAS/MME/EMM/Identification.c | 538 --- openair-cn/NAS/MME/EMM/IdleMode.c | 0 openair-cn/NAS/MME/EMM/IdleMode.h | 0 openair-cn/NAS/MME/EMM/LowerLayer.c | 384 -- openair-cn/NAS/MME/EMM/LowerLayer.h | 79 - openair-cn/NAS/MME/EMM/Makefile | 72 - openair-cn/NAS/MME/EMM/SAP/COPYING | 674 --- .../MME/EMM/SAP/EmmCommonProcedureInitiated.c | 186 - openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c | 157 - .../MME/EMM/SAP/EmmDeregisteredAttachNeeded.c | 0 .../SAP/EmmDeregisteredAttemptingToAttach.c | 0 .../MME/EMM/SAP/EmmDeregisteredInitiated.c | 110 - .../EMM/SAP/EmmDeregisteredLimitedService.c | 0 .../EMM/SAP/EmmDeregisteredNoCellAvailable.c | 0 .../NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c | 0 .../EMM/SAP/EmmDeregisteredNormalService.c | 0 .../MME/EMM/SAP/EmmDeregisteredPlmnSearch.c | 0 openair-cn/NAS/MME/EMM/SAP/EmmNull.c | 0 openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c | 153 - .../EMM/SAP/EmmRegisteredAttemptingToUpdate.c | 0 .../SAP/EmmRegisteredImsiDetachInitiated.c | 0 .../NAS/MME/EMM/SAP/EmmRegisteredInitiated.c | 0 .../MME/EMM/SAP/EmmRegisteredLimitedService.c | 0 .../EMM/SAP/EmmRegisteredNoCellAvailable.c | 0 .../MME/EMM/SAP/EmmRegisteredNormalService.c | 0 .../NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c | 0 .../MME/EMM/SAP/EmmRegisteredUpdateNeeded.c | 0 .../MME/EMM/SAP/EmmServiceRequestInitiated.c | 0 .../SAP/EmmTrackingAreaUpdatingInitiated.c | 0 openair-cn/NAS/MME/EMM/SAP/Makefile | 70 - openair-cn/NAS/MME/EMM/SAP/emm_as.c | 1763 ------- openair-cn/NAS/MME/EMM/SAP/emm_as.h | 72 - openair-cn/NAS/MME/EMM/SAP/emm_asDef.h | 276 -- openair-cn/NAS/MME/EMM/SAP/emm_cn.c | 468 -- openair-cn/NAS/MME/EMM/SAP/emm_cn.h | 56 - openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h | 88 - openair-cn/NAS/MME/EMM/SAP/emm_esm.c | 147 - openair-cn/NAS/MME/EMM/SAP/emm_esm.h | 73 - openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h | 116 - openair-cn/NAS/MME/EMM/SAP/emm_fsm.c | 328 -- openair-cn/NAS/MME/EMM/SAP/emm_fsm.h | 91 - openair-cn/NAS/MME/EMM/SAP/emm_recv.c | 748 --- openair-cn/NAS/MME/EMM/SAP/emm_recv.h | 129 - openair-cn/NAS/MME/EMM/SAP/emm_reg.c | 126 - openair-cn/NAS/MME/EMM/SAP/emm_reg.h | 73 - openair-cn/NAS/MME/EMM/SAP/emm_regDef.h | 138 - openair-cn/NAS/MME/EMM/SAP/emm_sap.c | 154 - openair-cn/NAS/MME/EMM/SAP/emm_sap.h | 171 - openair-cn/NAS/MME/EMM/SAP/emm_send.c | 509 -- openair-cn/NAS/MME/EMM/SAP/emm_send.h | 122 - openair-cn/NAS/MME/EMM/SecurityModeControl.c | 804 --- openair-cn/NAS/MME/EMM/ServiceRequestHdl.c | 93 - openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c | 188 - openair-cn/NAS/MME/EMM/emmData.h | 285 -- openair-cn/NAS/MME/EMM/emm_data_ctx.c | 185 - openair-cn/NAS/MME/EMM/emm_main.c | 138 - openair-cn/NAS/MME/EMM/emm_main.h | 82 - openair-cn/NAS/MME/EMM/emm_proc.h | 199 - openair-cn/NAS/MME/ESM/COPYING | 674 --- .../ESM/DedicatedEpsBearerContextActivation.c | 442 -- .../ESM/DefaultEpsBearerContextActivation.c | 497 -- .../MME/ESM/EpsBearerContextDeactivation.c | 483 -- openair-cn/NAS/MME/ESM/EsmStatusHdl.c | 199 - openair-cn/NAS/MME/ESM/Makefile | 59 - openair-cn/NAS/MME/ESM/PdnConnectivity.c | 556 --- openair-cn/NAS/MME/ESM/PdnDisconnect.c | 299 -- openair-cn/NAS/MME/ESM/SAP/COPYING | 674 --- openair-cn/NAS/MME/ESM/SAP/Makefile | 70 - openair-cn/NAS/MME/ESM/SAP/esm_recv.c | 713 --- openair-cn/NAS/MME/ESM/SAP/esm_recv.h | 129 - openair-cn/NAS/MME/ESM/SAP/esm_sap.c | 799 --- openair-cn/NAS/MME/ESM/SAP/esm_sap.h | 72 - openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h | 179 - openair-cn/NAS/MME/ESM/SAP/esm_send.c | 427 -- openair-cn/NAS/MME/ESM/SAP/esm_send.h | 119 - openair-cn/NAS/MME/ESM/esmData.h | 265 - openair-cn/NAS/MME/ESM/esm_ebr.c | 680 --- openair-cn/NAS/MME/ESM/esm_ebr.h | 89 - openair-cn/NAS/MME/ESM/esm_ebr_context.c | 431 -- openair-cn/NAS/MME/ESM/esm_ebr_context.h | 73 - openair-cn/NAS/MME/ESM/esm_ip.c | 74 - openair-cn/NAS/MME/ESM/esm_main.c | 134 - openair-cn/NAS/MME/ESM/esm_main.h | 73 - openair-cn/NAS/MME/ESM/esm_proc.h | 204 - openair-cn/NAS/MME/ESM/esm_pt.c | 95 - openair-cn/NAS/MME/ESM/esm_pt.h | 74 - openair-cn/NAS/MME/MMEprocess.c | 345 -- openair-cn/NAS/MME/nas_defs.h | 34 - openair-cn/NAS/MME/nas_itti_messaging.c | 211 - openair-cn/NAS/MME/nas_itti_messaging.h | 283 -- openair-cn/NAS/MME/nas_mme_task.c | 226 - openair-cn/NAS/MME/nas_network.c | 208 - openair-cn/NAS/MME/nas_network.h | 81 - openair-cn/NAS/MME/nas_parser.c | 243 - openair-cn/NAS/MME/nas_parser.h | 84 - openair-cn/NAS/MME/nas_proc.c | 443 -- openair-cn/NAS/MME/nas_proc.h | 116 - openair-cn/NAS/TEST/AS_SIMULATOR/Makefile | 2 +- openair-cn/NAS/TEST/NETWORK/Makefile | 2 +- openair-cn/NAS/TEST/USER/Makefile | 2 +- openair-cn/NAS/TOOLS/Makefile | 2 +- openair-cn/NAS/TOOLS/network.h | 2 +- openair-cn/NAS/TOOLS/ue_data.c | 2 +- openair-cn/NAS/TOOLS/usim_data.c | 2 +- openair-cn/NAS/UE/API/USER/Makefile | 2 +- openair-cn/NAS/UE/API/USER/at_command.c | 2 +- openair-cn/NAS/UE/API/USER/at_command.h | 2 +- openair-cn/NAS/UE/API/USER/at_error.c | 2 +- openair-cn/NAS/UE/API/USER/at_error.h | 2 +- openair-cn/NAS/UE/API/USER/at_response.c | 2 +- openair-cn/NAS/UE/API/USER/at_response.h | 2 +- openair-cn/NAS/UE/API/USER/tst/Makefile | 2 +- openair-cn/NAS/UE/API/USER/tst/at_parser.c | 2 +- openair-cn/NAS/UE/API/USER/user_api.c | 2 +- openair-cn/NAS/UE/API/USER/user_api.h | 2 +- openair-cn/NAS/UE/API/USER/user_indication.c | 2 +- openair-cn/NAS/UE/API/USER/user_indication.h | 2 +- openair-cn/NAS/UE/API/USIM/Makefile | 2 +- openair-cn/NAS/UE/API/USIM/aka_functions.h | 2 +- openair-cn/NAS/UE/API/USIM/usim_api.c | 2 +- openair-cn/NAS/UE/API/USIM/usim_api.h | 2 +- openair-cn/NAS/UE/EMM/Attach.c | 2 +- openair-cn/NAS/UE/EMM/Authentication.c | 2 +- openair-cn/NAS/UE/EMM/Detach.c | 2 +- openair-cn/NAS/UE/EMM/EmmStatusHdl.c | 2 +- openair-cn/NAS/UE/EMM/Identification.c | 2 +- openair-cn/NAS/UE/EMM/IdleMode.c | 2 +- openair-cn/NAS/UE/EMM/IdleMode.h | 2 +- openair-cn/NAS/UE/EMM/LowerLayer.c | 2 +- openair-cn/NAS/UE/EMM/LowerLayer.h | 2 +- openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c | 2 +- .../UE/EMM/SAP/EmmDeregisteredAttachNeeded.c | 2 +- .../SAP/EmmDeregisteredAttemptingToAttach.c | 2 +- .../NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c | 2 +- .../EMM/SAP/EmmDeregisteredLimitedService.c | 2 +- .../EMM/SAP/EmmDeregisteredNoCellAvailable.c | 2 +- .../NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c | 2 +- .../UE/EMM/SAP/EmmDeregisteredNormalService.c | 2 +- .../UE/EMM/SAP/EmmDeregisteredPlmnSearch.c | 2 +- openair-cn/NAS/UE/EMM/SAP/EmmNull.c | 2 +- openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c | 2 +- .../EMM/SAP/EmmRegisteredAttemptingToUpdate.c | 2 +- .../SAP/EmmRegisteredImsiDetachInitiated.c | 2 +- .../NAS/UE/EMM/SAP/EmmRegisteredInitiated.c | 2 +- .../UE/EMM/SAP/EmmRegisteredLimitedService.c | 2 +- .../UE/EMM/SAP/EmmRegisteredNoCellAvailable.c | 2 +- .../UE/EMM/SAP/EmmRegisteredNormalService.c | 2 +- .../NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c | 2 +- .../UE/EMM/SAP/EmmRegisteredUpdateNeeded.c | 2 +- .../UE/EMM/SAP/EmmServiceRequestInitiated.c | 2 +- .../SAP/EmmTrackingAreaUpdatingInitiated.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_as.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_as.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_asDef.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_esm.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_esm.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_fsm.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_fsm.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_recv.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_recv.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_reg.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_reg.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_regDef.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_sap.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_sap.h | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_send.c | 2 +- openair-cn/NAS/UE/EMM/SAP/emm_send.h | 2 +- openair-cn/NAS/UE/EMM/SecurityModeControl.c | 2 +- openair-cn/NAS/UE/EMM/ServiceRequestHdl.c | 2 +- openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c | 2 +- openair-cn/NAS/UE/EMM/emmData.h | 2 +- openair-cn/NAS/UE/EMM/emm_main.c | 2 +- openair-cn/NAS/UE/EMM/emm_main.h | 2 +- openair-cn/NAS/UE/EMM/emm_proc.h | 2 +- .../ESM/DedicatedEpsBearerContextActivation.c | 2 +- .../ESM/DefaultEpsBearerContextActivation.c | 2 +- .../NAS/UE/ESM/EpsBearerContextDeactivation.c | 2 +- openair-cn/NAS/UE/ESM/EsmStatusHdl.c | 2 +- openair-cn/NAS/UE/ESM/PdnConnectivity.c | 2 +- openair-cn/NAS/UE/ESM/PdnDisconnect.c | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_recv.c | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_recv.h | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_sap.c | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_sap.h | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_send.c | 2 +- openair-cn/NAS/UE/ESM/SAP/esm_send.h | 2 +- openair-cn/NAS/UE/ESM/esmData.h | 2 +- openair-cn/NAS/UE/ESM/esm_ebr.c | 2 +- openair-cn/NAS/UE/ESM/esm_ebr.h | 2 +- openair-cn/NAS/UE/ESM/esm_ebr_context.c | 2 +- openair-cn/NAS/UE/ESM/esm_ebr_context.h | 2 +- openair-cn/NAS/UE/ESM/esm_ip.c | 2 +- openair-cn/NAS/UE/ESM/esm_main.c | 2 +- openair-cn/NAS/UE/ESM/esm_main.h | 2 +- openair-cn/NAS/UE/ESM/esm_proc.h | 2 +- openair-cn/NAS/UE/ESM/esm_pt.c | 2 +- openair-cn/NAS/UE/ESM/esm_pt.h | 2 +- openair-cn/NAS/UE/UEprocess.c | 2 +- openair-cn/NAS/UE/nas_itti_messaging.c | 2 +- openair-cn/NAS/UE/nas_itti_messaging.h | 2 +- openair-cn/NAS/UE/nas_network.c | 2 +- openair-cn/NAS/UE/nas_network.h | 2 +- openair-cn/NAS/UE/nas_parser.c | 2 +- openair-cn/NAS/UE/nas_parser.h | 2 +- openair-cn/NAS/UE/nas_proc.c | 2 +- openair-cn/NAS/UE/nas_proc.h | 2 +- openair-cn/NAS/UE/nas_ue_task.c | 2 +- openair-cn/NAS/UE/nas_user.c | 2 +- openair-cn/NAS/UE/nas_user.h | 2 +- openair-cn/NEWS | 1 - openair-cn/OAISIM_MME/COPYING | 674 --- openair-cn/OAISIM_MME/Makefile.am | 76 - openair-cn/OAISIM_MME/oai_mme_log.c | 53 - openair-cn/OAISIM_MME/oaisim_mme.c | 85 - openair-cn/OAISIM_MME/oaisim_mme.h | 61 - openair-cn/OAI_EPC/COPYING | 674 --- openair-cn/OAI_EPC/Makefile.am | 78 - openair-cn/OAI_EPC/oai_epc.c | 93 - openair-cn/OAI_EPC/oai_epc.h | 61 - openair-cn/OAI_EPC/oai_epc_log.c | 52 - openair-cn/OAI_SGW/COPYING | 674 --- openair-cn/OAI_SGW/Makefile.am | 67 - openair-cn/OAI_SGW/oai_sgw.c | 79 - openair-cn/OAI_SGW/oai_sgw.h | 43 - openair-cn/OAI_SGW/oai_sgw_log.c | 41 - openair-cn/OPENAIRHSS/AUTHORS | 0 openair-cn/OPENAIRHSS/ChangeLog | 0 openair-cn/OPENAIRHSS/INSTALL | 370 -- openair-cn/OPENAIRHSS/Makefile.am | 54 - openair-cn/OPENAIRHSS/NEWS | 0 openair-cn/OPENAIRHSS/README | 24 - .../OPENAIRHSS/access_restriction/COPYING | 674 --- .../OPENAIRHSS/access_restriction/Makefile.am | 37 - .../access_restriction/access_restriction.c | 129 - .../access_restriction/access_restriction.h | 36 - openair-cn/OPENAIRHSS/auc/COPYING | 674 --- openair-cn/OPENAIRHSS/auc/Makefile.am | 42 - openair-cn/OPENAIRHSS/auc/auc.h | 118 - openair-cn/OPENAIRHSS/auc/fx.c | 298 -- openair-cn/OPENAIRHSS/auc/kdf.c | 174 - openair-cn/OPENAIRHSS/auc/random.c | 89 - openair-cn/OPENAIRHSS/auc/rijndael.c | 225 - openair-cn/OPENAIRHSS/auc/sequence_number.c | 88 - openair-cn/OPENAIRHSS/autogen.sh | 2 - openair-cn/OPENAIRHSS/conf/COPYING | 674 --- openair-cn/OPENAIRHSS/conf/demoCA/COPYING | 674 --- openair-cn/OPENAIRHSS/conf/hss.conf.in | 11 - openair-cn/OPENAIRHSS/conf/make_certs.sh | 75 - openair-cn/OPENAIRHSS/configure.ac | 200 - openair-cn/OPENAIRHSS/db/COPYING | 674 --- openair-cn/OPENAIRHSS/db/Makefile.am | 40 - openair-cn/OPENAIRHSS/db/db_connector.c | 702 --- openair-cn/OPENAIRHSS/db/db_epc_equipment.c | 136 - openair-cn/OPENAIRHSS/db/db_proto.h | 206 - .../OPENAIRHSS/db/db_subscription_data.c | 171 - openair-cn/OPENAIRHSS/db/oai_db.sql | 175 - openair-cn/OPENAIRHSS/db/pft_db.sql | 173 - openair-cn/OPENAIRHSS/debian/changelog | 5 - openair-cn/OPENAIRHSS/debian/compat | 1 - openair-cn/OPENAIRHSS/debian/control | 15 - openair-cn/OPENAIRHSS/debian/copyright | 0 openair-cn/OPENAIRHSS/debian/dirs | 1 - openair-cn/OPENAIRHSS/debian/files | 1 - .../OPENAIRHSS/debian/openair-hss.install | 3 - openair-cn/OPENAIRHSS/debian/rules | 12 - openair-cn/OPENAIRHSS/hss_main.c | 68 - openair-cn/OPENAIRHSS/s6a/COPYING | 674 --- openair-cn/OPENAIRHSS/s6a/Makefile.am | 49 - openair-cn/OPENAIRHSS/s6a/s6a_auth_info.c | 301 -- openair-cn/OPENAIRHSS/s6a/s6a_common.c | 66 - openair-cn/OPENAIRHSS/s6a/s6a_error.c | 84 - openair-cn/OPENAIRHSS/s6a/s6a_fd.c | 370 -- openair-cn/OPENAIRHSS/s6a/s6a_in_addr.c | 109 - openair-cn/OPENAIRHSS/s6a/s6a_peers.c | 75 - openair-cn/OPENAIRHSS/s6a/s6a_proto.h | 238 - openair-cn/OPENAIRHSS/s6a/s6a_purge_ue.c | 151 - .../OPENAIRHSS/s6a/s6a_subscription_data.c | 274 -- .../OPENAIRHSS/s6a/s6a_supported_features.c | 40 - .../OPENAIRHSS/s6a/s6a_supported_features.h | 141 - openair-cn/OPENAIRHSS/s6a/s6a_up_loc.c | 432 -- openair-cn/OPENAIRHSS/scripts/COPYING | 674 --- openair-cn/OPENAIRHSS/scripts/install_hss.sh | 145 - openair-cn/OPENAIRHSS/tests/COPYING | 674 --- openair-cn/OPENAIRHSS/tests/Makefile.am | 88 - openair-cn/OPENAIRHSS/tests/test_fd.c | 87 - openair-cn/OPENAIRHSS/tests/test_fd.h | 36 - openair-cn/OPENAIRHSS/tests/test_kdf.c | 132 - openair-cn/OPENAIRHSS/tests/test_security.c | 119 - .../OPENAIRHSS/tests/test_security_f1.c | 121 - .../OPENAIRHSS/tests/test_security_f2_f3_f5.c | 110 - .../tests/test_security_f4_f5star.c | 104 - .../OPENAIRHSS/tests/test_security_kasme.c | 87 - openair-cn/OPENAIRHSS/tests/test_utils.c | 287 -- openair-cn/OPENAIRHSS/tests/test_utils.h | 62 - openair-cn/OPENAIRHSS/tests/up_loc_test.c | 47 - openair-cn/OPENAIRHSS/utils/COPYING | 674 --- openair-cn/OPENAIRHSS/utils/Makefile.am | 40 - openair-cn/OPENAIRHSS/utils/conversion.c | 144 - openair-cn/OPENAIRHSS/utils/conversion.h | 36 - openair-cn/OPENAIRHSS/utils/hss_config.c | 260 - openair-cn/OPENAIRHSS/utils/hss_config.h | 55 - openair-cn/OPENAIRHSS/utils/hss_parser.y | 144 - openair-cn/OPENAIRHSS/utils/hss_scanner.l | 130 - openair-cn/OPENAIRHSS/utils/queue.h | 592 --- openair-cn/README | 128 - openair-cn/S11/COPYING | 674 --- openair-cn/S11/Makefile.am | 54 - openair-cn/S11/s11_common.c | 46 - openair-cn/S11/s11_common.h | 43 - openair-cn/S11/s11_ie_formatter.c | 1164 ----- openair-cn/S11/s11_ie_formatter.h | 208 - openair-cn/S11/s11_mme.h | 34 - openair-cn/S11/s11_mme_peer_manager.c | 32 - openair-cn/S11/s11_mme_session_manager.c | 223 - openair-cn/S11/s11_mme_session_manager.h | 49 - openair-cn/S11/s11_mme_task.c | 322 -- openair-cn/S11/s11_sgw.c | 347 -- openair-cn/S11/s11_sgw.h | 34 - openair-cn/S11/s11_sgw_bearer_manager.c | 237 - openair-cn/S11/s11_sgw_bearer_manager.h | 40 - openair-cn/S11/s11_sgw_session_manager.c | 526 -- openair-cn/S11/s11_sgw_session_manager.h | 48 - openair-cn/S1AP/MESSAGES/ASN1/Makefile.am | 8 - openair-cn/S1AP/MESSAGES/Makefile.am | 805 --- openair-cn/S1AP/MESSAGES/Makefile.inc | 784 --- openair-cn/S1AP/Makefile.am | 70 - openair-cn/S1AP/Makefile.eNB | 163 - openair-cn/S1AP/Makefile.inc | 37 - openair-cn/S1AP/s1ap_common.c | 56 +- openair-cn/S1AP/s1ap_common.h | 56 +- openair-cn/S1AP/s1ap_eNB.c | 2 +- openair-cn/S1AP/s1ap_eNB.h | 2 +- .../s1ap_eNB_context_management_procedures.c | 2 +- .../s1ap_eNB_context_management_procedures.h | 2 +- openair-cn/S1AP/s1ap_eNB_decoder.c | 2 +- openair-cn/S1AP/s1ap_eNB_decoder.h | 2 +- openair-cn/S1AP/s1ap_eNB_default_values.h | 2 +- openair-cn/S1AP/s1ap_eNB_defs.h | 2 +- openair-cn/S1AP/s1ap_eNB_encoder.c | 2 +- openair-cn/S1AP/s1ap_eNB_encoder.h | 2 +- openair-cn/S1AP/s1ap_eNB_handlers.c | 2 +- openair-cn/S1AP/s1ap_eNB_handlers.h | 2 +- openair-cn/S1AP/s1ap_eNB_itti_messaging.c | 28 + openair-cn/S1AP/s1ap_eNB_itti_messaging.h | 2 +- .../S1AP/s1ap_eNB_management_procedures.c | 2 +- .../S1AP/s1ap_eNB_management_procedures.h | 2 +- openair-cn/S1AP/s1ap_eNB_nas_procedures.c | 2 +- openair-cn/S1AP/s1ap_eNB_nas_procedures.h | 2 +- openair-cn/S1AP/s1ap_eNB_nnsf.c | 2 +- openair-cn/S1AP/s1ap_eNB_nnsf.h | 2 +- openair-cn/S1AP/s1ap_eNB_overload.c | 2 +- openair-cn/S1AP/s1ap_eNB_overload.h | 2 +- openair-cn/S1AP/s1ap_eNB_trace.c | 2 +- openair-cn/S1AP/s1ap_eNB_ue_context.c | 2 +- openair-cn/S1AP/s1ap_eNB_ue_context.h | 2 +- openair-cn/S1AP/s1ap_mme.c | 474 -- openair-cn/S1AP/s1ap_mme.h | 185 - openair-cn/S1AP/s1ap_mme_decoder.c | 297 -- openair-cn/S1AP/s1ap_mme_decoder.h | 39 - openair-cn/S1AP/s1ap_mme_encoder.c | 266 - openair-cn/S1AP/s1ap_mme_encoder.h | 38 - openair-cn/S1AP/s1ap_mme_handlers.c | 1212 ----- openair-cn/S1AP/s1ap_mme_handlers.h | 93 - openair-cn/S1AP/s1ap_mme_itti_messaging.c | 88 - openair-cn/S1AP/s1ap_mme_itti_messaging.h | 151 - openair-cn/S1AP/s1ap_mme_nas_procedures.c | 765 --- openair-cn/S1AP/s1ap_mme_nas_procedures.h | 74 - openair-cn/S1AP/s1ap_mme_retransmission.c | 150 - openair-cn/S1AP/s1ap_mme_retransmission.h | 51 - openair-cn/S1AP/s1ap_mme_ta.c | 160 - openair-cn/S1AP/s1ap_mme_ta.h | 44 - openair-cn/S6A/COPYING | 674 --- openair-cn/S6A/Makefile.am | 52 - openair-cn/S6A/freediameter/README.txt | 15 - .../S6A/freediameter/freediameter-1.1.5.patch | 4296 ----------------- .../S6A/freediameter/freediameter-1.2.0.patch | 4245 ---------------- .../S6A/freediameter/install_freediameter.sh | 113 - openair-cn/S6A/freediameter/make_certs.sh | 64 - openair-cn/S6A/freediameter/s6a.conf | 61 - openair-cn/S6A/s6a_apn_conf.c | 28 - openair-cn/S6A/s6a_auth_info.c | 454 -- openair-cn/S6A/s6a_defs.h | 203 - openair-cn/S6A/s6a_dict.c | 182 - openair-cn/S6A/s6a_error.c | 129 - openair-cn/S6A/s6a_messages.h | 46 - openair-cn/S6A/s6a_peer.c | 149 - openair-cn/S6A/s6a_subscription_data.c | 446 -- openair-cn/S6A/s6a_task.c | 187 - openair-cn/S6A/s6a_up_loc.c | 317 -- openair-cn/SCTP/Makefile.am | 52 - openair-cn/SCTP/Makefile.eNB | 71 - openair-cn/SCTP/sctp_common.c | 56 +- openair-cn/SCTP/sctp_common.h | 56 +- openair-cn/SCTP/sctp_default_values.h | 56 +- openair-cn/SCTP/sctp_eNB_defs.h | 2 +- openair-cn/SCTP/sctp_eNB_itti_messaging.c | 2 +- openair-cn/SCTP/sctp_eNB_itti_messaging.h | 2 +- openair-cn/SCTP/sctp_eNB_task.c | 2 +- openair-cn/SCTP/sctp_eNB_task.h | 2 +- openair-cn/SCTP/sctp_itti_messaging.c | 85 - openair-cn/SCTP/sctp_itti_messaging.h | 41 - openair-cn/SCTP/sctp_primitives_client.c | 2 +- openair-cn/SCTP/sctp_primitives_client.h | 2 +- openair-cn/SCTP/sctp_primitives_server.c | 697 --- openair-cn/SCTP/sctp_primitives_server.h | 69 - openair-cn/SECU/Makefile.am | 48 - openair-cn/SECU/Makefile.eNB | 77 - openair-cn/SECU/kdf.c | 2 +- openair-cn/SECU/key_nas_deriver.c | 2 +- openair-cn/SECU/key_nas_encryption.c | 2 +- openair-cn/SECU/nas_stream_eea1.c | 2 +- openair-cn/SECU/nas_stream_eea2.c | 2 +- openair-cn/SECU/nas_stream_eia1.c | 2 +- openair-cn/SECU/nas_stream_eia2.c | 2 +- openair-cn/SECU/rijndael.h | 2 +- openair-cn/SECU/secu_defs.h | 2 +- openair-cn/SECU/snow3g.c | 2 +- openair-cn/SECU/snow3g.h | 2 +- openair-cn/SGW-LITE/COPYING | 674 --- openair-cn/SGW-LITE/Makefile.am | 53 - openair-cn/SGW-LITE/pgw_lite_paa.c | 188 - openair-cn/SGW-LITE/pgw_lite_paa.h | 44 - openair-cn/SGW-LITE/s11_causes.c | 96 - openair-cn/SGW-LITE/s11_causes.h | 51 - openair-cn/SGW-LITE/sgw_lite.h | 93 - .../SGW-LITE/sgw_lite_context_manager.c | 386 -- .../SGW-LITE/sgw_lite_context_manager.h | 241 - openair-cn/SGW-LITE/sgw_lite_defs.h | 59 - openair-cn/SGW-LITE/sgw_lite_handlers.c | 1237 ----- openair-cn/SGW-LITE/sgw_lite_handlers.h | 47 - openair-cn/SGW-LITE/sgw_lite_ie_defs.h | 641 --- openair-cn/SGW-LITE/sgw_lite_task.c | 229 - openair-cn/SGW-LITE/spgw_config.c | 601 --- openair-cn/SGW-LITE/spgw_config.h | 153 - openair-cn/TEST/EPC_TEST/generate_scenario.c | 2 +- openair-cn/TEST/Makefile.am | 2 +- openair-cn/TEST/oaisim_mme_client_test.c | 2 +- openair-cn/TEST/oaisim_mme_itti_test.c | 2 +- openair-cn/TEST/oaisim_mme_list_benchmark.c | 2 +- openair-cn/TEST/oaisim_mme_s1ap_test.c | 2 +- openair-cn/TEST/oaisim_mme_sctp_test.c | 2 +- openair-cn/TEST/oaisim_mme_test_s1c.c | 2 +- openair-cn/TEST/oaisim_mme_test_s1c.h | 2 +- openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c | 2 +- openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h | 2 +- .../TEST/oaisim_mme_test_s1c_scenario.c | 2 +- .../TEST/oaisim_mme_test_s1c_scenario.h | 2 +- .../TEST/oaisim_mme_test_s1c_scenario1.c | 2 +- openair-cn/TEST/test_aes128_cmac_encrypt.c | 2 +- openair-cn/TEST/test_aes128_ctr_decrypt.c | 2 +- openair-cn/TEST/test_aes128_ctr_encrypt.c | 2 +- openair-cn/TEST/test_kdf.c | 2 +- openair-cn/TEST/test_s1ap.c | 2 +- openair-cn/TEST/test_secu.c | 2 +- openair-cn/TEST/test_secu_kenb.c | 2 +- openair-cn/TEST/test_secu_knas.c | 2 +- openair-cn/TEST/test_secu_knas_encrypt_eea1.c | 2 +- openair-cn/TEST/test_secu_knas_encrypt_eea2.c | 2 +- openair-cn/TEST/test_secu_knas_encrypt_eia1.c | 2 +- openair-cn/TEST/test_secu_knas_encrypt_eia2.c | 2 +- openair-cn/TEST/test_secu_knas_stream_int.c | 2 +- openair-cn/UDP/Makefile.am | 45 - openair-cn/UDP/Makefile.eNB | 69 - openair-cn/UDP/udp_eNB_task.c | 2 +- openair-cn/UDP/udp_eNB_task.h | 2 +- openair-cn/UDP/udp_primitives_server.c | 457 -- openair-cn/UDP/udp_primitives_server.h | 45 - openair-cn/UTILS/CONF/COPYING | 674 --- openair-cn/UTILS/COPYING | 702 +-- openair-cn/UTILS/HASHTABLE/COPYING | 674 --- openair-cn/UTILS/HASHTABLE/Makefile.am | 29 +- openair-cn/UTILS/HASHTABLE/Makefile.eNB | 29 +- openair-cn/UTILS/HASHTABLE/hashtable.c | 28 + openair-cn/UTILS/HASHTABLE/hashtable.h | 31 + openair-cn/UTILS/HASHTABLE/obj_hashtable.c | 27 +- openair-cn/UTILS/HASHTABLE/obj_hashtable.h | 28 + openair-cn/UTILS/Makefile.am | 29 +- openair-cn/UTILS/conversions.c | 56 +- openair-cn/UTILS/conversions.h | 56 +- openair-cn/UTILS/enum_string.c | 56 +- openair-cn/UTILS/enum_string.h | 56 +- openair-cn/UTILS/log.c | 56 +- openair-cn/UTILS/log.h | 56 +- openair-cn/UTILS/mcc_mnc_itu.c | 56 +- openair-cn/UTILS/mcc_mnc_itu.h | 56 +- openair-cn/UTILS/mme_config.c | 56 +- openair-cn/UTILS/mme_config.h | 56 +- openair-cn/UTILS/mme_default_values.h | 56 +- openair-cn/autogen.sh | 8 - openair-cn/configure.ac | 427 -- openair-cn/cppcheck.sh | 2 - openair1/MAC_INTERFACE/defs.h | 2 +- openair1/MAC_INTERFACE/extern.h | 2 +- openair1/MAC_INTERFACE/init.c | 2 +- openair1/MAC_INTERFACE/register.c | 2 +- openair1/MAC_INTERFACE/vars.h | 2 +- openair1/PHY/CODING/3gpplte.c | 2 +- openair1/PHY/CODING/3gpplte_sse.c | 2 +- openair1/PHY/CODING/3gpplte_turbo_decoder.c | 2 +- .../PHY/CODING/3gpplte_turbo_decoder_sse.c | 2 +- .../CODING/3gpplte_turbo_decoder_sse_16bit.c | 2 +- .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 2 +- openair1/PHY/CODING/TESTBENCH/ltetest.c | 2 +- openair1/PHY/CODING/TESTBENCH/pdcch_test.c | 2 +- openair1/PHY/CODING/TESTBENCH/viterbi_test.c | 2 +- openair1/PHY/CODING/ccoding_byte.c | 2 +- openair1/PHY/CODING/ccoding_byte_lte.c | 2 +- openair1/PHY/CODING/crc_byte.c | 2 +- openair1/PHY/CODING/defs.h | 2 +- openair1/PHY/CODING/extern.h | 2 +- openair1/PHY/CODING/extern_3GPPinterleaver.h | 2 +- openair1/PHY/CODING/lte_interleaver.h | 2 +- openair1/PHY/CODING/lte_interleaver2.h | 2 +- openair1/PHY/CODING/lte_interleaver_inline.h | 2 +- openair1/PHY/CODING/lte_rate_matching.c | 2 +- openair1/PHY/CODING/lte_segmentation.c | 2 +- openair1/PHY/CODING/rate_matching.c | 2 +- openair1/PHY/CODING/scrambler.h | 2 +- openair1/PHY/CODING/vars.h | 2 +- openair1/PHY/CODING/viterbi.c | 2 +- openair1/PHY/CODING/viterbi_lte.c | 2 +- openair1/PHY/INIT/defs.h | 2 +- openair1/PHY/INIT/extern.h | 2 +- openair1/PHY/INIT/init_top.c | 2 +- openair1/PHY/INIT/lte_init.c | 2 +- openair1/PHY/INIT/lte_parms.c | 2 +- openair1/PHY/INIT/vars.h | 2 +- openair1/PHY/LTE_ESTIMATION/adjust_gain.c | 2 +- openair1/PHY/LTE_ESTIMATION/defs.h | 2 +- openair1/PHY/LTE_ESTIMATION/extern.h | 2 +- openair1/PHY/LTE_ESTIMATION/filt96_32.h | 2 +- .../PHY/LTE_ESTIMATION/freq_equalization.c | 2 +- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c | 2 +- .../lte_dl_channel_estimation.c | 2 +- .../lte_dl_channel_estimation_emos.c | 2 +- .../lte_dl_mbsfn_channel_estimation.c | 2 +- .../PHY/LTE_ESTIMATION/lte_eNB_measurements.c | 2 +- .../PHY/LTE_ESTIMATION/lte_est_freq_offset.c | 2 +- openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 2 +- .../PHY/LTE_ESTIMATION/lte_sync_timefreq.c | 2 +- .../PHY/LTE_ESTIMATION/lte_ue_measurements.c | 2 +- .../lte_ul_channel_estimation.c | 2 +- openair1/PHY/LTE_ESTIMATION/pss6144.h | 2 +- openair1/PHY/LTE_ESTIMATION/vars.h | 2 +- openair1/PHY/LTE_REFSIG/defs.h | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 2 +- openair1/PHY/LTE_REFSIG/lte_gold.c | 2 +- openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c | 2 +- openair1/PHY/LTE_REFSIG/lte_ul_ref.c | 2 +- openair1/PHY/LTE_REFSIG/mod_table.h | 2 +- openair1/PHY/LTE_REFSIG/primary_synch.h | 2 +- openair1/PHY/LTE_TRANSPORT/dci.c | 2 +- openair1/PHY/LTE_TRANSPORT/dci.h | 2 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 2 +- openair1/PHY/LTE_TRANSPORT/defs.h | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c | 2 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 2 +- .../PHY/LTE_TRANSPORT/dlsch_llr_computation.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h | 2 +- openair1/PHY/LTE_TRANSPORT/drs_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/extern.h | 2 +- openair1/PHY/LTE_TRANSPORT/group_hopping.c | 2 +- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 2 +- openair1/PHY/LTE_TRANSPORT/lte_mcs.c | 2 +- openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h | 2 +- openair1/PHY/LTE_TRANSPORT/pbch.c | 2 +- openair1/PHY/LTE_TRANSPORT/pcfich.c | 2 +- openair1/PHY/LTE_TRANSPORT/phich.c | 2 +- openair1/PHY/LTE_TRANSPORT/pilots.c | 2 +- openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c | 2 +- openair1/PHY/LTE_TRANSPORT/pmch.c | 2 +- openair1/PHY/LTE_TRANSPORT/power_control.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach.h | 2 +- openair1/PHY/LTE_TRANSPORT/print_stats.c | 2 +- openair1/PHY/LTE_TRANSPORT/proto.h | 2 +- openair1/PHY/LTE_TRANSPORT/pss.c | 2 +- openair1/PHY/LTE_TRANSPORT/pucch.c | 2 +- openair1/PHY/LTE_TRANSPORT/rar_tools.c | 2 +- openair1/PHY/LTE_TRANSPORT/srs_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/sss.c | 2 +- openair1/PHY/LTE_TRANSPORT/sss.h | 2 +- openair1/PHY/LTE_TRANSPORT/uci.h | 2 +- openair1/PHY/LTE_TRANSPORT/uci_tools.c | 2 +- openair1/PHY/LTE_TRANSPORT/ulsch_coding.c | 2 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 2 +- .../PHY/LTE_TRANSPORT/ulsch_demodulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/vars.h | 2 +- openair1/PHY/MODULATION/defs.h | 2 +- openair1/PHY/MODULATION/extern.h | 2 +- openair1/PHY/MODULATION/kHz_7_5.h | 2 +- openair1/PHY/MODULATION/ofdm_mod.c | 2 +- openair1/PHY/MODULATION/prach625Hz.h | 2 +- openair1/PHY/MODULATION/slot_fep.c | 2 +- openair1/PHY/MODULATION/slot_fep_mbsfn.c | 2 +- openair1/PHY/MODULATION/slot_fep_ul.c | 2 +- openair1/PHY/MODULATION/ul_7_5_kHz.c | 2 +- openair1/PHY/MODULATION/vars.h | 2 +- openair1/PHY/TOOLS/8bit_rxdemux.c | 2 +- openair1/PHY/TOOLS/8bit_txmux.c | 2 +- openair1/PHY/TOOLS/angle.c | 2 +- openair1/PHY/TOOLS/cadd_sv.c | 2 +- openair1/PHY/TOOLS/cadd_vv.c | 2 +- openair1/PHY/TOOLS/cdot_prod.c | 2 +- openair1/PHY/TOOLS/cmult_mm.c | 2 +- openair1/PHY/TOOLS/cmult_sv.c | 2 +- openair1/PHY/TOOLS/cmult_vv.c | 2 +- openair1/PHY/TOOLS/cmult_vvh.c | 2 +- openair1/PHY/TOOLS/costable.h | 2 +- openair1/PHY/TOOLS/dB_routines.c | 2 +- openair1/PHY/TOOLS/dB_routines.h | 2 +- openair1/PHY/TOOLS/defs.h | 2 +- openair1/PHY/TOOLS/extern.h | 2 +- openair1/PHY/TOOLS/file_output.c | 2 +- openair1/PHY/TOOLS/invSqrt.c | 2 +- openair1/PHY/TOOLS/log2_approx.c | 2 +- openair1/PHY/TOOLS/lte_dfts.c | 2 +- openair1/PHY/TOOLS/lte_phy_scope.c | 2 +- openair1/PHY/TOOLS/lte_phy_scope.h | 2 +- openair1/PHY/TOOLS/lut.c | 2 +- openair1/PHY/TOOLS/memory_routines.c | 2 +- openair1/PHY/TOOLS/signal_energy.c | 2 +- openair1/PHY/TOOLS/smbv.c | 2 +- openair1/PHY/TOOLS/smbv.h | 2 +- openair1/PHY/TOOLS/sqrt.c | 2 +- openair1/PHY/TOOLS/time_meas.c | 2 +- openair1/PHY/TOOLS/time_meas.h | 2 +- openair1/PHY/TOOLS/twiddle12288.h | 2 +- openair1/PHY/TOOLS/twiddle1536.h | 2 +- openair1/PHY/TOOLS/twiddle24576.h | 2 +- openair1/PHY/TOOLS/twiddle6144.h | 2 +- openair1/PHY/TOOLS/vars.h | 2 +- openair1/PHY/defs.h | 2 +- openair1/PHY/extern.h | 2 +- openair1/PHY/impl_defs_lte.h | 2 +- openair1/PHY/impl_defs_top.h | 2 +- openair1/PHY/spec_defs.h | 2 +- openair1/PHY/spec_defs_top.h | 2 +- openair1/PHY/sse_intrin.h | 2 +- openair1/PHY/types.h | 2 +- openair1/PHY/vars.h | 2 +- openair1/SCHED/defs.h | 2 +- openair1/SCHED/extern.h | 2 +- openair1/SCHED/phy_procedures_emos.h | 2 +- openair1/SCHED/phy_procedures_lte_common.c | 2 +- openair1/SCHED/phy_procedures_lte_eNb.c | 2 +- openair1/SCHED/phy_procedures_lte_ue.c | 2 +- openair1/SCHED/pucch_pc.c | 2 +- openair1/SCHED/pusch_pc.c | 2 +- openair1/SCHED/rt_compat.h | 2 +- openair1/SCHED/vars.h | 2 +- .../ETH_TRANSPORT/bypass_session_layer.c | 2 +- openair1/SIMULATION/ETH_TRANSPORT/defs.h | 2 +- .../SIMULATION/ETH_TRANSPORT/emu_transport.c | 2 +- openair1/SIMULATION/ETH_TRANSPORT/extern.h | 2 +- .../SIMULATION/ETH_TRANSPORT/multicast_link.c | 2 +- .../SIMULATION/ETH_TRANSPORT/multicast_link.h | 2 +- .../SIMULATION/ETH_TRANSPORT/netlink_init.c | 2 +- openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c | 2 +- openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h | 2 +- openair1/SIMULATION/ETH_TRANSPORT/proto.h | 2 +- openair1/SIMULATION/ETH_TRANSPORT/socket.c | 2 +- openair1/SIMULATION/ETH_TRANSPORT/socket.h | 2 +- openair1/SIMULATION/ETH_TRANSPORT/vars.h | 2 +- .../SIMULATION/LTE_PHY/LTE_Configuration.c | 2 +- .../SIMULATION/LTE_PHY/LTE_Configuration.h | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 2 +- openair1/SIMULATION/LTE_PHY/framegen.c | 2 +- openair1/SIMULATION/LTE_PHY/gpib_send.c | 2 +- openair1/SIMULATION/LTE_PHY/gpib_send.h | 2 +- openair1/SIMULATION/LTE_PHY/mbmssim.c | 2 +- openair1/SIMULATION/LTE_PHY/pbchsim.c | 2 +- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 2 +- openair1/SIMULATION/LTE_PHY/prachsim.c | 2 +- .../SIMULATION/LTE_PHY/pucchsignalgegerator.h | 2 +- .../SIMULATION/LTE_PHY/pucchsignalgenerator.c | 2 +- openair1/SIMULATION/LTE_PHY/pucchsim.c | 2 +- openair1/SIMULATION/LTE_PHY/scansim.c | 2 +- openair1/SIMULATION/LTE_PHY/signalanalyzer.c | 2 +- openair1/SIMULATION/LTE_PHY/signalanalyzer.h | 2 +- openair1/SIMULATION/LTE_PHY/syncsim.c | 2 +- openair1/SIMULATION/LTE_PHY/test.c | 2 +- .../SIMULATION/LTE_PHY/ulsignalgenerator.c | 2 +- .../SIMULATION/LTE_PHY/ulsignalgenerator.h | 2 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 2 +- openair1/SIMULATION/LTE_PHY/ulsim2.c | 2 +- openair1/SIMULATION/RF/adc.c | 2 +- openair1/SIMULATION/RF/dac.c | 2 +- openair1/SIMULATION/RF/defs.h | 2 +- openair1/SIMULATION/RF/rf.c | 2 +- openair1/SIMULATION/TOOLS/abstraction.c | 2 +- openair1/SIMULATION/TOOLS/ch_desc_proto.c | 2 +- openair1/SIMULATION/TOOLS/defs.h | 2 +- openair1/SIMULATION/TOOLS/gauss.c | 2 +- openair1/SIMULATION/TOOLS/llr_quantization.c | 2 +- openair1/SIMULATION/TOOLS/multipath_channel.c | 2 +- .../SIMULATION/TOOLS/multipath_tv_channel.c | 2 +- openair1/SIMULATION/TOOLS/random_channel.c | 2 +- openair1/SIMULATION/TOOLS/rangen_double.c | 2 +- openair1/SIMULATION/TOOLS/scm_corrmat.h | 2 +- openair1/SIMULATION/TOOLS/taus.c | 2 +- openair2/COMMON/as_message.h | 55 +- openair2/COMMON/commonDef.h | 56 +- openair2/COMMON/gtpv1_u_messages_def.h | 2 +- openair2/COMMON/gtpv1_u_messages_types.h | 2 +- openair2/COMMON/intertask_interface_conf.h | 2 +- openair2/COMMON/mac_messages_def.h | 2 +- openair2/COMMON/mac_messages_types.h | 2 +- openair2/COMMON/mac_primitives.h | 2 +- openair2/COMMON/mac_rlc_primitives.h | 2 +- openair2/COMMON/mac_rrc_primitives.h | 2 +- openair2/COMMON/messages_def.h | 2 +- openair2/COMMON/messages_types.h | 2 +- openair2/COMMON/nas_messages_def.h | 2 +- openair2/COMMON/nas_messages_types.h | 2 +- openair2/COMMON/networkDef.h | 56 +- openair2/COMMON/openair_defs.h | 2 +- openair2/COMMON/openair_types.h | 2 +- openair2/COMMON/pdcp_messages_def.h | 2 +- openair2/COMMON/pdcp_messages_types.h | 2 +- openair2/COMMON/phy_messages_def.h | 2 +- openair2/COMMON/phy_messages_types.h | 2 +- openair2/COMMON/platform_constants.h | 2 +- openair2/COMMON/platform_types.h | 2 +- openair2/COMMON/ral_messages_def.h | 2 +- openair2/COMMON/ral_messages_types.h | 2 +- openair2/COMMON/rlc_messages_def.h | 2 +- openair2/COMMON/rlc_messages_types.h | 2 +- openair2/COMMON/rrc_messages_def.h | 2 +- openair2/COMMON/rrc_messages_types.h | 2 +- openair2/COMMON/rrm_config_structs.h | 2 +- openair2/COMMON/rrm_constants.h | 2 +- openair2/COMMON/rtos_header.h | 2 +- openair2/COMMON/s1ap_messages_def.h | 2 +- openair2/COMMON/s1ap_messages_types.h | 2 +- openair2/COMMON/sctp_messages_def.h | 2 +- openair2/COMMON/sctp_messages_types.h | 2 +- openair2/COMMON/tasks_def.h | 2 +- openair2/COMMON/udp_messages_def.h | 2 +- openair2/COMMON/udp_messages_types.h | 2 +- openair2/COMMON/x2ap_messages_def.h | 2 +- openair2/COMMON/x2ap_messages_types.h | 2 +- openair2/ENB_APP/enb_app.c | 2 +- openair2/ENB_APP/enb_app.h | 2 +- openair2/ENB_APP/enb_config.c | 2 +- openair2/ENB_APP/enb_config.h | 2 +- openair2/LAYER2/MAC/config.c | 2 +- openair2/LAYER2/MAC/defs.h | 2 +- openair2/LAYER2/MAC/eNB_scheduler.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_bch.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_mch.c | 2 +- .../LAYER2/MAC/eNB_scheduler_primitives.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 2 +- openair2/LAYER2/MAC/extern.h | 2 +- openair2/LAYER2/MAC/l1_helpers.c | 2 +- openair2/LAYER2/MAC/lte_transport_init.c | 2 +- openair2/LAYER2/MAC/main.c | 2 +- openair2/LAYER2/MAC/openair2_proc.c | 2 +- openair2/LAYER2/MAC/pre_processor.c | 2 +- openair2/LAYER2/MAC/proto.h | 2 +- openair2/LAYER2/MAC/ra_procedures.c | 2 +- openair2/LAYER2/MAC/rar_tools.c | 2 +- openair2/LAYER2/MAC/ue_procedures.c | 2 +- openair2/LAYER2/MAC/vars.h | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.h | 2 +- .../PDCP_v10.1.0/pdcp_control_primitive.c | 2 +- .../pdcp_control_primitives_proto_extern.h | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c | 2 +- .../LAYER2/PDCP_v10.1.0/pdcp_primitives.c | 2 +- .../LAYER2/PDCP_v10.1.0/pdcp_primitives.h | 2 +- .../LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c | 2 +- .../PDCP_v10.1.0/pdcp_sequence_manager.c | 2 +- .../PDCP_v10.1.0/pdcp_sequence_manager.h | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c | 2 +- openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h | 2 +- .../RLC/AM_v9.3.0/rlc_am_proto_extern.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h | 2 +- .../RLC/AM_v9.3.0/rlc_am_segments_holes.c | 2 +- .../RLC/AM_v9.3.0/rlc_am_segments_holes.h | 2 +- .../RLC/AM_v9.3.0/rlc_am_status_report.c | 2 +- .../RLC/AM_v9.3.0/rlc_am_status_report.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c | 2 +- openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h | 2 +- .../AM_v9.3.0/rlc_am_timer_poll_retransmit.c | 2 +- .../AM_v9.3.0/rlc_am_timer_poll_retransmit.h | 2 +- .../RLC/AM_v9.3.0/rlc_am_timer_reordering.c | 2 +- .../RLC/AM_v9.3.0/rlc_am_timer_reordering.h | 2 +- .../AM_v9.3.0/rlc_am_timer_status_prohibit.c | 2 +- .../AM_v9.3.0/rlc_am_timer_status_prohibit.h | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c | 2 +- .../LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h | 2 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c | 2 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h | 2 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h | 2 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c | 2 +- openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h | 2 +- .../LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h | 2 +- .../RLC/UM_v9.3.0/rlc_um_control_primitives.c | 2 +- .../RLC/UM_v9.3.0/rlc_um_control_primitives.h | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h | 2 +- .../LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c | 2 +- openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h | 2 +- .../RLC/UM_v9.3.0/rlc_um_very_simple_test.c | 2 +- .../RLC/UM_v9.3.0/rlc_um_very_simple_test.h | 2 +- openair2/LAYER2/RLC/rlc.c | 2 +- openair2/LAYER2/RLC/rlc.h | 2 +- openair2/LAYER2/RLC/rlc_def.h | 2 +- openair2/LAYER2/RLC/rlc_def_lte.h | 2 +- openair2/LAYER2/RLC/rlc_mac.c | 2 +- openair2/LAYER2/RLC/rlc_mpls.c | 2 +- openair2/LAYER2/RLC/rlc_primitives.h | 2 +- openair2/LAYER2/RLC/rlc_rrc.c | 2 +- openair2/LAYER2/layer2_top.c | 2 +- openair2/LAYER2/openair2_proc.c | 2 +- openair2/LAYER2/register.c | 2 +- openair2/LAYER2/register.h | 2 +- openair2/Makefile | 2 +- openair2/NAS/nas_ue_task.h | 2 +- .../NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c | 2 +- openair2/NETWORK_DRIVER/LITE/classifier.c | 2 +- openair2/NETWORK_DRIVER/LITE/common.c | 2 +- openair2/NETWORK_DRIVER/LITE/constant.h | 2 +- openair2/NETWORK_DRIVER/LITE/device.c | 2 +- openair2/NETWORK_DRIVER/LITE/ioctl.c | 2 +- openair2/NETWORK_DRIVER/LITE/ioctl.h | 2 +- openair2/NETWORK_DRIVER/LITE/local.h | 2 +- openair2/NETWORK_DRIVER/LITE/netlink.c | 2 +- openair2/NETWORK_DRIVER/LITE/proto_extern.h | 2 +- openair2/NETWORK_DRIVER/LITE/sap.h | 2 +- openair2/NETWORK_DRIVER/LITE/tool.c | 2 +- .../NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c | 2 +- openair2/NETWORK_DRIVER/MESH/classifier.c | 2 +- openair2/NETWORK_DRIVER/MESH/common.c | 2 +- openair2/NETWORK_DRIVER/MESH/constant.h | 2 +- openair2/NETWORK_DRIVER/MESH/device.c | 2 +- openair2/NETWORK_DRIVER/MESH/ioctl.c | 2 +- openair2/NETWORK_DRIVER/MESH/local.h | 2 +- openair2/NETWORK_DRIVER/MESH/mesh.c | 2 +- openair2/NETWORK_DRIVER/MESH/netlink.c | 2 +- openair2/NETWORK_DRIVER/MESH/proto_extern.h | 2 +- .../NETWORK_DRIVER/MESH/rrc_nas_primitives.h | 2 +- openair2/NETWORK_DRIVER/MESH/sap.h | 2 +- openair2/NETWORK_DRIVER/MESH/tool.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/common.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/constant.h | 2 +- openair2/NETWORK_DRIVER/UE_IP/device.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/local.h | 2 +- openair2/NETWORK_DRIVER/UE_IP/netlink.c | 2 +- openair2/NETWORK_DRIVER/UE_IP/proto_extern.h | 2 +- openair2/NETWORK_DRIVER/UE_IP/sap.h | 2 +- openair2/PHY_INTERFACE/defs.h | 2 +- openair2/PHY_INTERFACE/extern.h | 2 +- openair2/PHY_INTERFACE/mac_phy_primitives.c | 2 +- openair2/PHY_INTERFACE/mac_phy_primitives.h | 2 +- openair2/PHY_INTERFACE/vars.h | 2 +- .../L2_INTERFACE/openair_rrc_L2_interface.c | 2 +- .../L2_INTERFACE/openair_rrc_L2_interface.h | 2 +- openair2/RRC/LITE/L2_interface.c | 2 +- openair2/RRC/LITE/MESSAGES/asn1_msg.c | 2 +- openair2/RRC/LITE/MESSAGES/asn1_msg.h | 2 +- openair2/RRC/LITE/defs.h | 2 +- openair2/RRC/LITE/extern.h | 2 +- openair2/RRC/LITE/proto.h | 2 +- openair2/RRC/LITE/rrc_2_rrm_msg.c | 2 +- openair2/RRC/LITE/rrc_UE.c | 2 +- openair2/RRC/LITE/rrc_UE_ral.c | 2 +- openair2/RRC/LITE/rrc_UE_ral.h | 2 +- openair2/RRC/LITE/rrc_common.c | 2 +- openair2/RRC/LITE/rrc_config.c | 2 +- openair2/RRC/LITE/rrc_eNB.c | 2 +- openair2/RRC/LITE/rrc_eNB_GTPV1U.c | 2 +- openair2/RRC/LITE/rrc_eNB_GTPV1U.h | 2 +- openair2/RRC/LITE/rrc_eNB_S1AP.c | 2 +- openair2/RRC/LITE/rrc_eNB_S1AP.h | 2 +- openair2/RRC/LITE/rrc_eNB_UE_context.c | 2 +- openair2/RRC/LITE/rrc_eNB_UE_context.h | 2 +- openair2/RRC/LITE/rrc_eNB_ral.c | 2 +- openair2/RRC/LITE/rrc_eNB_ral.h | 2 +- openair2/RRC/LITE/rrc_rrm_interface.c | 2 +- openair2/RRC/LITE/rrc_rrm_interface.h | 2 +- openair2/RRC/LITE/rrc_types.h | 2 +- openair2/RRC/LITE/rrm_2_rrc_msg.c | 2 +- openair2/RRC/LITE/utils.c | 2 +- openair2/RRC/LITE/vars.h | 2 +- openair2/RRC/NAS/nas_config.c | 2 +- openair2/RRC/NAS/nas_config.h | 2 +- openair2/RRC/NAS/rb_config.c | 2 +- openair2/RRC/NAS/rb_config.h | 2 +- openair2/RRM_4_RRC_LITE/src/platform.h | 2 +- .../RRM_4_RRC_LITE/src/platform_constants.h | 2 +- .../RRM_4_RRC_LITE/src/platform_defines.h | 2 +- .../src/radio_resources/Asn1Utils.cpp | 2 +- .../src/radio_resources/Asn1Utils.h | 2 +- .../src/radio_resources/Command.cpp | 2 +- .../src/radio_resources/Command.h | 2 +- .../src/radio_resources/DataRadioBearer.cpp | 2 +- .../src/radio_resources/DataRadioBearer.h | 2 +- .../src/radio_resources/ENodeB.cpp | 2 +- .../src/radio_resources/ENodeB.h | 2 +- .../src/radio_resources/Exceptions.h | 2 +- .../src/radio_resources/LogicalChannel.cpp | 2 +- .../src/radio_resources/LogicalChannel.h | 2 +- .../src/radio_resources/Mobile.cpp | 2 +- .../src/radio_resources/Mobile.h | 2 +- .../src/radio_resources/RadioBearer.cpp | 2 +- .../src/radio_resources/RadioBearer.h | 2 +- .../src/radio_resources/RadioResources.cpp | 2 +- .../src/radio_resources/RadioResources.h | 2 +- .../radio_resources/SignallingRadioBearer.cpp | 2 +- .../radio_resources/SignallingRadioBearer.h | 2 +- .../src/radio_resources/Transaction.cpp | 2 +- .../src/radio_resources/Transaction.h | 2 +- .../src/radio_resources/Transactions.cpp | 2 +- .../src/radio_resources/Transactions.h | 2 +- openair2/RRM_4_RRC_LITE/src/rrm.cpp | 2 +- openair2/UTIL/AT_COMMANDS/parser.c | 2 +- openair2/UTIL/AT_COMMANDS/parser.h | 2 +- openair2/UTIL/BIGPHYS/bigphys.c | 2 +- openair2/UTIL/BIGPHYS/defs.h | 2 +- openair2/UTIL/CLI/cli.c | 2 +- openair2/UTIL/CLI/cli.h | 2 +- openair2/UTIL/CLI/cli_cmd.c | 2 +- openair2/UTIL/CLI/cli_if.h | 2 +- openair2/UTIL/CLI/cli_server.c | 2 +- openair2/UTIL/FIFO/pad_list.c | 2 +- openair2/UTIL/FIFO/pad_list.h | 2 +- openair2/UTIL/FIFO/types.h | 2 +- openair2/UTIL/LISTS/list.c | 2 +- openair2/UTIL/LOG/log.c | 2 +- openair2/UTIL/LOG/log.h | 2 +- openair2/UTIL/LOG/log_extern.h | 2 +- openair2/UTIL/LOG/log_if.h | 2 +- openair2/UTIL/LOG/vcd_signal_dumper.c | 2 +- openair2/UTIL/LOG/vcd_signal_dumper.h | 2 +- openair2/UTIL/MATH/crc_byte.c | 2 +- openair2/UTIL/MATH/oml.c | 2 +- openair2/UTIL/MATH/oml.h | 2 +- openair2/UTIL/MATH/random.c | 2 +- openair2/UTIL/MATH/random_proto_extern.h | 2 +- openair2/UTIL/MATH/taus.c | 2 +- openair2/UTIL/MEM/mem_block.c | 2 +- openair2/UTIL/MEM/mem_block.h | 2 +- openair2/UTIL/MEM/mem_mngt.c | 2 +- openair2/UTIL/MEM/mem_mngt_proto_extern.h | 2 +- openair2/UTIL/MEM/mem_pool.h | 2 +- openair2/UTIL/OCG/OCG.c | 2 +- openair2/UTIL/OCG/OCG.h | 2 +- openair2/UTIL/OCG/OCG_call_emu.h | 2 +- openair2/UTIL/OCG/OCG_config_mobi.c | 2 +- openair2/UTIL/OCG/OCG_config_mobi.h | 2 +- openair2/UTIL/OCG/OCG_create_dir.c | 2 +- openair2/UTIL/OCG/OCG_create_dir.h | 2 +- openair2/UTIL/OCG/OCG_detect_file.c | 2 +- openair2/UTIL/OCG/OCG_detect_file.h | 2 +- openair2/UTIL/OCG/OCG_extern.h | 2 +- openair2/UTIL/OCG/OCG_generate_report.c | 2 +- openair2/UTIL/OCG/OCG_generate_report.h | 2 +- openair2/UTIL/OCG/OCG_get_opt.c | 2 +- openair2/UTIL/OCG/OCG_get_opt.h | 2 +- openair2/UTIL/OCG/OCG_if.h | 2 +- openair2/UTIL/OCG/OCG_parse_XML.c | 2 +- openair2/UTIL/OCG/OCG_parse_XML.h | 2 +- openair2/UTIL/OCG/OCG_parse_filename.c | 2 +- openair2/UTIL/OCG/OCG_parse_filename.h | 2 +- openair2/UTIL/OCG/OCG_save_XML.c | 2 +- openair2/UTIL/OCG/OCG_save_XML.h | 2 +- openair2/UTIL/OCG/OCG_vars.h | 2 +- openair2/UTIL/OMG/TraCIConstants.h | 2 +- openair2/UTIL/OMG/client_traci_OMG.c | 2 +- openair2/UTIL/OMG/client_traci_OMG.h | 2 +- openair2/UTIL/OMG/common.c | 2 +- openair2/UTIL/OMG/defs.h | 2 +- openair2/UTIL/OMG/grid.c | 2 +- openair2/UTIL/OMG/grid.h | 2 +- openair2/UTIL/OMG/id_manager.c | 2 +- openair2/UTIL/OMG/id_manager.h | 2 +- openair2/UTIL/OMG/job.c | 2 +- openair2/UTIL/OMG/mobility_parser.c | 2 +- openair2/UTIL/OMG/mobility_parser.h | 2 +- openair2/UTIL/OMG/omg.c | 2 +- openair2/UTIL/OMG/omg.h | 2 +- openair2/UTIL/OMG/omg_constants.h | 2 +- openair2/UTIL/OMG/omg_hashtable.c | 2 +- openair2/UTIL/OMG/omg_hashtable.h | 2 +- openair2/UTIL/OMG/omg_vars.h | 2 +- openair2/UTIL/OMG/rwalk.c | 2 +- openair2/UTIL/OMG/rwalk.h | 2 +- openair2/UTIL/OMG/rwp.c | 2 +- openair2/UTIL/OMG/rwp.h | 2 +- openair2/UTIL/OMG/socket_traci_OMG.c | 2 +- openair2/UTIL/OMG/socket_traci_OMG.h | 2 +- openair2/UTIL/OMG/static.c | 2 +- openair2/UTIL/OMG/static.h | 2 +- openair2/UTIL/OMG/steadystaterwp.c | 2 +- openair2/UTIL/OMG/steadystaterwp.h | 2 +- openair2/UTIL/OMG/storage_traci_OMG.c | 2 +- openair2/UTIL/OMG/storage_traci_OMG.h | 2 +- openair2/UTIL/OMG/sumo.c | 2 +- openair2/UTIL/OMG/sumo.h | 2 +- openair2/UTIL/OMG/trace.c | 2 +- openair2/UTIL/OMG/trace.h | 2 +- openair2/UTIL/OMG/trace_hashtable.c | 2 +- openair2/UTIL/OMG/trace_hashtable.h | 2 +- openair2/UTIL/OPT/mac_pcap.h | 2 +- openair2/UTIL/OPT/opt.h | 2 +- openair2/UTIL/OPT/probe.c | 2 +- openair2/UTIL/OPT/socket_sender.c | 2 +- openair2/UTIL/OPT/vars.h | 2 +- openair2/UTIL/OSA/osa_defs.h | 2 +- openair2/UTIL/OSA/osa_internal.h | 2 +- openair2/UTIL/OSA/osa_key_deriver.c | 2 +- openair2/UTIL/OSA/osa_stream_eea.c | 2 +- openair2/UTIL/OSA/osa_stream_eia.c | 2 +- openair2/UTIL/OTG/otg.c | 2 +- openair2/UTIL/OTG/otg.h | 2 +- openair2/UTIL/OTG/otg_config.h | 2 +- openair2/UTIL/OTG/otg_defs.h | 2 +- openair2/UTIL/OTG/otg_externs.h | 2 +- openair2/UTIL/OTG/otg_form.c | 2 +- openair2/UTIL/OTG/otg_form.h | 2 +- openair2/UTIL/OTG/otg_kpi.c | 2 +- openair2/UTIL/OTG/otg_kpi.h | 2 +- openair2/UTIL/OTG/otg_models.c | 2 +- openair2/UTIL/OTG/otg_models.h | 2 +- openair2/UTIL/OTG/otg_rx.c | 2 +- openair2/UTIL/OTG/otg_rx.h | 2 +- openair2/UTIL/OTG/otg_rx_socket.c | 2 +- openair2/UTIL/OTG/otg_rx_socket.h | 2 +- openair2/UTIL/OTG/otg_tx.c | 2 +- openair2/UTIL/OTG/otg_tx.h | 2 +- openair2/UTIL/OTG/otg_tx_socket.c | 2 +- openair2/UTIL/OTG/otg_tx_socket.h | 2 +- openair2/UTIL/OTG/otg_vars.h | 2 +- openair2/UTIL/OTG/traffic_config.h | 2 +- openair2/UTIL/TIMER/umts_timer.c | 2 +- openair2/UTIL/TIMER/umts_timer.h | 2 +- openair2/UTIL/TIMER/umts_timer_proto_extern.h | 2 +- openair2/UTIL/TIMER/umts_timer_struct.h | 2 +- openair2/UTIL/TRACE/fifo_printf.c | 2 +- openair2/UTIL/TRACE/fifo_printf.h | 2 +- .../UTIL/TRACE/fifo_printf_proto_extern.h | 2 +- openair2/UTIL/TRACE/print.h | 2 +- openair2/X2AP/x2ap.c | 2 +- openair2/X2AP/x2ap.h | 2 +- openair2/X2AP/x2ap_common.c | 2 +- openair2/X2AP/x2ap_common.h | 2 +- .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c | 2 +- .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h | 2 +- targets/ARCH/COMMON/common_lib.c | 2 +- targets/ARCH/COMMON/common_lib.h | 2 +- .../ETHERNET/USERSPACE/LIB/ethernet_lib.c | 2 +- .../ETHERNET/USERSPACE/LIB/ethernet_lib.h | 2 +- targets/ARCH/EXMIMO/DEFS/openair_device.h | 2 +- targets/ARCH/EXMIMO/DEFS/pcie_interface.h | 2 +- targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h | 2 +- .../ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c | 2 +- targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h | 2 +- targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c | 2 +- targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c | 2 +- .../ARCH/EXMIMO/DRIVER/eurecom/module_main.c | 2 +- targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h | 2 +- targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h | 2 +- .../ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c | 2 +- targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h | 2 +- targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c | 2 +- targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c | 2 +- .../ARCH/EXMIMO/DRIVER/exmimo3/module_main.c | 2 +- targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_dev.c | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_drv.c | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_drv.h | 2 +- .../DRIVER/telecomparistech/em1_fifos.c | 2 +- .../DRIVER/telecomparistech/em1_ioctl.c | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_mmap.c | 2 +- .../EXMIMO/DRIVER/telecomparistech/em1_rw.c | 2 +- targets/ARCH/EXMIMO/USERSPACE/LIB/example.c | 2 +- .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.c | 2 +- .../ARCH/EXMIMO/USERSPACE/LIB/gain_control.h | 2 +- .../ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c | 2 +- .../ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h | 2 +- .../ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h | 2 +- .../EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h | 2 +- .../EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c | 2 +- .../EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h | 2 +- .../ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc | 2 +- .../USERSPACE/OCTAVE/oarf_config_exmimo.cc | 2 +- .../EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc | 2 +- .../OCTAVE/oarf_get_num_detected_cards.cc | 2 +- .../USERSPACE/OCTAVE/oarf_send_frame.cc | 2 +- .../ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc | 2 +- .../OCTAVE/oarf_stop_without_reset.cc | 2 +- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 2 +- targets/COMMON/create_tasks.c | 2 +- targets/COMMON/create_tasks.h | 2 +- .../enb.band7.tm1.usrpb210.epc.remote.conf | 10 +- .../PROJECTS/GENERIC-LTE-EPC/interfaces.bash | 2 +- .../PROJECTS/GENERIC-LTE-EPC/networks.bash | 2 +- .../start_enb_and_ue_virt.bash | 2 +- .../PROJECTS/GENERIC-LTE-EPC/start_ue.bash | 2 +- targets/PROJECTS/GENERIC-LTE-EPC/utils.bash | 2 +- .../PROJECTS/GENERIC-LTE-EPC/virtual_box.bash | 2 +- targets/RT/USER/TOOLS/thread_ipc.c | 2 +- targets/RT/USER/TOOLS/thread_ipc.h | 2 +- targets/RT/USER/UE_transport_IQ.c | 2 +- targets/RT/USER/condtest.c | 2 +- targets/RT/USER/eNB_transport_IQ.c | 2 +- targets/RT/USER/emos-raw.c | 2 +- targets/RT/USER/lte-softmodem.c | 2 +- targets/RT/USER/lte-ue.c | 2 +- targets/RT/USER/msg_many.h | 2 +- targets/RT/USER/rrh.c | 2 +- targets/RT/USER/rrh_gw.c | 2 +- targets/RT/USER/rrh_gw.h | 2 +- targets/RT/USER/rrh_gw_externs.h | 2 +- targets/RT/USER/rt_wrapper.c | 2 +- targets/RT/USER/rt_wrapper.h | 2 +- targets/RT/USER/sched_dlsch.c | 2 +- targets/RT/USER/sched_rx_pdsch.c | 2 +- targets/RT/USER/sched_ulsch.c | 2 +- targets/RT/USER/sleeptest.c | 2 +- targets/RT/USER/synctest.c | 2 +- .../install_asn1c_0.9.24.modified.bash | 2 +- targets/SIMU/PROC/Process.c | 2 +- targets/SIMU/PROC/Process.h | 2 +- targets/SIMU/PROC/Tsync.h | 2 +- targets/SIMU/PROC/channel_sim_proc.c | 2 +- targets/SIMU/PROC/channel_sim_proc.h | 2 +- targets/SIMU/PROC/interface.h | 2 +- targets/SIMU/USER/channel_sim.c | 2 +- targets/SIMU/USER/cor_SF_sim.c | 2 +- targets/SIMU/USER/cor_SF_sim.h | 2 +- targets/SIMU/USER/event_handler.c | 2 +- targets/SIMU/USER/event_handler.h | 2 +- targets/SIMU/USER/init_lte.c | 2 +- targets/SIMU/USER/init_lte.h | 2 +- targets/SIMU/USER/oaisim.c | 2 +- targets/SIMU/USER/oaisim.h | 2 +- targets/SIMU/USER/oaisim_config.c | 2 +- targets/SIMU/USER/oaisim_config.h | 2 +- targets/SIMU/USER/oaisim_functions.c | 2 +- targets/SIMU/USER/oaisim_functions.h | 2 +- targets/SIMU/USER/oaisim_pad.c | 2 +- targets/SIMU/USER/sinr_sim.c | 2 +- targets/TEST/OAI/case01.py | 2 +- targets/TEST/OAI/case02.py | 2 +- targets/TEST/OAI/case03.py | 2 +- targets/TEST/OAI/case04.py | 2 +- targets/TEST/OAI/case05.py | 2 +- targets/TEST/OAI/test01.py | 2 +- targets/build_helper.bash | 2 +- targets/build_oai.bash | 2 +- targets/perf_oai.bash | 2 +- 1773 files changed, 13600 insertions(+), 119437 deletions(-) delete mode 100644 cmake_targets/epc_build_oai/CMakeLists.template create mode 100644 cmake_targets/epc_test/CMakeLists.template delete mode 100755 cmake_targets/hss_build/CMakeLists.txt delete mode 100644 cmake_targets/hss_build/acl.conf.in delete mode 100644 cmake_targets/hss_build/hss.conf.in delete mode 100644 cmake_targets/hss_build/hss_fd.conf.in delete mode 100755 cmake_targets/tools/build_epc delete mode 100755 cmake_targets/tools/build_hss create mode 100755 cmake_targets/tools/build_test_epc_tools delete mode 100755 cmake_targets/tools/check_hss_s6a_certificate delete mode 100755 cmake_targets/tools/check_mme_s6a_certificate delete mode 100755 cmake_targets/tools/create_hss_database delete mode 100755 cmake_targets/tools/epc.conf.in delete mode 100755 cmake_targets/tools/epc.local.enb.conf.in delete mode 100755 cmake_targets/tools/run_epc delete mode 100755 cmake_targets/tools/run_hss delete mode 100644 cmake_targets/tools/s6a.conf.in delete mode 100644 openair-cn/AUTHORS delete mode 100755 openair-cn/COMMON/ip_forward_messages_def.h delete mode 100755 openair-cn/COMMON/ip_forward_messages_types.h delete mode 100644 openair-cn/COMMON/mme_app_messages_def.h delete mode 100644 openair-cn/COMMON/mme_app_messages_types.h delete mode 100644 openair-cn/COMMON/s11_messages_def.h delete mode 100644 openair-cn/COMMON/s11_messages_types.h delete mode 100644 openair-cn/COMMON/s6a_messages_def.h delete mode 100644 openair-cn/COMMON/s6a_messages_types.h delete mode 100644 openair-cn/COMMON/sgw_lite_def.h delete mode 100644 openair-cn/COMMON/sgw_lite_messages_types.h delete mode 100644 openair-cn/ChangeLog delete mode 100644 openair-cn/DOCS/EPC_User_Guide.docx delete mode 100644 openair-cn/DOCS/EPC_User_Guide.pdf delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/COPYING delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/INSTALL delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/Makefile delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/README delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/cmd.sh delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c delete mode 100755 openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h delete mode 100644 openair-cn/GTPV2-C/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/AUTHORS delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/COPYING delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/ChangeLog delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/NEWS delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/README delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/configure.ac delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cLog.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/queue.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/include/tree.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwError.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cIe.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEvt.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/Makefile.am delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwEvt.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h delete mode 100644 openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c delete mode 100644 openair-cn/INSTALL delete mode 100644 openair-cn/MME_APP/COPYING delete mode 100644 openair-cn/MME_APP/Makefile.am delete mode 100644 openair-cn/MME_APP/mme_app_authentication.c delete mode 100644 openair-cn/MME_APP/mme_app_bearer.c delete mode 100755 openair-cn/MME_APP/mme_app_capabilities.c delete mode 100755 openair-cn/MME_APP/mme_app_config.c delete mode 100755 openair-cn/MME_APP/mme_app_config.h delete mode 100644 openair-cn/MME_APP/mme_app_context.c delete mode 100644 openair-cn/MME_APP/mme_app_defs.h delete mode 100644 openair-cn/MME_APP/mme_app_extern.h delete mode 100644 openair-cn/MME_APP/mme_app_itti_messaging.h delete mode 100755 openair-cn/MME_APP/mme_app_location.c delete mode 100644 openair-cn/MME_APP/mme_app_main.c delete mode 100644 openair-cn/MME_APP/mme_app_statistics.c delete mode 100644 openair-cn/MME_APP/mme_app_statistics.h delete mode 100644 openair-cn/MME_APP/mme_app_ue_context.h delete mode 100644 openair-cn/MME_APP/s6a_2_nas_cause.c delete mode 100644 openair-cn/Makefile.am delete mode 100644 openair-cn/NAS/MME/API/MME/COPYING delete mode 100644 openair-cn/NAS/MME/API/MME/Makefile delete mode 100644 openair-cn/NAS/MME/API/MME/mme_api.c delete mode 100644 openair-cn/NAS/MME/API/MME/mme_api.h delete mode 100644 openair-cn/NAS/MME/EMM/Attach.c delete mode 100644 openair-cn/NAS/MME/EMM/Authentication.c delete mode 100644 openair-cn/NAS/MME/EMM/COPYING delete mode 100644 openair-cn/NAS/MME/EMM/Detach.c delete mode 100644 openair-cn/NAS/MME/EMM/EmmCommon.c delete mode 100644 openair-cn/NAS/MME/EMM/EmmCommon.h delete mode 100644 openair-cn/NAS/MME/EMM/EmmStatusHdl.c delete mode 100644 openair-cn/NAS/MME/EMM/Identification.c delete mode 100644 openair-cn/NAS/MME/EMM/IdleMode.c delete mode 100644 openair-cn/NAS/MME/EMM/IdleMode.h delete mode 100644 openair-cn/NAS/MME/EMM/LowerLayer.c delete mode 100644 openair-cn/NAS/MME/EMM/LowerLayer.h delete mode 100644 openair-cn/NAS/MME/EMM/Makefile delete mode 100644 openair-cn/NAS/MME/EMM/SAP/COPYING delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttachNeeded.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredLimitedService.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNormalService.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredPlmnSearch.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmNull.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredLimitedService.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNoCellAvailable.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNormalService.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmRegisteredUpdateNeeded.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmServiceRequestInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/Makefile delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_as.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_as.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_asDef.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_cn.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_cn.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_esm.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_esm.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_fsm.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_fsm.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_recv.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_recv.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_reg.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_reg.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_regDef.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_sap.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_sap.h delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_send.c delete mode 100644 openair-cn/NAS/MME/EMM/SAP/emm_send.h delete mode 100644 openair-cn/NAS/MME/EMM/SecurityModeControl.c delete mode 100644 openair-cn/NAS/MME/EMM/ServiceRequestHdl.c delete mode 100644 openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c delete mode 100644 openair-cn/NAS/MME/EMM/emmData.h delete mode 100644 openair-cn/NAS/MME/EMM/emm_data_ctx.c delete mode 100644 openair-cn/NAS/MME/EMM/emm_main.c delete mode 100644 openair-cn/NAS/MME/EMM/emm_main.h delete mode 100644 openair-cn/NAS/MME/EMM/emm_proc.h delete mode 100644 openair-cn/NAS/MME/ESM/COPYING delete mode 100644 openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c delete mode 100644 openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c delete mode 100644 openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c delete mode 100644 openair-cn/NAS/MME/ESM/EsmStatusHdl.c delete mode 100644 openair-cn/NAS/MME/ESM/Makefile delete mode 100644 openair-cn/NAS/MME/ESM/PdnConnectivity.c delete mode 100644 openair-cn/NAS/MME/ESM/PdnDisconnect.c delete mode 100644 openair-cn/NAS/MME/ESM/SAP/COPYING delete mode 100644 openair-cn/NAS/MME/ESM/SAP/Makefile delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_recv.c delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_recv.h delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_sap.c delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_sap.h delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_send.c delete mode 100644 openair-cn/NAS/MME/ESM/SAP/esm_send.h delete mode 100644 openair-cn/NAS/MME/ESM/esmData.h delete mode 100644 openair-cn/NAS/MME/ESM/esm_ebr.c delete mode 100644 openair-cn/NAS/MME/ESM/esm_ebr.h delete mode 100644 openair-cn/NAS/MME/ESM/esm_ebr_context.c delete mode 100644 openair-cn/NAS/MME/ESM/esm_ebr_context.h delete mode 100644 openair-cn/NAS/MME/ESM/esm_ip.c delete mode 100644 openair-cn/NAS/MME/ESM/esm_main.c delete mode 100644 openair-cn/NAS/MME/ESM/esm_main.h delete mode 100644 openair-cn/NAS/MME/ESM/esm_proc.h delete mode 100644 openair-cn/NAS/MME/ESM/esm_pt.c delete mode 100644 openair-cn/NAS/MME/ESM/esm_pt.h delete mode 100644 openair-cn/NAS/MME/MMEprocess.c delete mode 100644 openair-cn/NAS/MME/nas_defs.h delete mode 100644 openair-cn/NAS/MME/nas_itti_messaging.c delete mode 100644 openair-cn/NAS/MME/nas_itti_messaging.h delete mode 100644 openair-cn/NAS/MME/nas_mme_task.c delete mode 100644 openair-cn/NAS/MME/nas_network.c delete mode 100644 openair-cn/NAS/MME/nas_network.h delete mode 100644 openair-cn/NAS/MME/nas_parser.c delete mode 100644 openair-cn/NAS/MME/nas_parser.h delete mode 100644 openair-cn/NAS/MME/nas_proc.c delete mode 100644 openair-cn/NAS/MME/nas_proc.h delete mode 100644 openair-cn/NEWS delete mode 100644 openair-cn/OAISIM_MME/COPYING delete mode 100644 openair-cn/OAISIM_MME/Makefile.am delete mode 100644 openair-cn/OAISIM_MME/oai_mme_log.c delete mode 100644 openair-cn/OAISIM_MME/oaisim_mme.c delete mode 100644 openair-cn/OAISIM_MME/oaisim_mme.h delete mode 100644 openair-cn/OAI_EPC/COPYING delete mode 100644 openair-cn/OAI_EPC/Makefile.am delete mode 100644 openair-cn/OAI_EPC/oai_epc.c delete mode 100644 openair-cn/OAI_EPC/oai_epc.h delete mode 100644 openair-cn/OAI_EPC/oai_epc_log.c delete mode 100644 openair-cn/OAI_SGW/COPYING delete mode 100644 openair-cn/OAI_SGW/Makefile.am delete mode 100644 openair-cn/OAI_SGW/oai_sgw.c delete mode 100644 openair-cn/OAI_SGW/oai_sgw.h delete mode 100644 openair-cn/OAI_SGW/oai_sgw_log.c delete mode 100644 openair-cn/OPENAIRHSS/AUTHORS delete mode 100644 openair-cn/OPENAIRHSS/ChangeLog delete mode 100644 openair-cn/OPENAIRHSS/INSTALL delete mode 100644 openair-cn/OPENAIRHSS/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/NEWS delete mode 100644 openair-cn/OPENAIRHSS/README delete mode 100644 openair-cn/OPENAIRHSS/access_restriction/COPYING delete mode 100644 openair-cn/OPENAIRHSS/access_restriction/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/access_restriction/access_restriction.c delete mode 100644 openair-cn/OPENAIRHSS/access_restriction/access_restriction.h delete mode 100644 openair-cn/OPENAIRHSS/auc/COPYING delete mode 100644 openair-cn/OPENAIRHSS/auc/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/auc/auc.h delete mode 100644 openair-cn/OPENAIRHSS/auc/fx.c delete mode 100644 openair-cn/OPENAIRHSS/auc/kdf.c delete mode 100644 openair-cn/OPENAIRHSS/auc/random.c delete mode 100644 openair-cn/OPENAIRHSS/auc/rijndael.c delete mode 100644 openair-cn/OPENAIRHSS/auc/sequence_number.c delete mode 100755 openair-cn/OPENAIRHSS/autogen.sh delete mode 100644 openair-cn/OPENAIRHSS/conf/COPYING delete mode 100644 openair-cn/OPENAIRHSS/conf/demoCA/COPYING delete mode 100644 openair-cn/OPENAIRHSS/conf/hss.conf.in delete mode 100755 openair-cn/OPENAIRHSS/conf/make_certs.sh delete mode 100644 openair-cn/OPENAIRHSS/configure.ac delete mode 100644 openair-cn/OPENAIRHSS/db/COPYING delete mode 100644 openair-cn/OPENAIRHSS/db/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/db/db_connector.c delete mode 100644 openair-cn/OPENAIRHSS/db/db_epc_equipment.c delete mode 100644 openair-cn/OPENAIRHSS/db/db_proto.h delete mode 100644 openair-cn/OPENAIRHSS/db/db_subscription_data.c delete mode 100644 openair-cn/OPENAIRHSS/db/oai_db.sql delete mode 100644 openair-cn/OPENAIRHSS/db/pft_db.sql delete mode 100644 openair-cn/OPENAIRHSS/debian/changelog delete mode 100644 openair-cn/OPENAIRHSS/debian/compat delete mode 100644 openair-cn/OPENAIRHSS/debian/control delete mode 100644 openair-cn/OPENAIRHSS/debian/copyright delete mode 100644 openair-cn/OPENAIRHSS/debian/dirs delete mode 100644 openair-cn/OPENAIRHSS/debian/files delete mode 100644 openair-cn/OPENAIRHSS/debian/openair-hss.install delete mode 100755 openair-cn/OPENAIRHSS/debian/rules delete mode 100644 openair-cn/OPENAIRHSS/hss_main.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/COPYING delete mode 100644 openair-cn/OPENAIRHSS/s6a/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_auth_info.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_common.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_error.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_fd.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_in_addr.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_peers.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_proto.h delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_purge_ue.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_subscription_data.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_supported_features.c delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_supported_features.h delete mode 100644 openair-cn/OPENAIRHSS/s6a/s6a_up_loc.c delete mode 100644 openair-cn/OPENAIRHSS/scripts/COPYING delete mode 100644 openair-cn/OPENAIRHSS/scripts/install_hss.sh delete mode 100644 openair-cn/OPENAIRHSS/tests/COPYING delete mode 100644 openair-cn/OPENAIRHSS/tests/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/tests/test_fd.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_fd.h delete mode 100644 openair-cn/OPENAIRHSS/tests/test_kdf.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_security.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_security_f1.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_security_f2_f3_f5.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_security_f4_f5star.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_security_kasme.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_utils.c delete mode 100644 openair-cn/OPENAIRHSS/tests/test_utils.h delete mode 100644 openair-cn/OPENAIRHSS/tests/up_loc_test.c delete mode 100644 openair-cn/OPENAIRHSS/utils/COPYING delete mode 100644 openair-cn/OPENAIRHSS/utils/Makefile.am delete mode 100644 openair-cn/OPENAIRHSS/utils/conversion.c delete mode 100644 openair-cn/OPENAIRHSS/utils/conversion.h delete mode 100644 openair-cn/OPENAIRHSS/utils/hss_config.c delete mode 100644 openair-cn/OPENAIRHSS/utils/hss_config.h delete mode 100644 openair-cn/OPENAIRHSS/utils/hss_parser.y delete mode 100644 openair-cn/OPENAIRHSS/utils/hss_scanner.l delete mode 100644 openair-cn/OPENAIRHSS/utils/queue.h delete mode 100644 openair-cn/README delete mode 100644 openair-cn/S11/COPYING delete mode 100644 openair-cn/S11/Makefile.am delete mode 100644 openair-cn/S11/s11_common.c delete mode 100644 openair-cn/S11/s11_common.h delete mode 100644 openair-cn/S11/s11_ie_formatter.c delete mode 100644 openair-cn/S11/s11_ie_formatter.h delete mode 100644 openair-cn/S11/s11_mme.h delete mode 100644 openair-cn/S11/s11_mme_peer_manager.c delete mode 100644 openair-cn/S11/s11_mme_session_manager.c delete mode 100644 openair-cn/S11/s11_mme_session_manager.h delete mode 100644 openair-cn/S11/s11_mme_task.c delete mode 100644 openair-cn/S11/s11_sgw.c delete mode 100644 openair-cn/S11/s11_sgw.h delete mode 100644 openair-cn/S11/s11_sgw_bearer_manager.c delete mode 100644 openair-cn/S11/s11_sgw_bearer_manager.h delete mode 100644 openair-cn/S11/s11_sgw_session_manager.c delete mode 100644 openair-cn/S11/s11_sgw_session_manager.h delete mode 100644 openair-cn/S1AP/MESSAGES/ASN1/Makefile.am delete mode 100644 openair-cn/S1AP/MESSAGES/Makefile.am delete mode 100644 openair-cn/S1AP/MESSAGES/Makefile.inc delete mode 100644 openair-cn/S1AP/Makefile.am delete mode 100644 openair-cn/S1AP/Makefile.eNB delete mode 100644 openair-cn/S1AP/Makefile.inc delete mode 100644 openair-cn/S1AP/s1ap_mme.c delete mode 100644 openair-cn/S1AP/s1ap_mme.h delete mode 100644 openair-cn/S1AP/s1ap_mme_decoder.c delete mode 100644 openair-cn/S1AP/s1ap_mme_decoder.h delete mode 100644 openair-cn/S1AP/s1ap_mme_encoder.c delete mode 100644 openair-cn/S1AP/s1ap_mme_encoder.h delete mode 100644 openair-cn/S1AP/s1ap_mme_handlers.c delete mode 100644 openair-cn/S1AP/s1ap_mme_handlers.h delete mode 100644 openair-cn/S1AP/s1ap_mme_itti_messaging.c delete mode 100644 openair-cn/S1AP/s1ap_mme_itti_messaging.h delete mode 100644 openair-cn/S1AP/s1ap_mme_nas_procedures.c delete mode 100644 openair-cn/S1AP/s1ap_mme_nas_procedures.h delete mode 100644 openair-cn/S1AP/s1ap_mme_retransmission.c delete mode 100644 openair-cn/S1AP/s1ap_mme_retransmission.h delete mode 100644 openair-cn/S1AP/s1ap_mme_ta.c delete mode 100644 openair-cn/S1AP/s1ap_mme_ta.h delete mode 100644 openair-cn/S6A/COPYING delete mode 100644 openair-cn/S6A/Makefile.am delete mode 100644 openair-cn/S6A/freediameter/README.txt delete mode 100644 openair-cn/S6A/freediameter/freediameter-1.1.5.patch delete mode 100644 openair-cn/S6A/freediameter/freediameter-1.2.0.patch delete mode 100755 openair-cn/S6A/freediameter/install_freediameter.sh delete mode 100755 openair-cn/S6A/freediameter/make_certs.sh delete mode 100644 openair-cn/S6A/freediameter/s6a.conf delete mode 100644 openair-cn/S6A/s6a_apn_conf.c delete mode 100644 openair-cn/S6A/s6a_auth_info.c delete mode 100644 openair-cn/S6A/s6a_defs.h delete mode 100644 openair-cn/S6A/s6a_dict.c delete mode 100644 openair-cn/S6A/s6a_error.c delete mode 100644 openair-cn/S6A/s6a_messages.h delete mode 100644 openair-cn/S6A/s6a_peer.c delete mode 100644 openair-cn/S6A/s6a_subscription_data.c delete mode 100644 openair-cn/S6A/s6a_task.c delete mode 100644 openair-cn/S6A/s6a_up_loc.c delete mode 100644 openair-cn/SCTP/Makefile.am delete mode 100644 openair-cn/SCTP/Makefile.eNB delete mode 100644 openair-cn/SCTP/sctp_itti_messaging.c delete mode 100644 openair-cn/SCTP/sctp_itti_messaging.h delete mode 100644 openair-cn/SCTP/sctp_primitives_server.c delete mode 100644 openair-cn/SCTP/sctp_primitives_server.h delete mode 100644 openair-cn/SECU/Makefile.am delete mode 100644 openair-cn/SECU/Makefile.eNB delete mode 100644 openair-cn/SGW-LITE/COPYING delete mode 100644 openair-cn/SGW-LITE/Makefile.am delete mode 100755 openair-cn/SGW-LITE/pgw_lite_paa.c delete mode 100755 openair-cn/SGW-LITE/pgw_lite_paa.h delete mode 100644 openair-cn/SGW-LITE/s11_causes.c delete mode 100644 openair-cn/SGW-LITE/s11_causes.h delete mode 100755 openair-cn/SGW-LITE/sgw_lite.h delete mode 100644 openair-cn/SGW-LITE/sgw_lite_context_manager.c delete mode 100644 openair-cn/SGW-LITE/sgw_lite_context_manager.h delete mode 100644 openair-cn/SGW-LITE/sgw_lite_defs.h delete mode 100644 openair-cn/SGW-LITE/sgw_lite_handlers.c delete mode 100644 openair-cn/SGW-LITE/sgw_lite_handlers.h delete mode 100644 openair-cn/SGW-LITE/sgw_lite_ie_defs.h delete mode 100644 openair-cn/SGW-LITE/sgw_lite_task.c delete mode 100755 openair-cn/SGW-LITE/spgw_config.c delete mode 100755 openair-cn/SGW-LITE/spgw_config.h delete mode 100644 openair-cn/UDP/Makefile.am delete mode 100644 openair-cn/UDP/Makefile.eNB delete mode 100644 openair-cn/UDP/udp_primitives_server.c delete mode 100644 openair-cn/UDP/udp_primitives_server.h delete mode 100755 openair-cn/autogen.sh delete mode 100644 openair-cn/configure.ac delete mode 100644 openair-cn/cppcheck.sh diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index fa704030c6..18ef6108e2 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -20,7 +20,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # Author: laurent THOMAS, Lionel GAUTHIER @@ -340,17 +340,7 @@ add_library(S1AP_ENB ${S1AP_DIR}/s1ap_eNB_ue_context.c ) -add_library(S1AP_EPC - ${S1AP_C_DIR}/s1ap_ies_defs.h - ${S1AP_DIR}/s1ap_mme_encoder.c - ${S1AP_DIR}/s1ap_mme_decoder.c - ${S1AP_DIR}/s1ap_mme_handlers.c - ${S1AP_DIR}/s1ap_mme_nas_procedures.c - ${S1AP_DIR}/s1ap_mme.c - ${S1AP_DIR}/s1ap_mme_itti_messaging.c - ${S1AP_DIR}/s1ap_mme_retransmission.c - ${S1AP_DIR}/s1ap_mme_ta.c - ) + #X2AP # Same limitation as described in RRC/S1AP: unknown generated file list @@ -467,8 +457,6 @@ add_boolean_option(USER_MODE True "????") add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????") add_boolean_option(DISABLE_USE_NAS False "???") -add_boolean_option(ENABLE_STANDALONE_EPC True "Compile MME, SGW and PGW in a single executable") -add_boolean_option(EPC_BUILD False "???") add_boolean_option(LOWLATENCY True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14") add_boolean_option(NAS_ADDRESS_FIX False "specific to oaisim: for nasmesh driver") add_boolean_option(NAS_NETLINK False "???? Must be True to compile nasmesh driver without rtai") @@ -542,10 +530,8 @@ add_boolean_option(USE_3GPP_ADDR_AS_LINK_ADDR False "As per attribute name") # NAS LAYER OPTIONS ########################## add_boolean_option(ENABLE_NAS_UE_LOGGING True "????") -add_boolean_option(NAS_BUILT_IN_EPC False "MME NAS layer not present in this executable") add_boolean_option(NAS_BUILT_IN_UE True "UE NAS layer present in this executable") add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)") -add_boolean_option(NAS_MME False "NAS_UE and NAS_MME are incompatible options") ########################## @@ -691,9 +677,6 @@ include_directories("${OPENAIR2_DIR}/UTIL/OMV") include_directories("${OPENAIR2_DIR}/RRC/LITE/MESSAGES") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/shared") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/include") -include_directories("${OPENAIRCN_DIR}/SGW-LITE") -include_directories("${OPENAIRCN_DIR}/MME_APP") -include_directories("${OPENAIRCN_DIR}/S6A") include_directories("${OPENAIR_DIR}") # Utilities Library @@ -1023,42 +1006,6 @@ set (GTPV1U_SRC ) add_library(GTPV1U ${GTPV1U_SRC}) -set(GTPV2C_DIR ${OPENAIRCN_DIR}/GTPV2-C/nwgtpv2c-0.11/src) -add_library(GTPV2C - ${GTPV2C_DIR}/NwGtpv2cTrxn.c - ${GTPV2C_DIR}/NwGtpv2cTunnel.c - ${GTPV2C_DIR}/NwGtpv2cMsg.c - ${GTPV2C_DIR}/NwGtpv2cMsgIeParseInfo.c - ${GTPV2C_DIR}/NwGtpv2cMsgParser.c - ${GTPV2C_DIR}/NwGtpv2c.c - ) -include_directories(${OPENAIRCN_DIR}/GTPV2-C/nwgtpv2c-0.11/include/) -include_directories(${OPENAIRCN_DIR}/GTPV2-C/nwgtpv2c-0.11/shared/) - -execute_process( - COMMAND /sbin/iptables -V - OUTPUT_VARIABLE iptables_version - ) -string(REGEX REPLACE "[a-zA-Z .\r\n]" "" IPTVERSION ${iptables_version}) -string(REGEX REPLACE "[a-zA-Z \r\n]" "" IPTABLES_VERSION_STRING ${iptables_version}) - -# From original Polaris code, added _lib because cmake doesn't accept two targets with the same name -# and the driver is also named xt_GTPUSP -# the _lib suffix is removed during installation in /lib/xtables -add_library(xt_GTPUSP_lib SHARED ${OPENAIRCN_DIR}/GTPV1-U/GTPU_SP/libxt_GTPUSP.c) -target_compile_definitions(xt_GTPUSP_lib PRIVATE --D_LARGEFILE_SOURCE=1 --D_LARGE_FILES --D_FILE_OFFSET_BITS=64 --D_REENTRANT --D_INIT=libxt_GTPUSP_init --DKVERSION=3 --DPIC -IPTVERSION=${IPTVERSION} -DIPTABLES_VERSION_STRING=\"${IPTABLES_VERSION_STRING}\" -) - - - set(SCTP_SRC ${OPENAIRCN_DIR}/SCTP/sctp_common.c ${OPENAIRCN_DIR}/SCTP/sctp_eNB_task.c @@ -1066,64 +1013,8 @@ set(SCTP_SRC ) add_library(SCTP_CLIENT ${SCTP_SRC}) -add_library(SCTP_SERVER - ${OPENAIRCN_DIR}/SCTP/sctp_common.c - ${OPENAIRCN_DIR}/SCTP/sctp_itti_messaging.c - ${OPENAIRCN_DIR}/SCTP/sctp_primitives_server.c - ) - - add_library(UDP ${OPENAIRCN_DIR}/UDP/udp_eNB_task.c) -add_library(UDP_SERVER ${OPENAIRCN_DIR}/UDP/udp_primitives_server.c) - -set(S11_DIR ${OPENAIRCN_DIR}/S11) -add_library(S11 - ${S11_DIR}/s11_common.c - ${S11_DIR}/s11_ie_formatter.c - ${S11_DIR}/s11_mme_task.c - ${S11_DIR}/s11_sgw.c - ${S11_DIR}/s11_mme_session_manager.c - ${S11_DIR}/s11_sgw_session_manager.c - ${S11_DIR}/s11_sgw_bearer_manager.c -) -include_directories(${S11_DIR}) - -set(S6A_DIR ${OPENAIRCN_DIR}/S6A) -add_library(S6A - ${S6A_DIR}/s6a_auth_info.c - ${S6A_DIR}/s6a_dict.c - ${S6A_DIR}/s6a_error.c - ${S6A_DIR}/s6a_peer.c - ${S6A_DIR}/s6a_subscription_data.c - ${S6A_DIR}/s6a_task.c - ${S6A_DIR}/s6a_up_loc.c - ) - -set(SGW_DIR ${OPENAIRCN_DIR}/SGW-LITE) -add_library (SGW - ${SGW_DIR}/spgw_config.c - ${SGW_DIR}/s11_causes.c - ${SGW_DIR}/sgw_lite_task.c - ${SGW_DIR}/sgw_lite_handlers.c - ${SGW_DIR}/sgw_lite_context_manager.c - ${SGW_DIR}/pgw_lite_paa.c - ) - -set(MME_DIR ${OPENAIRCN_DIR}/MME_APP) -add_library(MME_APP - ${MME_DIR}/mme_app_capabilities.c - ${MME_DIR}/mme_app_context.c - ${MME_DIR}/mme_app_main.c - ${MME_DIR}/mme_app_bearer.c - ${MME_DIR}/mme_app_authentication.c - ${MME_DIR}/mme_app_location.c - ${MME_DIR}/mme_app_statistics.c - ${MME_DIR}/s6a_2_nas_cause.c - ) - - - set(NAS_SRC ${OPENAIRCN_DIR}/NAS/) set(libnas_api_OBJS @@ -1383,99 +1274,6 @@ if(NAS_UE) include_directories(${NAS_SRC}UE/ESM/SAP) endif() -if(NAS_MME) - set(libnas_mme_api_OBJS - ${NAS_SRC}MME/API/MME/mme_api.c - ) - set(libnas_mme_emm_OBJS - ${NAS_SRC}MME/EMM/Attach.c - ${NAS_SRC}MME/EMM/Authentication.c - ${NAS_SRC}MME/EMM/Detach.c - ${NAS_SRC}MME/EMM/EmmCommon.c - ${NAS_SRC}MME/EMM/emm_data_ctx.c - ${NAS_SRC}MME/EMM/emm_main.c - ${NAS_SRC}MME/EMM/EmmStatusHdl.c - ${NAS_SRC}MME/EMM/Identification.c - ${NAS_SRC}MME/EMM/IdleMode.c - ${NAS_SRC}MME/EMM/LowerLayer.c - ${NAS_SRC}MME/EMM/SecurityModeControl.c - ${NAS_SRC}MME/EMM/ServiceRequestHdl.c - ${NAS_SRC}MME/EMM/TrackingAreaUpdate.c - ) - set(libnas_mme_emm_sap_OBJS - ${NAS_SRC}MME/EMM/SAP/emm_as.c - ${NAS_SRC}MME/EMM/SAP/emm_cn.c - ${NAS_SRC}MME/EMM/SAP/EmmCommonProcedureInitiated.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredAttachNeeded.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregistered.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredInitiated.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredLimitedService.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNoImsi.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNormalService.c - ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredPlmnSearch.c - ${NAS_SRC}MME/EMM/SAP/emm_esm.c - ${NAS_SRC}MME/EMM/SAP/emm_fsm.c - ${NAS_SRC}MME/EMM/SAP/EmmNull.c - ${NAS_SRC}MME/EMM/SAP/emm_recv.c - ${NAS_SRC}MME/EMM/SAP/emm_reg.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c - ${NAS_SRC}MME/EMM/SAP/EmmRegistered.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredInitiated.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredLimitedService.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredNoCellAvailable.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredNormalService.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredPlmnSearch.c - ${NAS_SRC}MME/EMM/SAP/EmmRegisteredUpdateNeeded.c - ${NAS_SRC}MME/EMM/SAP/emm_sap.c - ${NAS_SRC}MME/EMM/SAP/emm_send.c - ${NAS_SRC}MME/EMM/SAP/EmmServiceRequestInitiated.c - ${NAS_SRC}MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c - ) - set (libnas_mme_esm_OBJS - ${NAS_SRC}MME/ESM/DedicatedEpsBearerContextActivation.c - ${NAS_SRC}MME/ESM/DefaultEpsBearerContextActivation.c - ${NAS_SRC}MME/ESM/EpsBearerContextDeactivation.c - ${NAS_SRC}MME/ESM/esm_ebr.c - ${NAS_SRC}MME/ESM/esm_ebr_context.c - ${NAS_SRC}MME/ESM/esm_ip.c - ${NAS_SRC}MME/ESM/esm_main.c - ${NAS_SRC}MME/ESM/esm_pt.c - ${NAS_SRC}MME/ESM/EsmStatusHdl.c - ${NAS_SRC}MME/ESM/PdnConnectivity.c - ${NAS_SRC}MME/ESM/PdnDisconnect.c - ) - set(libnas_mme_esm_sap_OBJS - ${NAS_SRC}MME/ESM/SAP/esm_recv.c - ${NAS_SRC}MME/ESM/SAP/esm_send.c - ${NAS_SRC}MME/ESM/SAP/esm_sap.c - ) - add_library(LIB_NAS_MME - ${NAS_SRC}MME/nas_itti_messaging.c - ${NAS_SRC}MME/nas_network.c - ${NAS_SRC}MME/nas_parser.c - ${NAS_SRC}MME/nas_proc.c - ${libnas_api_OBJS} - ${libnas_mme_api_OBJS} - ${libnas_emm_msg_OBJS} - ${libnas_esm_msg_OBJS} - ${libnas_ies_OBJS} - ${libnas_utils_OBJS} - ${libnas_mme_emm_OBJS} - ${libnas_mme_emm_sap_OBJS} - ${libnas_mme_esm_OBJS} - ${libnas_mme_esm_sap_OBJS} - ) - include_directories(${NAS_SRC}MME) - include_directories(${NAS_SRC}MME/API/MME) - include_directories(${NAS_SRC}MME/EMM) - include_directories(${NAS_SRC}MME/EMM/SAP) - include_directories(${NAS_SRC}MME/ESM) - include_directories(${NAS_SRC}MME/ESM/SAP) -endif() - # Make lfds as a own source code (even if it is a outside library) @@ -1667,112 +1465,6 @@ target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES}) -# EPC is ??? nodes implementation in one process -################################ -add_executable(mme_gw - ${OPENAIR_BIN_DIR}/messages_xml.h - ${OPENAIRCN_DIR}/OAI_EPC/oai_epc_log.c - ${OPENAIRCN_DIR}/OAI_EPC/oai_epc.c - ${GTPV1U_DIR}/gtpv1u_task.c - ${OPENAIRCN_DIR}/SCTP/sctp_primitives_server.c - ${OPENAIRCN_DIR}/NAS/MME/nas_mme_task.c - ) -target_link_libraries (mme_gw - -Wl,--start-group - LIB_NAS_MME S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA S6A SGW MME_APP LFDS ${MSC_LIB} ${ITTI_LIB} CN_UTILS HASHTABLE - -Wl,--end-group - pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore - ) - - -# Default parameters -# Does not work on simple install (fqdn in /etc/hosts 127.0.1.1) -#cmake_host_system_information(RESULT HSS_FQDN_STR QUERY FQDN) -#cmake_host_system_information(RESULT MME_FQDN_STR QUERY FQDN) -IF( EPC_BUILD ) - INCLUDE(FindFreeDiameter) - # if standalone eNB or UE no need for FreeDiameter - IF( FREEDIAMETER_FOUND ) - IF( NOT FREEDIAMETER_HSS_S6A_ENABLED ) - MESSAGE( SEND_ERROR "FreeDiameter is not enabled for OPENAIRHSS" ) - ENDIF( NOT FREEDIAMETER_HSS_S6A_ENABLED ) - ENDIF( FREEDIAMETER_FOUND ) - - - execute_process(COMMAND hostname --fqdn OUTPUT_VARIABLE HSS_FQDN_STR TIMEOUT 3) - execute_process(COMMAND hostname --fqdn OUTPUT_VARIABLE MME_FQDN_STR TIMEOUT 3) - string(STRIP ${HSS_FQDN_STR} HSS_FQDN_STR) - string(STRIP ${MME_FQDN_STR} MME_FQDN_STR) - - set(HSS_IP 127.0.1.1 CACHE STRING "HSS IP address, default is local") - set(MME_FQDN ${MME_FQDN_STR} CACHE STRING "MME Fully qualified domain name") - set(HSS_FQDN ${HSS_FQDN_STR} CACHE STRING "HSS Fully qualified domain name") - set(TRANSPORT_option "#No_TCP" CACHE STRING "No_TCP or No_SCTP or comment string, FreeDiameter config option") - set(TRANSPORT_PREFER_TCP_option "#Prefer_TCP" CACHE STRING "Prefer_TCP or comment string, FreeDiameter config option") - IF( NOT DEFINED REALM ) - string(FIND ${MME_FQDN} "." pos) - math(EXPR pos1 "${pos}+1") - string(SUBSTRING ${MME_FQDN} ${pos1} -1 realm_string) - message("REALM extracted from MME FQDN is ${realm_string}") - set(REALM ${realm_string} CACHE STRING "EPC realm") - ENDIF( NOT DEFINED REALM ) - message("REALM is ${REALM}") - IF( NOT DEFINED MME_HOSTNAME ) - string(FIND ${MME_FQDN} "." pos) - string(SUBSTRING ${MME_FQDN} 0 ${pos} mme_hostname_string) - message("MME_HOSTNAME extracted from MME FQDN is ${mme_hostname_string}") - set(MME_HOSTNAME ${mme_hostname_string} CACHE STRING "MME hostname") - ENDIF( NOT DEFINED MME_HOSTNAME ) - IF( NOT DEFINED HSS_HOSTNAME ) - string(FIND ${HSS_FQDN} "." pos) - string(SUBSTRING ${HSS_FQDN} 0 ${pos} hss_hostname_string) - message("HSS_HOSTNAME extracted from HSS FQDN is ${hss_hostname_string}") - set(HSS_HOSTNAME ${hss_hostname_string} CACHE STRING "HSS hostname") - ENDIF( NOT DEFINED HSS_HOSTNAME ) - - if ( ${MME_HOSTNAME} STREQUAL ${HSS_HOSTNAME} ) - set(MME_S6A_IS_SERVER 1 ) - endif( ${MME_HOSTNAME} STREQUAL ${HSS_HOSTNAME} ) - - IF( MME_S6A_IS_SERVER ) - set(ConnectPeer "#ConnectPeer" CACHE STRING "HSS connect to MME") - set(DIAMETER_PORT "Port = 3870" CACHE STRING "Diameter bind port, 3868 is always used by default by HSS, even if HSS client") - set(DIAMETER_SEC_PORT "SecPort = 3871" CACHE STRING "Diameter bind sec port") - ELSE( MME_S6A_IS_SERVER ) - set(ConnectPeer "#ConnectPeer" CACHE STRING "HSS act as a server") - set(DIAMETER_PORT "#Port = 3870" CACHE STRING "Diameter bind port") - set(DIAMETER_SEC_PORT "#SecPort = 3871" CACHE STRING "Diameter bind sec port") - ENDIF( MME_S6A_IS_SERVER ) - - execute_process(COMMAND sudo ${OPENAIR_CMAKE}/tools/check_mme_s6a_certificate ${FREEDIAMETER_PATH}/.. ${MME_FQDN} WORKING_DIRECTORY ${OPENAIR_CMAKE}) - - configure_file( - ${OPENAIR_CMAKE}/tools/s6a.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/mme_fd.conf) - configure_file( - ${OPENAIR_CMAKE}/tools/epc.local.enb.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/epc.local.enb.conf) - configure_file( - ${OPENAIR_CMAKE}/tools/epc.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/epc.conf) -ENDIF( EPC_BUILD ) - -# oai_sgw is SGW node implementation -################################ -add_executable(oai_sgw - ${OPENAIR_BIN_DIR}/messages_xml.h - ${OPENAIRCN_DIR}/OAI_SGW/oai_sgw_log.c - ${OPENAIRCN_DIR}/OAI_SGW/oai_sgw.c - ) -target_link_libraries (oai_sgw - -Wl,--start-group - GTPV1U SECU_CN SECU_OSA S6A SGW CN_UTILS LFDS ${MSC_LIB} ${ITTI_LIB} - -Wl,--end-group - pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore - ) - - - # rrh ################################ set(DRIVER2013) @@ -1918,49 +1610,6 @@ foreach(myExe dlsim ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syn ) endforeach(myExe) -#unitary tests for Core NEtwork pieces -################################# -foreach(myExe s1ap - secu_knas_encrypt_eia1 - secu_kenb - aes128_ctr_encrypt - aes128_ctr_decrypt - secu_knas_encrypt_eea2 - secu_knas secu_knas_encrypt_eea1 - kdf - aes128_cmac_encrypt - secu_knas_encrypt_eia2) - add_executable(test_${myExe} - ${OPENAIRCN_DIR}/TEST/test_util.c - ${OPENAIRCN_DIR}/TEST/test_${myExe}.c - ) - target_link_libraries (test_${myExe} - -Wl,--start-group SECU_CN UTIL LFDS -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore - ) -endforeach(myExe) - -add_executable(test_s1c_mme - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c.c - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.h - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario1.c - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.c - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.h - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_s1ap.c - ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_s1ap.h - ${OPENAIR2_DIR}/ENB_APP/enb_config.c - ${OPENAIR2_DIR}/ENB_APP/enb_config.h - ${OPENAIR2_DIR}/COMMON/commonDef.h - ${OPENAIR2_DIR}/COMMON/messages_def.h - ${OPENAIR2_DIR}/COMMON/messages_types.h - ${OPENAIRCN_DIR}/S1AP/s1ap_eNB_defs.h - ${S1AP_DIR}/s1ap_eNB_management_procedures.c - ${OPENAIR_BIN_DIR}/messages_xml.h - ) -target_link_libraries (test_s1c_mme - -Wl,--start-group SECU_CN S1AP_LIB SCTP_CLIENT UTIL LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore - ) - - add_executable(test_epc_generate_scenario ${OPENAIRCN_DIR}/TEST/EPC_TEST/generate_scenario.c ${OPENAIR2_DIR}/ENB_APP/enb_config.h @@ -1971,30 +1620,15 @@ add_executable(test_epc_generate_scenario ${OPENAIR_BIN_DIR}/messages_xml.h ) target_link_libraries (test_epc_generate_scenario - -Wl,--start-group SECU_CN S1AP_LIB UTIL S1AP_ENB LIB_NAS_UE LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} + -Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} ) - # to be added #../targets/TEST/PDCP/test_pdcp.c #../targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c -# ??? -########################### -#add_executable(oaisim_mme -# ${OPENAIR_BIN_DIR}/messages_xml.h -# ${OPENAIRCN_DIR}/OAISIM_MME/oai_mme_log.c -# ${OPENAIRCN_DIR}/OAISIM_MME/oaisim_mme.c -# ${OPENAIRCN_DIR}/NAS/nas_main.c -#) -#target_link_libraries (oaisim_mme -# -Wl,--start-group -# NAS S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA S6A S11 SGW MME_APP LFDS MSC ${ITTI_LIB} CN_UTILS HASHTABLE -# -Wl,--end-group -# pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore -#) ################################################## @@ -2124,15 +1758,6 @@ if(OAI_NW_DRIVER_USE_NETLINK) endif() make_driver(ue_ip ${OPENAIR2_DIR}/NETWORK_DRIVER/UE_IP ${ue_ip_src}) -# GTP -######################## -# KVERSION is not used in the code, but required -set(module_cc_opt "${module_cc_opt} -DKVERSION=3") -make_driver(xt_GTPUSP ${OPENAIRCN_DIR}/GTPV1-U/GTPU_SP "") - -# add the install targets -#install (TARGETS Tutorial DESTINATION bin) -#install (FILES "${PROJECT_BIN_DIR}/TutorialConfig.h" DESTINATION include) # OCTAVE tools ############### diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt index cfdb6ec2aa..e03e876bd4 100755 --- a/cmake_targets/at_commands/CMakeLists.txt +++ b/cmake_targets/at_commands/CMakeLists.txt @@ -20,7 +20,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # Author: Lionel GAUTHIER diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 24fc3c521f..f9cd26cf86 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -1,30 +1,32 @@ #!/bin/bash ################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom # -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. +# Copyright (c) 2015, EURECOM (www.eurecom.fr) +# All rights reserved. # +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: # -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. 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. # -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. # -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# The views and conclusions contained in the software and documentation are those +# of the authors and should not be interpreted as representing official policies, +# either expressed or implied, of the FreeBSD Project. # ################################################################################ # file build_oai diff --git a/cmake_targets/epc_build_oai/CMakeLists.template b/cmake_targets/epc_build_oai/CMakeLists.template deleted file mode 100644 index da80f6d4d2..0000000000 --- a/cmake_targets/epc_build_oai/CMakeLists.template +++ /dev/null @@ -1,88 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) -set ( ADDR_CONF False ) -set ( BYTE_ORDER=LITTLE_ENDIAN ) -set ( DEBUG_OMG False ) -set ( DISABLE_ITTI_DETECT_SUB_TASK_ID True ) -set ( DISABLE_XER_PRINT False ) -set ( DRIVER2013 False ) -set ( EMOS False ) -set ( ENABLE_FXP False ) -set ( ENABLE_ITTI True ) -set ( ENABLE_NAS_UE_LOGGING False ) -set ( ENABLE_NEW_MULTICAST False ) -set ( ENABLE_PGM_TRANSPORT False ) -set ( ENABLE_RAL False ) -set ( ENABLE_SECURITY False ) -set ( ENABLE_STANDALONE_EPC True ) -set ( ENABLE_USE_CPU_EXECUTION_TIME False ) -set ( ENABLE_USE_MME False ) -set ( ENABLE_VCD_FIFO False ) -set ( ENB_MODE False ) -set ( EPC_BUILD True ) -set ( EXMIMO_IOT False ) -set ( FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT False) -set ( HARD_RT False ) -set ( JUMBO_FRAME False ) -set ( LARGE_SCALE False ) -set ( LINK_ENB_PDCP_TO_GTPV1U False ) -set ( LINUX_LIST False ) -set ( LINUX False ) -set ( LOCALIZATION False ) -set ( LOG_NO_THREAD False ) -set ( LOWLATENCY False ) -set ( MAC_CONTEXT 1 ) -set ( MAX_NUM_CCs 1 ) -set ( MESSAGE_CHART_GENERATOR True) -set ( MIH_C_MEDIEVAL_EXTENSIONS False ) -set ( MSG_PRINT False ) -set ( MU_RECEIVER False ) -set ( NAS_ADDRESS_FIX False ) -set ( NAS_BUILT_IN_EPC True ) -set ( NAS_DEBUG True ) -set ( NAS_MME True ) -set ( NAS_NETLINK False ) -set ( NAS_UE False ) -set ( NB_ANTENNAS_RX "2" ) -set ( NB_ANTENNAS_TX "2" ) -set ( NB_ANTENNAS_TXRX "2" ) -set ( NEW_FFT False ) -set ( NO_RRM False ) -set ( OAI_EMU False ) -set ( OAISIM False ) -set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) -set ( OAI_NW_DRIVER_USE_NETLINK False ) -set ( OPENAIR1 False ) -set ( OPENAIR2 False ) -set ( OPENAIR_EMU False ) -set ( OPENAIR_LTE False ) -set ( PACKAGE_NAME "EPC" ) -set ( PBS_SIM False ) -set ( PC_DSP False ) -set ( PC_TARGET False ) -set ( PDCP_MSG_PRINT False ) -set ( PERFECT_CE False ) -set ( PHY_ABSTRACTION False ) -set ( PHY_CONTEXT False ) -set ( PHY_EMUL False ) -set ( PHYSIM False ) -set ( PUCCH False ) -set ( RANDOM_BF False ) -set ( RF_BOARD "False" ) -set ( RRC_ASN1_VERSION "Rel10" ) -set ( RLC_STOP_ON_LOST_PDU False ) -set ( RRC_MSG_PRINT False ) -set ( RTAI False ) -set ( S1AP_DEBUG_LIST True ) -set ( SECU False ) -set ( SMBV False ) -set ( SPECTRA False ) -set ( TEST_OMG False ) -set ( UPDATE_RELEASE_9 True) -set ( UPDATE_RELEASE_10 True) -set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) -set ( USE_MME "R10" ) -set ( USER_MODE True ) -set ( XER_PRINT False ) -set ( XFORMS False ) diff --git a/cmake_targets/epc_test/CMakeLists.template b/cmake_targets/epc_test/CMakeLists.template new file mode 100644 index 0000000000..25d94ea852 --- /dev/null +++ b/cmake_targets/epc_test/CMakeLists.template @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 2.8) + +set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI True ) +set ( ENABLE_NAS_UE_LOGGING True ) +set ( ENABLE_NEW_MULTICAST True ) +set ( ENABLE_PGM_TRANSPORT True ) +set ( ENABLE_SECURITY True ) +set ( ENABLE_STANDALONE_EPC False) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME True ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI True) +set ( ENABLE_VCD_FIFO False ) +set ( ENB_MODE True ) +set ( EXMIMO_IOT True ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U True) +set ( LINUX_LIST False ) +set ( LINUX True ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD True ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX False ) +set ( NAS_BUILT_IN_UE True) +set ( NAS_MME False ) +set ( NAS_UE True ) +set ( NB_ANTENNAS_RX "2" ) +set ( NB_ANTENNAS_TX "2" ) +set ( NB_ANTENNAS_TXRX "2" ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU False ) +set ( OAISIM False ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) +set ( OAI_NW_DRIVER_USE_NETLINK True ) +set ( OPENAIR1 False ) +set ( OPENAIR2 False ) +set ( OPENAIR_LTE F ) +set ( PACKAGE_NAME "epc_test" ) +set ( PBS_SIM False ) +set ( PDCP_USE_NETLINK True ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION True ) +set ( PHY_CONTEXT False ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD "False" ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_ASN1_VERSION "Rel10" ) +set ( RRC_DEFAULT_RAB_IS_AM True) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( SECU False ) +set ( SMBV False ) +set ( TEST_OMG False ) +set ( USE_MME "R10" ) +set ( USER_MODE True ) +set ( XER_PRINT False ) diff --git a/cmake_targets/hss_build/CMakeLists.txt b/cmake_targets/hss_build/CMakeLists.txt deleted file mode 100755 index ae4655be21..0000000000 --- a/cmake_targets/hss_build/CMakeLists.txt +++ /dev/null @@ -1,326 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# Author: Lionel GAUTHIER -############################################################################### -cmake_minimum_required(VERSION 2.8) -set(CMAKE_VERBOSE_MAKEFILE ON) - - -project(HSS) - - -ENABLE_LANGUAGE(C) -#Sends the -std=c99 flag to the gcc compiler -#add_definitions(-std=c99) - -ADD_DEFINITIONS(-D_GNU_SOURCE) - -if( NOT DEFINED OPENAIR_DIR) - message(SEND_ERROR "OPENAIR_DIR not set: ${OPENAIR_DIR}") -endif( NOT DEFINED OPENAIR_DIR) - -set(OPENAIR1_DIR ${OPENAIR_DIR}/openair1) -set(OPENAIR2_DIR ${OPENAIR_DIR}/openair2) -set(OPENAIR3_DIR ${OPENAIR_DIR}/openair3) -set(OPENAIRCN_DIR ${OPENAIR_DIR}/openair-cn) -set(OPENAIR_TARGETS ${OPENAIR_DIR}/targets) -set(OPENAIR_CMAKE_SCRIPTS ${OPENAIR_DIR}/cmake_targets/tools) -set(OPENAIRHSS_DIR ${OPENAIRCN_DIR}/OPENAIRHSS) -set(OPENAIR_BIN_DIR ${OPENAIR_TARGETS}/bin) - - -set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}") - -macro(add_option name val helpstr) - if(DEFINED ${name}) - set(value ${${name}}) - else(DEFINED ${name}) - set(value ${val}) - endif() - set(${name} ${value} CACHE STRING "${helpstr}") - add_definitions("-D${name}=${value}") -endmacro(add_option) - - -# compilation flags -# added CMAKER conditional compilation to not bother legacy building system -############################################# -if(NOT CMAKE_BUILD_TYPE) -set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE) -endif() -set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel) - -# -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2 -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -DCMAKER") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -DMALLOC_CHECK_=3") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb -DMALLOC_CHECK_=3 -O2") - - -INCLUDE(FindMySQL) -IF( NOT MySQL_FOUND ) - MESSAGE( SEND_ERROR "MySQL Client is required" ) -ENDIF( NOT MySQL_FOUND ) - -INCLUDE(FindNettle) -IF( NOT NETTLE_FOUND ) - MESSAGE( SEND_ERROR "Nettle is required" ) -ENDIF( NOT NETTLE_FOUND ) - - - -INCLUDE(FindFreeDiameter) -IF( NOT FREEDIAMETER_FOUND ) - MESSAGE( SEND_ERROR "FreeDiameter is required (use OAI installer)" ) -ENDIF( NOT FREEDIAMETER_FOUND ) -IF( NOT FREEDIAMETER_HSS_S6A_ENABLED ) - MESSAGE( SEND_ERROR "FreeDiameter is not enabled for OPENAIRHSS" ) -ENDIF( NOT FREEDIAMETER_HSS_S6A_ENABLED ) -add_definitions("-DFREEDIAMETER_VERSION=${FREEDIAMETER_VERSION}") - -find_package(BISON REQUIRED) -find_package(FLEX REQUIRED) - -set(CMAKE_THREAD_PREFER_PTHREAD TRUE) -find_package(Threads REQUIRED) - -#find_package(Subversion) -#if(SUBVERSION_FOUND) -# Subversion_WC_INFO(${OPENAIR_DIR} openair) -# set (PACKAGE_VERSION "${openair_WC_REVISION} - ${openair_WC_LAST_CHANGED_DATE}") -# Subversion_WC_LOG(${OPENAIR_DIR} openair) -# message("Last changed log is ${openair_LAST_CHANGED_LOG}") -# add_definitions("-DPACKAGE_VERSION=\"${PACKAGE_VERSION}\"") -#else() -set (PACKAGE_VERSION "No svn information") -#endif() - -add_definitions("-DPACKAGE_NAME=\"OPENAIRHSS\"") - - -################################################################################ -# ACCESS RESTRICTION LIB -################################################################################ -set(ar_SRC - ${OPENAIRHSS_DIR}/access_restriction/access_restriction.c -) -set(ar_HDR - ${OPENAIRHSS_DIR}/access_restriction/access_restriction.h - ${OPENAIRHSS_DIR}/utils/conversion.h -) - -add_library(hss_access_restriction ${ar_SRC} ${ar_HDR}) -target_include_directories(hss_access_restriction PRIVATE ${OPENAIRHSS_DIR}/utils) - - -################################################################################ -# AUC LIB -################################################################################ -set(auc_SRC - ${OPENAIRHSS_DIR}/auc/fx.c - ${OPENAIRHSS_DIR}/auc/kdf.c - ${OPENAIRHSS_DIR}/auc/random.c - ${OPENAIRHSS_DIR}/auc/rijndael.c - ${OPENAIRHSS_DIR}/auc/sequence_number.c -) -set(auc_HDR - ${OPENAIRHSS_DIR}/auc/auc.h -) - -add_library(hss_auc ${auc_SRC} ${auc_HDR}) - - -################################################################################ -# DB LIB -################################################################################ -set(db_SRC - ${OPENAIRHSS_DIR}/db/db_connector.c - ${OPENAIRHSS_DIR}/db/db_epc_equipment.c - ${OPENAIRHSS_DIR}/db/db_subscription_data.c -) -set(db_HDR - ${OPENAIRHSS_DIR}/db/db_proto.h - ${OPENAIRHSS_DIR}/utils/hss_config.h -) - -add_library(hss_db ${db_SRC} ${db_HDR}) -target_include_directories(hss_db PRIVATE ${OPENAIRHSS_DIR}/utils) - - -################################################################################ -# S6A LIB -################################################################################ -set(s6a_SRC - ${OPENAIRHSS_DIR}/s6a/s6a_auth_info.c - ${OPENAIRHSS_DIR}/s6a/s6a_common.c - ${OPENAIRHSS_DIR}/s6a/s6a_error.c - ${OPENAIRHSS_DIR}/s6a/s6a_fd.c - ${OPENAIRHSS_DIR}/s6a/s6a_in_addr.c - ${OPENAIRHSS_DIR}/s6a/s6a_peers.c - ${OPENAIRHSS_DIR}/s6a/s6a_purge_ue.c - ${OPENAIRHSS_DIR}/s6a/s6a_subscription_data.c - ${OPENAIRHSS_DIR}/s6a/s6a_supported_features.c - ${OPENAIRHSS_DIR}/s6a/s6a_up_loc.c -) -set(s6a_HDR - ${OPENAIRHSS_DIR}/s6a/s6a_proto.h - ${OPENAIRHSS_DIR}/db/db_proto.h - ${OPENAIRHSS_DIR}/utils/hss_config.h - ${OPENAIRHSS_DIR}/auc/auc.h - ${OPENAIRHSS_DIR}/access_restriction/access_restriction.h -) - -add_library(hss_s6a ${s6a_SRC} ${s6a_HDR}) -target_include_directories(hss_s6a PRIVATE ${OPENAIRHSS_DIR}/utils) -target_include_directories(hss_s6a PRIVATE ${OPENAIRHSS_DIR}/db) -target_include_directories(hss_s6a PRIVATE ${OPENAIRHSS_DIR}/auc) -target_include_directories(hss_s6a PRIVATE ${OPENAIRHSS_DIR}/access_restriction) -target_include_directories(hss_s6a PRIVATE ${FREEDIAMETER_INCLUDE_DIR}) - -################################################################################ -# UTILS LIB -################################################################################ -# Create target for the parser - ADD_CUSTOM_TARGET(HSSParser echo "Creating hss_parser.c") - -set(UTILS_GENERATED_DIR ${OPENAIR_BIN_DIR}) - -# Create custom command for flex/lex (note the outputs) - ADD_CUSTOM_COMMAND( - SOURCE ${OPENAIRHSS_DIR}/utils/hss_scanner.l - COMMAND ${FLEX_EXECUTABLE} - ARGS -o${UTILS_GENERATED_DIR}/hss_scanner.c ${OPENAIRHSS_DIR}/utils/hss_scanner.l - TARGET HSSParser - OUTPUTS ${UTILS_GENERATED_DIR}/hss_scanner.c) - -# Create custom command for bison/yacc (note the DEPENDS) - ADD_CUSTOM_COMMAND( - SOURCE ${OPENAIRHSS_DIR}/utils/hss_parser.y - COMMAND ${BISON_EXECUTABLE} - ARGS -y ${OPENAIRHSS_DIR}/utils/hss_parser.y - -o ${UTILS_GENERATED_DIR}/hss_parser.c - TARGET HSSParser - DEPENDS ${UTILS_GENERATED_DIR}/hss_scanner.c - OUTPUTS ${UTILS_GENERATED_DIR}/hss_parser.c) - -set(utils_SRC - ${UTILS_GENERATED_DIR}/hss_scanner.c - ${UTILS_GENERATED_DIR}/hss_parser.c - ${OPENAIRHSS_DIR}/utils/conversion.c - ${OPENAIRHSS_DIR}/utils/hss_config.c -) -set(utils_HDR - ${UTILS_GENERATED_DIR}/hss_parser.h - ${UTILS_GENERATED_DIR}/hss_scanner.h - ${OPENAIRHSS_DIR}/utils/conversion.h - ${OPENAIRHSS_DIR}/utils/hss_config.h - ${OPENAIRHSS_DIR}/utils/queue.h -) -# Since parser.c does not exists yet when cmake is run, mark -# it as generated -SET_SOURCE_FILES_PROPERTIES(${UTILS_GENERATED_DIR}/hss_parser.c GENERATED) -SET_SOURCE_FILES_PROPERTIES(${UTILS_GENERATED_DIR}/hss_scanner.c GENERATED) -SET_SOURCE_FILES_PROPERTIES(${UTILS_GENERATED_DIR}/hss_parser.h GENERATED) -SET_SOURCE_FILES_PROPERTIES(${UTILS_GENERATED_DIR}/hss_scanner.h GENERATED) -SET_SOURCE_FILES_PROPERTIES(${OPENAIRHSS_DIR}/utils/hss_config.c DEPENDS ${UTILS_GENERATED_DIR}/hss_parser.c) -add_library(hss_utils ${utils_SRC} ${utils_HDR}) - -################################################################################ -# EXECUTABLE openair-hss -################################################################################ -include_directories( ${UTILS_GENERATED_DIR} ${OPENAIRHSS_DIR}/utils ${OPENAIRHSS_DIR}/s6a ${OPENAIRHSS_DIR}/db ${OPENAIRHSS_DIR}/auc ${OPENAIRHSS_DIR}/access_restriction) -ADD_EXECUTABLE(openair-hss ${OPENAIRHSS_DIR}/hss_main.c) -target_link_libraries (openair-hss - -Wl,-whole-archive - hss_access_restriction - hss_auc - hss_db - hss_s6a - hss_utils - -Wl,-no-whole-archive - ${MySQL_LIBRARY} - ${NETTLE_LIBRARIES} - ${FREEDIAMETER_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} ) - -# Default parameters -# Does not work on simple install (fqdn in /etc/hosts 127.0.1.1) -cmake_host_system_information(RESULT SITE_HSS_FQDN QUERY FQDN) -add_option(HSS_FQDN ${SITE_HSS_FQDN} "HSS Fully qualified domain name") -IF( NOT DEFINED REALM ) - string(FIND ${HSS_FQDN} "." pos) - math(EXPR pos1 "${pos}+1") - string(SUBSTRING ${HSS_FQDN} ${pos1} -1 realm_string) - message("REALM extracted from HSS FQDN is ${realm_string}") - set(REALM ${realm_string} CACHE STRING "HSS realm") -ENDIF( NOT DEFINED REALM ) -set(MYSQL_server "127.0.0.1" CACHE STRING "Database server IP address") -set(MYSQL_admin root CACHE STRING "Database admin login") -set(MYSQL_admin_pass linux CACHE STRING "Database admin password") -set(MYSQL_user hssadmin CACHE STRING "Database username login") -set(MYSQL_pass admin CACHE STRING "Database username password") -set(MYSQL_db oai_db CACHE STRING "Database name") -set(TRANSPORT_option "#No_TCP" CACHE STRING "No_TCP or No_SCTP or comment string, FreeDiameter config option") -set(TRANSPORT_PREFER_TCP_option "#Prefer_TCP" CACHE STRING "Prefer_TCP or comment string, FreeDiameter config option") -set(AppServThreads 2 CACHE STRING "FreeDiameter AppServThreads config option") -set(OPERATOR_key "" CACHE STRING "LTE operator clear text key (hex bytes) example 11111111111111111111111111111111") -set(RANDOM_boolean "true" CACHE STRING "If false, random function returns always 0, else random as usual.") -set(REMOTE_PEER_WHITELIST "*.${REALM}" CACHE STRING "Remote peer whitelist (separated by spaces), for freediameter acl.conf config file") -IF( FD_SERVER_IP_BIND_LIST ) - set(ListenOn "ListenOn = \"${FD_SERVER_IP_BIND_LIST}\"" CACHE STRING "FreeDiameter server IP bind addresses list") -ELSE( FD_SERVER_IP_BIND_LIST ) - set(ListenOn "#ListenOn = \"\"" CACHE STRING "FreeDiameter server IP bind addresses list") -ENDIF( FD_SERVER_IP_BIND_LIST ) - -IF( HSS_CONNECT_TO_MME ) - set(ConnectPeer "ConnectPeer" CACHE STRING "HSS connect to MME") - set(DIAMETER_PORT "#Port = 3868" CACHE STRING "Diameter bind port") - set(DIAMETER_SEC_PORT "#SecPort = 3869" CACHE STRING "Diameter bind sec port") -ELSE( HSS_CONNECT_TO_MME ) - set(ConnectPeer "#ConnectPeer" CACHE STRING "HSS act as a server") - set(DIAMETER_PORT "Port = 3868" CACHE STRING "Diameter bind port") - set(DIAMETER_SEC_PORT "SecPort = 3869" CACHE STRING "Diameter bind sec port") -ENDIF( HSS_CONNECT_TO_MME ) - - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/hss_fd.conf.in ${CMAKE_CURRENT_BINARY_DIR}/hss_fd.conf) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/hss.conf.in ${CMAKE_CURRENT_BINARY_DIR}/hss.conf) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/acl.conf.in ${CMAKE_CURRENT_BINARY_DIR}/acl.conf) - -execute_process(COMMAND sudo ${OPENAIR_CMAKE_SCRIPTS}/check_hss_s6a_certificate ${FREEDIAMETER_PATH}/.. ${HSS_FQDN} WORKING_DIRECTORY ${OPENAIR_CMAKE_SCRIPTS} TIMEOUT 3) - -# This does not overwrite database if it exist -execute_process(COMMAND ${OPENAIR_CMAKE_SCRIPTS}/create_hss_database - ${MYSQL_admin} ${MYSQL_admin_pass} ${MYSQL_user} ${MYSQL_pass} ${MYSQL_db} - WORKING_DIRECTORY ${OPENAIR_CMAKE_SCRIPTS} - ERROR_VARIABLE ERROR_DB - TIMEOUT 5) - -IF( ERROR_DB ) - MESSAGE( SEND_ERROR "Database setup failed: ${ERROR_DB}" ) -ENDIF( ERROR_DB ) - -install (TARGETS openair-hss DESTINATION ${OPENAIR_TARGETS}/bin) - diff --git a/cmake_targets/hss_build/acl.conf.in b/cmake_targets/hss_build/acl.conf.in deleted file mode 100644 index 7702690f78..0000000000 --- a/cmake_targets/hss_build/acl.conf.in +++ /dev/null @@ -1,19 +0,0 @@ -# Configuration file for the peer whitelist extension. -# -# This extension is meant to allow connection from remote peers, without actively -# maintaining this connection ourselves (as it would be the case by declaring the -# peer in a ConnectPeer directive). -# The format of this file is very simple. It contains a list of peer names -# separated by spaces or newlines. -# -# The peer name must be a fqdn. We allow also a special "*" character as the -# first label of the fqdn, to allow all fqdn with the same domain name. -# Example: *.example.net will allow host1.example.net and host2.example.net -# -# At the beginning of a line, the following flags are allowed (case sensitive) -- either or both can appear: -# ALLOW_OLD_TLS : we accept unprotected CER/CEA exchange with Inband-Security-Id = TLS -# ALLOW_IPSEC : we accept implicitly protected connection with with peer (Inband-Security-Id = IPSec) -# It is specified for example as: -# ALLOW_IPSEC vpn.example.net vpn2.example.net *.vpn.example.net - -ALLOW_OLD_TLS @REMOTE_PEER_WHITELIST@ diff --git a/cmake_targets/hss_build/hss.conf.in b/cmake_targets/hss_build/hss.conf.in deleted file mode 100644 index dd34a117e6..0000000000 --- a/cmake_targets/hss_build/hss.conf.in +++ /dev/null @@ -1,13 +0,0 @@ -## MySQL mandatory options -MYSQL_server = "@MYSQL_server@"; -MYSQL_user = "@MYSQL_user@"; -MYSQL_pass = "@MYSQL_pass@"; -MYSQL_db = "@MYSQL_db@"; - -## HSS options -OPERATOR_key = "@OPERATOR_key@"; - -RANDOM = "@RANDOM_boolean@"; - -## Freediameter options -FD_conf = "@FREEDIAMETER_PATH@/../etc/freeDiameter/hss_fd.conf"; diff --git a/cmake_targets/hss_build/hss_fd.conf.in b/cmake_targets/hss_build/hss_fd.conf.in deleted file mode 100644 index 5d59919c35..0000000000 --- a/cmake_targets/hss_build/hss_fd.conf.in +++ /dev/null @@ -1,106 +0,0 @@ -# -------- Local --------- -# The first parameter in this section is Identity, which will be used to -# identify this peer in the Diameter network. The Diameter protocol mandates -# that the Identity used is a valid FQDN for the peer. This parameter can be -# omitted, in that case the framework will attempt to use system default value -# (as returned by hostname --fqdn). -Identity = "@HSS_FQDN@"; - -# In Diameter, all peers also belong to a Realm. If the realm is not specified, -# the framework uses the part of the Identity after the first dot. -Realm = "@REALM@"; - - -# This parameter is mandatory, even if it is possible to disable TLS for peers -# connections. A valid certificate for this Diameter Identity is expected. -TLS_Cred = "@FREEDIAMETER_PATH@/../etc/freeDiameter/hss.cert.pem", "@FREEDIAMETER_PATH@/../etc/freeDiameter/hss.key.pem"; -TLS_CA = "@FREEDIAMETER_PATH@/../etc/freeDiameter/hss.cacert.pem"; - - -# Disable use of TCP protocol (only listen and connect in SCTP) -# Default : TCP enabled -@TRANSPORT_option@; - - -# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option. -# Prefer TCP instead of SCTP for establishing new connections. -# This setting may be overwritten per peer in peer configuration blocs. -# Default : SCTP is attempted first. -@TRANSPORT_PREFER_TCP_option@; - - -# Disable use of IPv6 addresses (only IP) -# Default : IPv6 enabled -No_IPv6; - - -# Overwrite the number of SCTP streams. This value should be kept low, -# especially if you are using TLS over SCTP, because it consumes a lot of -# resources in that case. See tickets 19 and 27 for some additional details on -# this. -# Limit the number of SCTP streams -SCTP_streams = 3; - - -# By default, freeDiameter acts as a Diameter Relay Agent by forwarding all -# messages it cannot handle locally. This parameter disables this behavior. -NoRelay; - - -TLS_old_method; - - -# Number of parallel threads that will handle incoming application messages. -# This parameter may be deprecated later in favor of a dynamic number of threads -# depending on the load. -AppServThreads = @AppServThreads@; - -# Specify the addresses on which to bind the listening server. This must be -# specified if the framework is unable to auto-detect these addresses, or if the -# auto-detected values are incorrect. Note that the list of addresses is sent -# in CER or CEA message, so one should pay attention to this parameter if some -# adresses should be kept hidden. -@ListenOn@; - -@DIAMETER_PORT@; -@DIAMETER_SEC_PORT@; - - -# -------- Extensions --------- - -# Uncomment (and create rtd.conf) to specify routing table for this peer. -#LoadExtension = "rt_default.fdx" : "rtd.conf"; - -# Uncomment (and create acl.conf) to allow incoming connections from other peers. -LoadExtension = "acl_wl.fdx" : "@FREEDIAMETER_PATH@/../etc/freeDiameter/acl.conf"; - -# Uncomment to display periodic state information -#LoadExtension = "dbg_monitor.fdx"; - -# Uncomment to enable an interactive Python interpreter session. -# (see doc/dbg_interactive.py.sample for more information) -#LoadExtension = "dbg_interactive.fdx"; - -# Load the RFC4005 dictionary objects -#LoadExtension = "dict_nasreq.fdx"; - -LoadExtension = "dict_nas_mipv6.fdx"; -LoadExtension = "dict_s6a.fdx"; - -# Load RFC4072 dictionary objects -#LoadExtension = "dict_eap.fdx"; - -# Load the Diameter EAP server extension (requires diameap.conf) -#LoadExtension = "app_diameap.fdx" : "diameap.conf"; - -# Load the Accounting Server extension (requires app_acct.conf) -#LoadExtension = "app_acct.fdx" : "app_acct.conf"; - -# -------- Peers --------- - -# The framework will actively attempt to establish and maintain a connection -# with the peers listed here. -# For only accepting incoming connections, see the acl_wl.fx extension. - -#ConnectPeer = "ubuntu.localdomain" { ConnectTo = "127.0.0.1"; No_TLS; }; -@ConnectPeer@ = "@MME_FQDN@" { ConnectTo = "@MME_IP@"; Realm = "@REALM@"; No_IPv6; No_TLS ; port = 3870; }; \ No newline at end of file diff --git a/cmake_targets/tools/build_epc b/cmake_targets/tools/build_epc deleted file mode 100755 index 0caeaf2617..0000000000 --- a/cmake_targets/tools/build_epc +++ /dev/null @@ -1,302 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file build_epc -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -# -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -source $THIS_SCRIPT_PATH/build_helper - -function help() -{ - echo_error " " - echo_error "Usage: build_epc [OPTION]..." - echo_error "Build the EPC executable." - echo_error " " - echo_error "Options:" - echo_error "Mandatory arguments to long options are mandatory for short options too." - echo_error " -c, --clean Clean the build generated files (build from scratch)" - echo_error " -C, --conf-files-only Generate only EPC configuration files (no build)" - echo_error " -d, --debug Compile with debug informations." - echo_error " -h, --help Print this help." - echo_error " -g, --gtpu-easy-module Used for debugging GTPU (kernel module can be easily removed, for dev and debug purpose only)" - echo_error " -G, --gtpu-full-speed Best GTPU throughput performance, but cannot be removed (default)." - echo_error " -H, --hss hostname HSS hostname (with FQDN), default is this host (`hostname --fqdn`)." - echo_error " -i, --check-installed-software Check installed software packages necessary to build and run EPC (support Ubuntu 14.04)." - l_realm=`hostname --fqdn` - l_realm=${l_realm#*.} - echo_error " -r, --realm realm Realm of the MME (if not specified, is extracted from this host FQDN ($l_realm))." - echo_error " -s, --transport-sctp-only Diameter use SCTP only (TCP disabled)." - echo_error " -S, --s6a-server MME act as a server on s6a interface (useful when HSS and MME/EPC run on the same host)." - echo_error " -t, --transport-tcp-only Diameter use TCP only (SCTP disabled)." - echo_error " -T, --transport-prefer-tcp Diameter prefer TCP." - echo_error " -v, --verbose Build process verbose." - echo_error " " - echo_error "Examples:" - echo_error " " - echo_error "Case 1 - EPC run on same HSS host" - echo_error "build_epc -d -S -t -T" - echo_error " " - echo_error "Case 2 - EPC and HSS do not run on same host" - echo_error "build_epc -d -s -H my_hss_fqdn" -} - - - -function main() -{ - local -i clean=0 - local -i conf_files_only=0 - local -i verbose=0 - local -i s6a_server=0 - local cmake_args=" " - local make_args="-j $NUM_CPU" - local realm="" - local gtpu_cmake_arg="-DFLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT=False" - local hss_fqdn="" - local hss_hostname="" - local hss_ip="" - local REL="Rel10" - - - until [ -z "$1" ] - do - case "$1" in - -c | --clean) - clean=1 - echo "Clean the build generated files (build from scratch)" - shift; - ;; - -C | --conf-files-only) - conf_files_only=1 - echo "Generate only conf files (no build)" - shift; - ;; - -d | --debug) - cmake_args="$cmake_args -DDEBUG=1" - echo "Compile with debug informations" - shift; - ;; - -g | --gtpu-easy-module) - gtpu_cmake_arg="-DFLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT=True" - echo "Compile with not optimized GTPU kernel module option (but kernel module easy to remove)" - shift; - ;; - -G | --gtpu-full-speed) - echo "Compile with best performance GTPU kernel module option" - shift; - ;; - -h | --help) - help - shift; - exit 0 - ;; - -H | --hss) - hss_fqdn=$2 - cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn" - shift 2; - ;; - -i | --check-installed-software) - echo "Check installed software packages necessary to build and run EPC (support Ubuntu 14.04):" - set_openair_env - check_install_oai_software - check_install_additional_tools - exit 0 - ;; - -r | --realm) - echo "Realm: $2" - realm=$2 - cmake_args="$cmake_args -DREALM=$realm" - shift 2; - ;; - -s | --transport-sctp-only) - echo "Diameter use SCTP (TCP disabled), this is the default option." - cmake_args="$cmake_args -DTRANSPORT_option=No_TCP" - shift; - ;; - -S | --s6a-server) - echo "MME act as a server on s6a" - s6a_server=1 - cmake_args="$cmake_args -DMME_S6A_IS_SERVER=1" - shift 1; - ;; - -t | --transport-tcp-only) - echo "Diameter use TCP (SCTP disabled)." - cmake_args="$cmake_args -DTRANSPORT_option=No_SCTP" - shift; - ;; - -T | --transport-prefer-tcp) - echo "Diameter prefer TCP (TCP, SCTP enabled)." - cmake_args="$cmake_args -DTRANSPORT_PREFER_TCP_option=Prefer_TCP" - shift; - ;; - -v | --verbose) - echo "Make build process verbose" - cmake_args="$cmake_args -DCMAKE_VERBOSE_MAKEFILE=ON" - make_args="VERBOSE=1 $make_args" - verbose=1 - shift; - ;; - *) - echo "Unknown option $1" - help - exit 1 - ;; - esac - done - - cmake_args="$cmake_args $gtpu_cmake_arg" - - # extra arguments processing - if [[ z$hss_fqdn = z ]]; then - hss_fqdn=`hostname --fqdn` - cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn" - if [[ z$realm = z ]]; then - realm=$hss_fqdn - realm=${realm#*.} - cmake_args="$cmake_args -DREALM=$realm" - fi - else - if [[ z$realm = z ]]; then - realm=${hss_fqdn#*.} - cmake_args="$cmake_args -DREALM=$realm" - fi - fi - hss_hostname=${hss_fqdn%%.*} - cmake_args="$cmake_args -DHSS_HOSTNAME=$hss_hostname" - - hss_ip=`resolveip --silent $hss_hostname` - if [[ z$hss_ip = z ]]; then - hss_ip=`resolveip --silent $hss_fqdn` - fi - if [[ z$hss_ip = z ]]; then - echo_abort "Unable to get HSS IP addr of $hss_fqdn" - fi - cmake_args="$cmake_args -DHSS_IP=$hss_ip" - - set_openair_env - if [[ $verbose -eq 1 ]]; then - cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - fi - - # for conf files copy in this bash script - if [ -d /usr/lib/freeDiameter ]; then - export FREEDIAMETER_PREFIX=/usr - else - if [ -d /usr/local/lib/freeDiameter ]; then - export FREEDIAMETER_PREFIX=/usr/local - else - echo_fatal "FreeDiameter prefix not found, install freeDiameter if EPC, HSS" - fi - fi - - - - local dbin=$OPENAIR_DIR/targets/bin - local dlog=$OPENAIR_DIR/cmake_targets/log - local dconf=$OPENAIR_DIR/targets/bin - - mkdir -m 777 -p $dbin $dlog - - ############################################################################## - # Compile userspace executable - ############################################################################## - cd $OPENAIR_DIR/cmake_targets/epc_build_oai - if [ $clean -ne 0 ]; then - if [[ $verbose -eq 1 ]]; then - echo "Cleaning EPC: certificates, generated configuration files, obj files, mme_gw executable, GTP kernel module" - fi - rm -f $OPENAIR_DIR/targets/bin/mme_gw - rm -Rf build 2>&1 - $SUDO rm -Rf $OPENAIR_TARGETS/CMAKE/EPC/MME_GW/build 2>&1 - $SUDO rm -f /usr/local/etc/freeDiameter/mme* 2>&1 - $SUDO rm -f /usr/local/etc/freeDiameter/epc* 2>&1 - $SUDO rm -f /usr/etc/freeDiameter/mme* 2>&1 - $SUDO rm -f /usr/etc/freeDiameter/epc* 2>&1 - $SUDO rm -f $OPENAIR_DIR/targets/bin/xt_GTPU*.ko 2>&1 - (cd $OPENAIRCN_DIR/GTPV1-U/GTPU_SP && $SUDO make clean) - $SUDO rm -f $OPENAIRCN_DIR/GTPV1-U/GTPU_SP/Bin/* 2>&1 - $SUDO rm -f /lib/xtables/libxt_GTPU*.so 2>&1 - mkdir -m 777 -p -v build - fi - - - - ############################################################################## - # Compile EPC - ############################################################################## - cd $OPENAIR_DIR/cmake_targets/epc_build_oai - #cd $OPENAIR_TARGETS/CMAKE/EPC/MME_GW - if [ ! -d ./build ]; then - mkdir -m 777 -p -v build - fi - cmake_file=./CMakeLists.txt - cp $OPENAIR_DIR/cmake_targets/epc_build_oai/CMakeLists.template $cmake_file - echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - cd ./build - cmake $cmake_args .. - #make $make_args -j $NUM_CPU - if [ $conf_files_only -eq 0 ]; then - compilations \ - epc_build_oai mme_gw \ - mme_gw $dbin/mme_gw.$REL - # Only integrated mme+sgw+pgw is operational today - compilations \ - epc_build_oai xt_GTPUSP_lib \ - libxt_GTPUSP_lib.so $dbin - compilations \ - epc_build_oai xt_GTPUSP \ - CMakeFiles/xt_GTPUSP/xt_GTPUSP.ko $dbin - - echo_info "Copying iptables libraries into system directory: /lib/xtables" - if [ -f $dbin/libxt_GTPUSP_lib.so ] ; then - $SUDO rm -f /lib/xtables/libxt_GTPUSP.so - $SUDO ln -s $dbin/libxt_GTPUSP_lib.so /lib/xtables/libxt_GTPUSP.so - else - echo_fatal "not installed GTP-U iptables: binaries not found" - fi - fi - # Do EPC - if [ -f $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf ] ; then - cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/epc*.conf $dconf - $SUDO cp -uv $OPENAIR_DIR/cmake_targets/epc_build_oai/build/mme_fd.conf $FREEDIAMETER_PREFIX/etc/freeDiameter - else - echo_fatal "not installed EPC config files: not found" - fi -} - - -main "$@" - diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 100effd872..953c21d929 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -1,29 +1,31 @@ ################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom # -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (c) 2015, EURECOM (www.eurecom.fr) +# All rights reserved. # +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: # -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. 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. # -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. # -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# The views and conclusions contained in the software and documentation are those +# of the authors and should not be interpreted as representing official policies, +# either expressed or implied, of the FreeBSD Project. # ################################################################################ # file build_helper @@ -95,12 +97,9 @@ clean_kernel() { clean_all_files() { set_openair_env dir=$OPENAIR_DIR/cmake_targets - rm -rf $dir/log $OPENAIR_DIR/targets/bin/* + rm -rf $dir/log $OPENAIR_DIR/targets/bin/* rm -rf $dir/lte_build_oai $dir/lte-simulators/build - rm -rf $dir/epc_build_oai/build $dir/epc_build_oai/CMakeLists.txt rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt - rm -rf $dir/oaisim_mme_build_oai/build $dir/oaisim_mme_build_oai/CMakeLists.txt - rm -rf $dir/hss_build/build rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build } @@ -123,50 +122,6 @@ compilations() { fi } - -########################################## -# X.509 certificates -########################################## - -make_one_cert() { - fqdn=$1 - name=$2 - $SUDO openssl genrsa -out $name.key.pem 1024 - $SUDO openssl req -new -batch -out $name.csr.pem -key $name.key.pem -subj /CN=$name.$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - $SUDO openssl ca -cert cacert.pem -keyfile cakey.pem -in $name.csr.pem -out $name.cert.pem -outdir . -batch -} - -make_certs(){ - - fqdn=$1 - certs_dir=$FREEDIAMETER_PREFIX/freeDiameter - # certificates are stored in diameter config directory - if [ ! -d $certs_dir ]; then - echo "Creating non existing directory: $certs_dir" - $SUDO mkdir -p $certs_dir || echo_error "can't create: $certs_dir" - fi - - cd $certs_dir - echo "creating the CA certificate" - echo_warning "erase all existing certificates as long as the CA is regenerated" - $SUDO rm -f $certs_dir/*.pem - $SUDO mkdir -p $certs_dir/demoCA/ - $SUDO touch $certs_dir/demoCA/index.txt - $SUDO sh -c "echo 01 > $certs_dir/demoCA/serial" - - # CA self certificate - $SUDO openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - - # generate hss certificate and sign it - make_one_cert eur hss - make_one_cert eur mme - - # legacy config is using a certificate named 'user' - make_one_cert eur user - -} - - ############################################ # External packages installers ############################################ @@ -200,58 +155,6 @@ install_gnutls_from_source(){ rm -rf /tmp/gnutls-3.1.23.tar.xz /tmp/gnutls-3.1.23 } -install_1.1.5_freediameter_from_source() { - cd /tmp - echo "Downloading 1.1.5 freeDiameter archive" - rm -rf /tmp/1.1.5.tar.gz* /tmp/freeDiameter-1.1.5 - wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz - tar xzf 1.1.5.tar.gz - cd freeDiameter-1.1.5 - patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.1.5.patch - mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ - echo "Compiling freeDiameter" - make -j`nproc` - #make test - $SUDO make install - rm -rf /tmp/1.1.5.tar.gz /tmp/freeDiameter-1.1.5 -} - -install_freediameter_from_source() { - cd /tmp - echo "Downloading 1.2.0 freeDiameter archive" - rm -rf /tmp/1.2.0.tar.gz* /tmp/freeDiameter-1.2.0 - wget http://www.freediameter.net/hg/freeDiameter/archive/1.2.0.tar.gz - tar xzf 1.2.0.tar.gz - cd freeDiameter-1.2.0 - patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.2.0.patch - mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ - echo "Compiling freeDiameter" - make -j`nproc` - #make test - $SUDO make install - rm -rf /tmp/1.2.0.tar.gz /tmp/freeDiameter-1.2.0 -} - -install_latest_freediameter_from_source() { - cd /tmp - rm -rf /tmp/freeDiameter - echo "Downloading latest freeDiameter trunk (may be unstable)" - git clone https://github.com/Metaswitch/freeDiameter.git - cd freeDiameter - patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.2.0.patch - mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ - echo "Compiling freeDiameter" - make -j`nproc` - #make test - $SUDO make install - rm -rf /tmp/freeDiameter -} check_install_usrp_uhd_driver(){ @@ -345,8 +248,6 @@ check_install_oai_software() { libxml2-dev \ linux-headers-`uname -r` \ mscgen \ - mysql-client \ - mysql-server \ octave \ octave-signal \ openssh-client \ @@ -400,65 +301,7 @@ install_nas_tools() { } -################################## -# create HSS DB -################################ -# arg 1 is mysql admin (ex: root) -# arg 2 is mysql password (ex: linux) -# arg 3 is hss username (ex: hssadmin) -# arg 4 is hss password (ex: admin) -# arg 5 is database name (ex: oai_db) -create_hss_database(){ - EXPECTED_ARGS=5 - if [ $# -ne $EXPECTED_ARGS ] - then - echo_error "Usage: $0 dbadmin dbpass hssuser hsspass databasename" - return 1 - fi - local mysql_admin=$1 - local mysql_password=$2 - local hss_username=$3 - local hss_password=$4 - local database_name=$5 - - Q1="GRANT ALL PRIVILEGES ON *.* TO '$hss_username'@'localhost' IDENTIFIED BY '$hss_password' WITH GRANT OPTION;" - Q2="FLUSH PRIVILEGES;" - mysql -u $mysql_admin --password=$mysql_password -e "${Q1}${Q2}" - if [ $? -ne 0 ]; then - echo_error "HSS: $hss_username permissions creation failed" - echo_error "verify root password for mysql is linux: mysql -u root --password=linux" - echo_error "if not, reset it to "linux" with sudo dpkg-reconfigure mysql-server-5.5" - return 1 - else - echo_success "HSS: $hss_username permissions creation succeeded" - fi - - Q3="CREATE DATABASE IF NOT EXISTS $database_name;" - mysql -u $hss_username --password=$hss_password -e "${Q3}" - if [ $? -ne 0 ]; then - echo_error "HSS: $database_name creation failed" - return 1 - else - echo_success "HSS: $database_name creation succeeded" - fi - - - # test if tables have been created - mysql -u $hss_username --password=$hss_password -e "desc $database_name.users" > /dev/null 2>&1 - if [ $? -eq 1 ]; then - mysql -u $hss_username --password=$hss_password $database_name < $OPENAIR_DIR/openair-cn/OPENAIRHSS/db/$database_name.sql - if [ $? -ne 0 ]; then - echo_error "HSS: $database_name tables creation failed" - return 1 - else - echo_success "HSS: $database_name tables creation succeeded" - fi - else - echo_success "HSS: $database_name tables already created, nothing done" - fi - return 0 -} ################################ # set_openair_env diff --git a/cmake_targets/tools/build_hss b/cmake_targets/tools/build_hss deleted file mode 100755 index 6e0b1e927a..0000000000 --- a/cmake_targets/tools/build_hss +++ /dev/null @@ -1,271 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file build_hss -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -# -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -source $THIS_SCRIPT_PATH/build_helper - - - -function help() -{ - echo_error " " - echo_error "Usage: build_hss [OPTION]..." - echo_error "Build the experimental HSS executable." - echo_error " " - echo_error "Options:" - echo_error "Mandatory arguments to long options are mandatory for short options too." - echo_error " -b, --s6a-bind-addr-list addr_list Optionaly, s6a server bind addresses can be specified here" - echo_error " -c, --clean Clean the build generated files (build from scratch)" - echo_error " -d, --debug Compile with debug informations." - echo_error " -f, --fqdn fqdn HSS Fully Qualified Domain Name (if not specified default is `hostname --fqdn`)." - echo_error " -h, --help Print this help." - echo_error " -i, --check-installed-software Check installed software packages necessary to build and run HSS (support Ubuntu 14.04)." - echo_error " -I, --install-hss-files Install HSS database if necessary." - echo_error " -k, --operator-key key Operator key of the HSS." - echo_error " If filled, then OPc key in table users for all subscribers (IMSI) will be computed." - echo_error " -m, --connect-to-mme fqdn MME act as a S6A server, HSS as a client (reversed situation but allows MME and HSS be on the same host) ." - echo_error " -r, --realm realm Realm of the HSS (optional parameter)." - echo_error " -R, --random boolean If false HSS random function returns always 0 (allowed values: {true, false})." - echo_error " -s, --transport-sctp-only Diameter use SCTP (TCP disabled)." - echo_error " -t, --transport-tcp-only Diameter use TCP (SCTP disabled)." - echo_error " -T, --transport-prefer-tcp Diameter prefer TCP." - echo_error " -v, --verbose Build process verbose." - echo_error " " - echo_error "Examples:" - echo_error " " - echo_error "Case 1 - HSS run on same EPC host" - echo_error "build_hss -d -m my_epc_fqdn -d -t -T" - echo_error "or build_hss -d -m my_epc_fqdn -d -t -T -k 11111111111111111111111111111111" - echo_error " " - echo_error "Case 2 - HSS and EPC do not run on same host" - echo_error "build_hss -d -s" - echo_error "build_hss -d -s -k 11111111111111111111111111111111" -} - - - -function main() -{ - local -i clean=0 - local -i verbose=0 - local cmake_args=" " - local make_args="-j $NUM_CPU" - local realm="" - local hss_hostname="" - local mme_hostname="" - local mme_ip="" - local mme_fqdn="" - - - until [ -z "$1" ]; do - case "$1" in - -b | --s6a-bind-addr-list) - echo "S6A server bind addresses: $2" - cmake_args="$cmake_args -DFD_SERVER_IP_BIND_LIST=$2" - shift 2; - ;; - -c | --clean) - clean=1 - echo "Clean the build generated files (build from scratch)" - shift; - ;; - -d | --debug) - cmake_args="$cmake_args -DDEBUG=1" - echo "Compile with debug informations" - shift; - ;; - -f | --fqdn) - echo "FQDN of the HSS: $2" - cmake_args="$cmake_args -DHSS_FQDN=$2" - shift 2; - ;; - -h | --help) - help - exit 0 - ;; - -i | --check-installed-software) - echo "Check installed software packages necessary to build and run HSS (support Ubuntu 14.04):" - set_openair_env - check_install_oai_software - exit 0 - ;; - -I | --install-hss-files) - echo "Install HSS files: .conf files, database (if you want to reinstall database, drop it by hand before)." - cmake_args="$cmake_args -DINSTALL_HSS_FILES=1" - shift; - ;; - -k | --operator-key) - echo "Operator key of the HSS: $2" - cmake_args="$cmake_args -DOPERATOR_key=$2" - shift 2; - ;; - -m | --connect-to-mme) - mme_fqdn=$2 - shift 2; - ;; - -r | --realm) - echo "Realm of the HSS: $2" - cmake_args="$cmake_args -DREALM=$2" - shift 2; - ;; - -R | --random) - echo "Random function: $2" - cmake_args="$cmake_args -DRANDOM_boolean=$2" - shift 2; - ;; - -s | --transport-sctp-only) - echo "Diameter use SCTP (TCP disabled), this is the default option." - cmake_args="$cmake_args -DTRANSPORT_option=No_TCP" - shift; - ;; - -t | --transport-tcp-only) - echo "Diameter use TCP (SCTP disabled)." - cmake_args="$cmake_args -DTRANSPORT_option=No_SCTP" - shift; - ;; - -T | --transport-prefer-tcp) - echo "Diameter prefer TCP (TCP, SCTP enabled)." - cmake_args="$cmake_args -DTRANSPORT_PREFER_TCP_option=Prefer_TCP" - shift; - ;; - -v | --verbose) - echo "Make build process verbose" - cmake_args="$cmake_args -DCMAKE_VERBOSE_MAKEFILE=ON" - make_args="VERBOSE=1 $make_args" - verbose=1 - shift; - ;; - *) - echo "Unknown option $1" - help - exit 1 - ;; - esac - done - - # extra arguments processing - if [[ z$hss_fqdn = z ]]; then - hss_fqdn=`hostname --fqdn` - cmake_args="$cmake_args -DHSS_FQDN=$hss_fqdn" - if [[ z$realm = z ]]; then - realm=$hss_fqdn - realm=${realm#*.} - cmake_args="$cmake_args -DREALM=$realm" - fi - fi - - if [[ z$mme_fqdn != z ]]; then - cmake_args="$cmake_args -DMME_FQDN=$mme_fqdn" - mme_hostname=${mme_fqdn%%.*} - cmake_args="$cmake_args -DMME_HOSTNAME=$mme_hostname" - - mme_ip=`resolveip --silent $mme_hostname` - if [[ z$mme_ip = z ]]; then - mme_ip=`resolveip --silent $mme_fqdn` - fi - if [[ z$mme_ip = z ]]; then - echo_fatal "Unable to get MME IP addr of $mme_fqdn" - fi - cmake_args="$cmake_args -DHSS_CONNECT_TO_MME=1 -DMME_IP=$mme_ip" - fi - - set_openair_env - if [[ $verbose -eq 1 ]]; then - cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - fi - - if [[ z$OPENAIR_DIR = z ]]; then - echo_fatal "OPENAIR_DIR env variable not set, exiting" - fi - - - local dbin=$OPENAIR_DIR/targets/bin - local dlog=$OPENAIR_DIR/cmake_targets/log - local dconf=OPENAIR_DIR/targets/bin - - mkdir -m 777 -p $dbin $dlog - - # for conf files copy in this bash script - if [ -d /usr/lib/freeDiameter ]; then - export FREEDIAMETER_PREFIX=/usr - else - if [ -d /usr/local/lib/freeDiameter ]; then - export FREEDIAMETER_PREFIX=/usr/local - else - echo_fatal "FreeDiameter prefix not found, install freeDiameter if EPC, HSS" - fi - fi - - - - cmake_args="$cmake_args -DOPENAIR_DIR=$OPENAIR_DIR" - - rm -f $OPENAIR_DIR/targets/bin/openair-hss - cd $OPENAIR_DIR/cmake_targets/hss_build - if [ $clean -ne 0 ]; then - if [[ $verbose -eq 1 ]]; then - echo "Cleaning HSS" - fi - $SUDO rm -Rf build 2>&1 - if [[ $verbose -eq 1 ]]; then - echo "Cleaning /usr/*/etc/freeDiameter" - fi - $SUDO rm -f /usr/local/etc/freeDiameter/hss* 2>&1 - $SUDO rm -f /usr/local/etc/freeDiameter/acl.conf 2>&1 - $SUDO rm -f /usr/etc/freeDiameter/hss* 2>&1 - $SUDO rm -f /usr/etc/freeDiameter/acl.conf 2>&1 - mkdir -m 777 -p -v build - fi - if [ ! -d ./build ]; then - mkdir -m 777 -p -v build - fi - cd ./build - cmake $cmake_args .. - make $make_args - make install - - - # bash doesn't like space char around = char - cp -uv $OPENAIR_DIR/cmake_targets/hss_build/build/hss.conf $dbin - $SUDO cp -uv $OPENAIR_DIR/cmake_targets/hss_build/build/hss_fd.conf $OPENAIR_DIR/cmake_targets/hss_build/build/acl.conf $FREEDIAMETER_PREFIX/etc/freeDiameter - -} - - -main "$@" - diff --git a/cmake_targets/tools/build_test_epc_tools b/cmake_targets/tools/build_test_epc_tools new file mode 100755 index 0000000000..aff2a26fc0 --- /dev/null +++ b/cmake_targets/tools/build_test_epc_tools @@ -0,0 +1,147 @@ +#!/bin/bash +################################################################################ +# OpenAirInterface +# Copyright(c) 1999 - 2014 Eurecom +# +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) anylater version. +# +# +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see . +# +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# +################################################################################ +# file build_test_epc_tools +# brief +# author Lionel Gauthier +# company Eurecom +# email: lionel.gauthier@eurecom.fr +# +################################ +# include helper functions +################################ +THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) +source $THIS_SCRIPT_PATH/build_helper + +function help() +{ + echo_error " " + echo_error "Usage: build_test_epc_tools [OPTION]..." + echo_error "Build the executables for generating and running a test case for EPC." + echo_error " " + echo_error "Options:" + echo_error "Mandatory arguments to long options are mandatory for short options too." + echo_error " -c, --clean Clean the build generated files (build from scratch)" + echo_error " -d, --debug Compile with debug informations." + echo_error " -h, --help Print this help." + echo_error " -v, --verbose Build process verbose." + echo_error " " +} + + + +function main() +{ + local -i clean=0 + local -i verbose=0 + local cmake_args=" " + local make_args="-j $NUM_CPU" + local realm="" + + + until [ -z "$1" ] + do + case "$1" in + -c | --clean) + clean=1 + echo "Clean the build generated files (build from scratch)" + shift; + ;; + -d | --debug) + cmake_args="$cmake_args -DDEBUG=1" + echo "Compile with debug informations" + shift; + ;; + -h | --help) + help + shift; + exit 0 + ;; + -v | --verbose) + echo "Make build process verbose" + cmake_args="$cmake_args -DCMAKE_VERBOSE_MAKEFILE=ON" + make_args="VERBOSE=1 $make_args" + verbose=1 + shift; + ;; + *) + echo "Unknown option $1" + help + exit 1 + ;; + esac + done + + + + + set_openair_env + if [[ $verbose -eq 1 ]]; then + cecho "OPENAIR_DIR = $OPENAIR_DIR" $green + fi + + local dbin=$OPENAIR_DIR/targets/bin + local dlog=$OPENAIR_DIR/cmake_targets/log + local dconf=$OPENAIR_DIR/targets/bin + + mkdir -m 777 -p $dbin $dlog + + ############################################################################## + # Compile userspace executable + ############################################################################## + cd $OPENAIR_DIR/cmake_targets/epc_test + if [ $clean -ne 0 ]; then + if [[ $verbose -eq 1 ]]; then + echo "Cleaning TEST_EPC" + fi + rm -f $OPENAIR_DIR/targets/bin/test_epc_generate_scenario + rm -Rf build 2>&1 + mkdir -m 777 -p -v build + fi + + ############################################################################## + # Compile EPC + ############################################################################## + cd $OPENAIR_DIR/cmake_targets/epc_test + if [ ! -d ./build ]; then + mkdir -m 777 -p -v build + fi + cmake_file=./CMakeLists.txt + cp $OPENAIR_DIR/cmake_targets/epc_test/CMakeLists.template $cmake_file + echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file + cd ./build + cmake $cmake_args .. + compilations \ + epc_test test_epc_generate_scenario \ + test_epc_generate_scenario $dbin/test_epc_generate_scenario +} + + +main "$@" + diff --git a/cmake_targets/tools/check_hss_s6a_certificate b/cmake_targets/tools/check_hss_s6a_certificate deleted file mode 100755 index e444c7f4c5..0000000000 --- a/cmake_targets/tools/check_hss_s6a_certificate +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file check_hss_s6a_certificate -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -source $THIS_SCRIPT_PATH/build_helper - - -function _create_hss_certs() -{ - local freediameter_path=$1 - local fqdn=$2 - - cd /tmp - rm -rf /tmp/demoCA - mkdir /tmp/demoCA - echo 01 > /tmp/demoCA/serial - touch /tmp/demoCA/index.txt - - echo "Creating HSS certificate for user '$fqdn'" - # Create a Root Certification Authority Certificate - openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out hss.cacert.pem -keyout hss.cakey.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - - # Generate a Private Key - openssl genrsa -out hss.key.pem 1024 - - # Generate a CSR (Certificate Signing Request) that will be self-signed - openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - - # Certification authority - openssl ca -cert hss.cacert.pem -keyfile hss.cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch - - if [ ! -d $freediameter_path/etc/freeDiameter ]; then - echo "Creating non existing directory: $freediameter_path/etc/freeDiameter/" - sudo mkdir -p $freediameter_path/etc/freeDiameter/ - fi - - sudo mv hss.cakey.pem hss.cert.pem hss.cacert.pem hss.key.pem $freediameter_path/etc/freeDiameter/ - cd - -} - - -#$1 if freediameter path -#$2 is fqdn -function main() { - local freediameter_path=$1 - local fqdn=$2 - if [ -d $freediameter_path/etc/freeDiameter ]; then - if [ -f $freediameter_path/etc/freeDiameter/hss.cert.pem ]; then - full_hostname=`cat $freediameter_path/etc/freeDiameter/hss.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6` - if [ a$full_hostname == a$fqdn ]; then - echo_success "HSS S6A: Found valid certificate in $freediameter_path/etc/freeDiameter" - return 0 - else - echo_error "Bad hss fqdn found in cert file: $full_hostname fqdn is $fqdn" - fi - fi - fi - echo_error "HSS S6A: Did not find valid certificate in $freediameter_path/etc/freeDiameter" - echo_warning "HSS S6A: generating new certificate in $freediameter_path/etc/freeDiameter..." - _create_hss_certs $freediameter_path $fqdn - if [ $# -lt 3 ] ; then - main $freediameter_path $fqdn 2 - return $? - else - echo_error "Could not access to freeDiameter path: $freediameter_path/etc/freeDiameter" - exit 1 - fi -} - -main "$@" diff --git a/cmake_targets/tools/check_mme_s6a_certificate b/cmake_targets/tools/check_mme_s6a_certificate deleted file mode 100755 index aac91f3abe..0000000000 --- a/cmake_targets/tools/check_mme_s6a_certificate +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file check_mme_s6a_certificate -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -. $THIS_SCRIPT_PATH/build_helper - - -function _create_mme_certs() -{ - local freediameter_path=$1 - local fqdn=$2 - - cd /tmp - rm -rf /tmp/demoCA - mkdir /tmp/demoCA - echo 01 > /tmp/demoCA/serial - touch /tmp/demoCA/index.txt - - echo "Creating MME certificate for user '$fqdn'" - # Create a Root Certification Authority Certificate - openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out mme.cacert.pem -keyout mme.cakey.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - - # Generate a Private Key - openssl genrsa -out mme.key.pem 1024 - - # Generate a CSR (Certificate Signing Request) that will be self-signed - openssl req -new -batch -out mme.csr.pem -key mme.key.pem -subj /CN=$fqdn/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - - # Certification authority - openssl ca -cert mme.cacert.pem -keyfile mme.cakey.pem -in mme.csr.pem -out mme.cert.pem -outdir . -batch - - if [ ! -d $freediameter_path/etc/freeDiameter ]; then - echo "Creating non existing directory: $freediameter_path/etc/freeDiameter/" - sudo mkdir -p $freediameter_path/etc/freeDiameter/ - fi - - sudo mv mme.cakey.pem mme.cert.pem mme.cacert.pem mme.key.pem $freediameter_path/etc/freeDiameter/ - cd - -} - -#$1 if freediameter path -#$2 is fqdn -function main() { - local freediameter_path=$1 - local fqdn=$2 - if [ -d $freediameter_path/etc/freeDiameter ]; then - if [ -f $freediameter_path/etc/freeDiameter/mme.cert.pem ]; then - full_hostname=`cat $freediameter_path/etc/freeDiameter/mme.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6` - if [ a$full_hostname == a$fqdn ]; then - echo_success "MME S6A: Found valid certificate in $freediameter_path/etc/freeDiameter" - return 0 - else - echo_error "Bad mme fqdn found in cert file: $full_hostname fqdn is $fqdn" - fi - else - echo_error "File $freediameter_path/etc/freeDiameter/mme.cert.pem not found" - fi - else - echo_error "Directory $freediameter_path/etc/freeDiameter not found" - fi - echo_error "MME S6A: Did not find valid certificate in $freediameter_path/etc/freeDiameter" - echo_warning "MME S6A: generating new certificate in $freediameter_path/etc/freeDiameter..." - _create_mme_certs $freediameter_path $fqdn - if [ $# -lt 3 ] ; then - main $freediameter_path $fqdn 2 - return $? - else - echo_error "Could not access to freeDiameter path: $freediameter_path/etc/freeDiameter" - exit 1 - fi -} - -main "$@" diff --git a/cmake_targets/tools/create_hss_database b/cmake_targets/tools/create_hss_database deleted file mode 100755 index 054be034d7..0000000000 --- a/cmake_targets/tools/create_hss_database +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file create_hss_database -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -. $THIS_SCRIPT_PATH/build_helper - - -# arg 1 is mysql user (ex: root) -# arg 2 is mysql password (ex: linux) -# arg 3 is hss username (ex: hssadmin) -# arg 4 is hss password (ex: admin) -# arg 5 is database name (ex: oai_db) -function main() -{ - EXPECTED_ARGS=5 - E_BADARGS=65 - MYSQL=`which mysql` - rv=0 - if [ $# -ne $EXPECTED_ARGS ] - then - echo_fatal "Usage: $0 dbuser dbpass hssuser hsspass databasename" - rv=1 - fi - - set_openair_env - - # removed % - #Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'%' IDENTIFIED BY '$4' WITH GRANT OPTION;" - Q1="GRANT ALL PRIVILEGES ON *.* TO '$3'@'localhost' IDENTIFIED BY '$4' WITH GRANT OPTION;" - Q2="FLUSH PRIVILEGES;" - SQL="${Q1}${Q2}" - $MYSQL -u $1 --password=$2 -e "$SQL" - if [ $? -ne 0 ]; then - echo_error "$3 permissions failed" - return 1 - else - echo_success "$3 permissions succeeded" - fi - - - Q1="CREATE DATABASE IF NOT EXISTS ${BTICK}$5${BTICK};" - SQL="${Q1}" - $MYSQL -u $3 --password=$4 -e "$SQL" - if [ $? -ne 0 ]; then - echo_error "$5 creation failed" - return 1 - else - echo_success "$5 creation succeeded" - fi - - - # test if tables have been created - mysql -u $3 --password=$4 -e "desc $5.users" > /dev/null 2>&1 - - if [ $? -eq 1 ]; then - $MYSQL -u $3 --password=$4 $5 < $OPENAIRCN_DIR/OPENAIRHSS/db/$5.sql - if [ $? -ne 0 ]; then - echo_error "$5 tables creation failed" - return 1 - else - echo_success "$5 tables creation succeeded" - fi - fi - - return 0 -} - -main "$@" - diff --git a/cmake_targets/tools/epc.conf.in b/cmake_targets/tools/epc.conf.in deleted file mode 100755 index 7af3cca4cc..0000000000 --- a/cmake_targets/tools/epc.conf.in +++ /dev/null @@ -1,163 +0,0 @@ -# Internet -# | -# PGW_IPV4_ADDRESS_FOR_SGI | -# +-----------+-------+------------+---------------+--------------------------+ -# |host y | | PGW_INTERFACE_NAME_FOR_SGI | | -# +-----------+ +------------+---------------+ | -# | | | -# | +----+----+ (HSS may run on this host | -# | | mme_gw | or on another one) | -# | +----+----+ | -# | | | -# | +-----------------+--------------------+ | -# | | SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | | -# | | MME_INTERFACE_NAME_FOR_S1_MME | | -# +----------------------------+---+--+---------------------------------------+ -# MME_IPV4_ADDRESS_FOR_S1_MME | (S1-C and S1-U addresses/interfaces may be the same) -# SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP -# | -# | -# a.b.c.d | -# +---------------+------------+---+--+---------------------------------------+ -# |eNBx | | ethx | | -# +---------------+ +---+--+ | -# | | | -# | +------+---------+ | -# | | lte-softmodem | | -# | | or | | -# | | oaisim (1)eNB (x UEs) | -# | +-------+--------+ | -# +---------------------------------+-----------------------------------------+ -# | -# O (RF antenna) - -MME : -{ - - REALM = "@REALM@"; # DO NOT CHANGE - # Define the limits of the system in terms of served eNB and served UE. - # When the limits will be reached, overload procedure will take place. - MAXENB = 10; - MAXUE = 100; - RELATIVE_CAPACITY = 10; - # Display statistics about whole system (expressed in seconds) - MME_STATISTIC_TIMER = 10; - EMERGENCY_ATTACH_SUPPORTED = "no"; - UNAUTHENTICATED_IMSI_SUPPORTED = "no"; - # ASN1 VERBOSITY: none, info, annoying - VERBOSITY = "none"; - - - IP_CAPABILITY = "IPV4V6"; - - - INTERTASK_INTERFACE : - { - # max queue size per task - ITTI_QUEUE_SIZE = 2000000; - }; - - S6A : - { - S6A_CONF = "@FREEDIAMETER_PATH@/../etc/freeDiameter/mme_fd.conf";# DO NOT CHANGE - HSS_HOSTNAME = "@HSS_HOSTNAME@"; # DO NOT CHANGE - }; - - # ------- SCTP definitions - SCTP : - { - # Number of streams to use in input/output - SCTP_INSTREAMS = 8; - SCTP_OUTSTREAMS = 8; - }; - - # ------- S1AP definitions - S1AP : - { - # outcome drop timer value (seconds) - S1AP_OUTCOME_TIMER = 10; - }; - - # ------- MME served GUMMEI - GUMMEI : - { - # MME code DEFAULT = 0 - # size = 8 bits - # maximum of 256 values, comma separated - MME_CODE = [ 1, 30 , 31, 32, 33, 34, 35, 36, 56 , 29 , 8 ]; - - # MME GROUP ID DEFAULT = 0 - # size = 16 bits - # maximum of 65535 values, comma separated - MME_GID = [ 32768 , 4 , 5 , 30 , 8 , 9 , 50021 ]; - - # TA (mcc.mnc:tracking area code) DEFAULT = 208.34:0 - # max values = 999.999:65535 - # maximum of 32 values, comma separated - TAI_LIST = ( - {MCC="208" ; MNC="95"; TAC = "1"; } # YOUR PLMN CONFIG HERE - ); - }; - - NAS : - { - # 3GPP TS 33.401 section 7.2.4.3 Procedures for NAS algorithm selection - # decreasing preference goes from left to right - ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = [ "EIA2" , "EIA1" , "EIA0" ]; - ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = [ "EEA0" , "EEA1" , "EEA2" ]; - }; - - NETWORK_INTERFACES : - { - MME_INTERFACE_NAME_FOR_S1_MME = "eth2"; # YOUR NETWORK CONFIG HERE - MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.27.101//24"; # YOUR NETWORK CONFIG HERE - - MME_INTERFACE_NAME_FOR_S11_MME = "none"; - MME_IPV4_ADDRESS_FOR_S11_MME = "0.0.0.0/24"; - }; -}; - -S-GW : -{ - NETWORK_INTERFACES : - { - SGW_INTERFACE_NAME_FOR_S11 = "none"; - SGW_IPV4_ADDRESS_FOR_S11 = "0.0.0.0/24"; - - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = "eth2"; # YOUR NETWORK CONFIG HERE - SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "192.168.27.101/24"; # YOUR NETWORK CONFIG HERE - SGW_IPV4_PORT_FOR_S1U_S12_S4_UP = 2152; # PREFER NOT CHANGE - - SGW_INTERFACE_NAME_FOR_S5_S8_UP = "none"; # DO NOT CHANGE - SGW_IPV4_ADDRESS_FOR_S5_S8_UP = "0.0.0.0/24"; # DO NOT CHANGE - }; -}; - -P-GW = -{ - NETWORK_INTERFACES : - { - PGW_INTERFACE_NAME_FOR_S5_S8 = "none"; # DO NOT CHANGE - PGW_IPV4_ADDRESS_FOR_S5_S8 = "0.0.0.0/24"; # DO NOT CHANGE - - PGW_INTERFACE_NAME_FOR_SGI = "eth0"; # YOUR NETWORK CONFIG HERE - PGW_IPV4_ADDRESS_FOR_SGI = "192.168.12.213/24"; # YOUR NETWORK CONFIG HERE - PGW_MASQUERADE_SGI = "yes"; # YOUR NETWORK CONFIG HERE - }; - - IP_ADDRESS_POOL : - { - IPV4_LIST = ( - "192.188.0.0/24", # YOUR NETWORK CONFIG HERE - "192.188.1.0/24" # YOUR NETWORK CONFIG HERE - ); - IPV6_LIST = ( - "2014:02:26::0/120" # YOUR NETWORK CONFIG HERE - ); - }; - - DEFAULT_DNS_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE - DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE -}; - - diff --git a/cmake_targets/tools/epc.local.enb.conf.in b/cmake_targets/tools/epc.local.enb.conf.in deleted file mode 100755 index 353a294f64..0000000000 --- a/cmake_targets/tools/epc.local.enb.conf.in +++ /dev/null @@ -1,130 +0,0 @@ -MME : -{ - - REALM = "@REALM@"; # DO NOT CHANGE - # Define the limits of the system in terms of served eNB and served UE. - # When the limits will be reached, overload procedure will take place. - MAXENB = 10; - MAXUE = 100; - RELATIVE_CAPACITY = 10; - # Display statistics about whole system (expressed in seconds) - MME_STATISTIC_TIMER = 10; - EMERGENCY_ATTACH_SUPPORTED = "no"; - UNAUTHENTICATED_IMSI_SUPPORTED = "no"; - # ASN1 VERBOSITY: none, info, annoying - VERBOSITY = "none"; - - - IP_CAPABILITY = "IPV4V6"; - - - INTERTASK_INTERFACE : - { - # max queue size per task - ITTI_QUEUE_SIZE = 2000000; - }; - - S6A : - { - S6A_CONF = "@FREEDIAMETER_PATH@/../etc/freeDiameter/mme_fd.conf";# DO NOT CHANGE - HSS_HOSTNAME = "@HSS_HOSTNAME@"; # DO NOT CHANGE - }; - - # ------- SCTP definitions - SCTP : - { - # Number of streams to use in input/output - SCTP_INSTREAMS = 8; - SCTP_OUTSTREAMS = 8; - }; - - # ------- S1AP definitions - S1AP : - { - # outcome drop timer value (seconds) - S1AP_OUTCOME_TIMER = 10; - }; - - # ------- MME served GUMMEI - GUMMEI : - { - # MME code DEFAULT = 0 - # size = 8 bits - # maximum of 256 values, comma separated - MME_CODE = [ 1, 30 , 31, 32, 33, 34, 35, 36, 56 , 29 , 8 ]; - - # MME GROUP ID DEFAULT = 0 - # size = 16 bits - # maximum of 65535 values, comma separated - MME_GID = [ 32768 , 4 , 5 , 30 , 8 , 9 , 50021 ]; - - # TA (mcc.mnc:tracking area code) DEFAULT = 208.34:0 - # max values = 999.999:65535 - # maximum of 32 values, comma separated - TAI_LIST = ( - {MCC="208" ; MNC="95"; TAC = "1"; } # YOUR PLMN CONFIG HERE - ); - }; - - NAS : - { - # 3GPP TS 33.401 section 7.2.4.3 Procedures for NAS algorithm selection - # decreasing preference goes from left to right - ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = [ "EIA2" , "EIA1" , "EIA0" ]; - ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = [ "EEA0" , "EEA1" , "EEA2" ]; - }; - - NETWORK_INTERFACES : - { - MME_INTERFACE_NAME_FOR_S1_MME = "tun2"; # DO NOT CHANGE - MME_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24"; # DO NOT CHANGE - - MME_INTERFACE_NAME_FOR_S11_MME = "none"; - MME_IPV4_ADDRESS_FOR_S11_MME = "0.0.0.0/24"; - }; -}; - -S-GW : -{ - NETWORK_INTERFACES : - { - SGW_INTERFACE_NAME_FOR_S11 = "none"; - SGW_IPV4_ADDRESS_FOR_S11 = "0.0.0.0/24"; - - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = "lo"; # DO NOT CHANGE - SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP = "127.0.0.1/24"; # DO NOT CHANGE - SGW_IPV4_PORT_FOR_S1U_S12_S4_UP = 2152; # PREFER NOT CHANGE - - SGW_INTERFACE_NAME_FOR_S5_S8_UP = "none"; # DO NOT CHANGE - SGW_IPV4_ADDRESS_FOR_S5_S8_UP = "0.0.0.0/24"; # DO NOT CHANGE - }; -}; - -P-GW = -{ - NETWORK_INTERFACES : - { - PGW_INTERFACE_NAME_FOR_S5_S8 = "none"; # DO NOT CHANGE - PGW_IPV4_ADDRESS_FOR_S5_S8 = "0.0.0.0/24"; # DO NOT CHANGE - - PGW_INTERFACE_NAME_FOR_SGI = "eth0"; # YOUR NETWORK CONFIG HERE - PGW_IPV4_ADDRESS_FOR_SGI = "192.168.12.213/24"; # YOUR NETWORK CONFIG HERE - PGW_MASQUERADE_SGI = "yes"; # YOUR NETWORK CONFIG HERE - }; - - IP_ADDRESS_POOL : - { - IPV4_LIST = ( - "192.187.0.0/24", # YOUR NETWORK CONFIG HERE - "192.187.1.0/24" # YOUR NETWORK CONFIG HERE - ); - IPV6_LIST = ( - "2014:02:26::0/120" # YOUR NETWORK CONFIG HERE - ); - }; - - DEFAULT_DNS_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE - DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE -}; - - diff --git a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt index c8227f176a..2c693a5003 100644 --- a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt +++ b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt index d07d10b9d0..b47c6137c5 100644 --- a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt +++ b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/indent_source_code b/cmake_targets/tools/indent_source_code index f666e65660..5e9f08f067 100755 --- a/cmake_targets/tools/indent_source_code +++ b/cmake_targets/tools/indent_source_code @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/init_exmimo2 b/cmake_targets/tools/init_exmimo2 index 5e4d13bec3..66eedf93dd 100755 --- a/cmake_targets/tools/init_exmimo2 +++ b/cmake_targets/tools/init_exmimo2 @@ -23,7 +23,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/init_nas_nos1 b/cmake_targets/tools/init_nas_nos1 index fed8eacc10..d2b7760867 100644 --- a/cmake_targets/tools/init_nas_nos1 +++ b/cmake_targets/tools/init_nas_nos1 @@ -23,7 +23,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/perf_oai.bash b/cmake_targets/tools/perf_oai.bash index 71519534e3..fe51ef1ee5 100755 --- a/cmake_targets/tools/perf_oai.bash +++ b/cmake_targets/tools/perf_oai.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/run_enb_s1_exmimo b/cmake_targets/tools/run_enb_s1_exmimo index a2a50220a6..e2df8b5049 100755 --- a/cmake_targets/tools/run_enb_s1_exmimo +++ b/cmake_targets/tools/run_enb_s1_exmimo @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/run_enb_s1_usrp b/cmake_targets/tools/run_enb_s1_usrp index a4766ed658..01f4156071 100755 --- a/cmake_targets/tools/run_enb_s1_usrp +++ b/cmake_targets/tools/run_enb_s1_usrp @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/run_enb_ue_virt_noS1 b/cmake_targets/tools/run_enb_ue_virt_noS1 index c1ce434fa5..74abe0de02 100755 --- a/cmake_targets/tools/run_enb_ue_virt_noS1 +++ b/cmake_targets/tools/run_enb_ue_virt_noS1 @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1 index 2ce29429b1..9cc226a698 100755 --- a/cmake_targets/tools/run_enb_ue_virt_s1 +++ b/cmake_targets/tools/run_enb_ue_virt_s1 @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/cmake_targets/tools/run_epc b/cmake_targets/tools/run_epc deleted file mode 100755 index 08a014cde0..0000000000 --- a/cmake_targets/tools/run_epc +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file run_epc -# brief run script for EPC (MME+SGW-LITE). -# author Lionel GAUTHIER -# company Eurecom -# email: lionel.gauthier@eurecom.fr - - -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -source $THIS_SCRIPT_PATH/build_helper -declare -i g_run_msc_gen=0 -declare g_msc_dir="/tmp" - -set_openair_env - - -function help() -{ - echo_error " " - echo_error "Usage: run_epc [OPTION]..." - echo_error "Run the EPC executable (MME+SGW-LITE)." - echo_error " " - echo_error "Options:" - echo_error "Mandatory arguments to long options are mandatory for short options too." - echo_error " -g, --gdb Run with GDB." - echo_error " -h, --help Print this help." - echo_error " -K, --itti-dump-file ITTI dump file containing all ITTI events occuring during EPC runtime." - echo_error " -l, --local-enb EPC run on the same eNB host." - echo_error " -m, --mscgen directory Generate mscgen output files in a directory" - echo_error " -v, --verbosity-level Verbosity level (0,1,2)." - echo_error " 0 -> ASN1 XER printf off" - echo_error " 1 -> ASN1 XER printf on and ASN1 debug off" - echo_error " 2 -> ASN1 XER printf on and ASN1 debug on" -} - -function do_msc_gen() -{ - cd $g_msc_dir - last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` - $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py - sync - last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` - - if [ x"$last_created_file" != x"$last_created_file2" ]; then - if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then - command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png - fi - fi - -} - -function control_c() -# run if user hits control-c -{ - echo_warning "\nExiting by ctrl+c\n" - if [ $g_run_msc_gen -eq 1 ]; then - do_msc_gen - fi - exit $? -} - -function main() -{ - local -i run_gdb=0 - local exe_arguments=" " - local -i epc_local=0 - local -r epc_default_config_file="$OPENAIR_TARGETS/bin/epc.conf" - local epc_config_file=$epc_default_config_file - - until [ -z "$1" ] - do - case "$1" in - -g | --gdb) - run_gdb=1 - echo "setting GDB flag to: $GDB" - shift; - ;; - -h | --help) - help - exit 0 - ;; - -K | --itti-dump-file) - local itti_dump_file=$2 - # can omit file name if last arg on the line - if [ "x$itti_dump_file" = "x" ]; then - itti_dump_file="/tmp/epc_itti.log" - else - shift 1; - fi - echo "setting ITTI dump file to: $itti_dump_file" - exe_arguments="$exe_arguments -K $itti_dump_file" - shift 1; - ;; - -l | --local-enb) - epc_local=1 - shift; - ;; - -m | --mscgen) - g_msc_dir=$2 - if [ -d "$g_msc_dir" ]; then - echo "setting mscgen log files to dir: $g_msc_dir" - g_run_msc_gen=1 - shift 2; - else - echo_error "Mscgen log dir does not exist" - exit -1 - fi - ;; - -v | --verbosity-level) - local verbosity_level=$2 - echo "setting verbosity level to: $verbosity_level" - exe_arguments="-v $verbosity_level $exe_arguments" - shift 2; - ;; - *) - echo "Unknown option $1" - help - exit 0 - ;; - esac - done - - set_openair_env - cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - - - if [ ! -e $OPENAIR_DIR/targets/bin/mme_gw.Rel10 ]; then - echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/mme_gw.Rel10 executable, have a look at the output of build_epc executable" - fi - - if [ $epc_local -eq 1 ]; then - epc_config_file="$OPENAIR_DIR/targets/bin/epc.local.enb.conf" - fi - - if [ $g_run_msc_gen -eq 1 ]; then - rm -f /tmp/openair.msc.* - fi - - exe_arguments="-O $epc_config_file $exe_arguments" - - if [ $run_gdb -eq 0 ]; then - # trap keyboard interrupt (control-c) - trap control_c SIGINT - $OPENAIR_DIR/targets/bin/mme_gw.Rel10 `echo $exe_arguments` 2>&1 - else - # trap keyboard interrupt (control-c) is done by gdb - touch ~/.gdb_mme_gw - chmod 777 ~/.gdb_mme_gw - echo "file $OPENAIR_DIR/targets/bin/mme_gw.Rel10" > ~/.gdb_mme_gw - echo "set args $exe_arguments " >> ~/.gdb_mme_gw - echo "run" >> ~/.gdb_mme_gw - cat ~/.gdb_mme_gw - gdb -n -x ~/.gdb_mme_gw - if [ $g_run_msc_gen -eq 1 ]; then - do_msc_gen - fi - fi -} - -sudo echo -is_sudo=$? -if [[ "$is_sudo" -ne 0 ]]; then - echo_error "This script must be run by root or a sudo'er" - echo - exit 1 -fi - -main "$@" diff --git a/cmake_targets/tools/run_hss b/cmake_targets/tools/run_hss deleted file mode 100755 index 03b2132d96..0000000000 --- a/cmake_targets/tools/run_hss +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) anylater version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE -# -################################################################################ -# file run_hss -# brief run script for HSS (!EXPERIMENTAL!). -# author Lionel GAUTHIER -# company Eurecom -# email: lionel.gauthier@eurecom.fr - - -################################ -# include helper functions -################################ -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -source $THIS_SCRIPT_PATH/build_helper - - -function help() -{ - echo_error " " - echo_error "Usage: run_hss [OPTION]..." - echo_error "Run the HSS executable (experimental)." - echo_error " " - echo_error "Options:" - echo_error "Mandatory arguments to long options are mandatory for short options too." - echo_error " -g, --gdb Run with GDB." - echo_error " -h, --help Print this help." -} - - - -function main() -{ - local -i run_gdb=0 - local exe_arguments=" -c ./hss.conf" - - until [ -z "$1" ] - do - case "$1" in - -g | --gdb) - run_gdb=1 - echo "setting GDB flag to: $GDB" - shift; - ;; - -h | --help) - help - exit 0 - ;; - *) - echo "Unknown option $1" - help - exit 0 - ;; - esac - done - - set_openair_env - cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green - cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green - cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green - cecho "OPENAIRCN_DIR = $OPENAIRCN_DIR" $green - cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - - - if [ ! -e $OPENAIR_TARGETS/bin/openair-hss ]; then - echo_fatal "Cannot find $OPENAIR_TARGETS/bin/openair-hss executable" - fi - - # for file config relative path - cd $OPENAIR_TARGETS/bin - - if [ $run_gdb -eq 0 ]; then - exec $OPENAIR_TARGETS/bin/openair-hss `echo $exe_arguments` 2>&1 - else - touch ~/.gdb_hss - chmod 777 ~/.gdb_hss - echo "file $OPENAIR_TARGETS/bin/openair-hss" > ~/.gdb_hss - echo "set args $exe_arguments " >> ~/.gdb_hss - echo "run" >> ~/.gdb_hss - cat ~/.gdb_hss - gdb -n -x ~/.gdb_hss 2>&1 - fi -} - - -main "$@" diff --git a/cmake_targets/tools/s6a.conf.in b/cmake_targets/tools/s6a.conf.in deleted file mode 100644 index 6b357b71fc..0000000000 --- a/cmake_targets/tools/s6a.conf.in +++ /dev/null @@ -1,97 +0,0 @@ -# -------- Local --------- - -# Uncomment if the framework cannot resolv it. -Identity = "@MME_FQDN@"; -Realm = "@REALM@"; - -# TLS configuration (see previous section) -TLS_Cred = "@FREEDIAMETER_PATH@/../etc/freeDiameter/mme.cert.pem", - "@FREEDIAMETER_PATH@/../etc/freeDiameter/mme.key.pem"; -TLS_CA = "@FREEDIAMETER_PATH@/../etc/freeDiameter/mme.cacert.pem"; - -# Disable use of TCP protocol (only listen and connect in SCTP) -# Default : TCP enabled -@TRANSPORT_option@; - -# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option. -# Prefer TCP instead of SCTP for establishing new connections. -# This setting may be overwritten per peer in peer configuration blocs. -# Default : SCTP is attempted first. -@TRANSPORT_PREFER_TCP_option@; - - -No_IPv6; - -# Overwrite the number of SCTP streams. This value should be kept low, -# especially if you are using TLS over SCTP, because it consumes a lot of -# resources in that case. See tickets 19 and 27 for some additional details on -# this. -# Limit the number of SCTP streams -SCTP_streams = 3; - - -# By default, freeDiameter acts as a Diameter Relay Agent by forwarding all -# messages it cannot handle locally. This parameter disables this behavior. -NoRelay; - - -TLS_old_method; - - -AppServThreads = 1; - -# Specify the addresses on which to bind the listening server. This must be -# specified if the framework is unable to auto-detect these addresses, or if the -# auto-detected values are incorrect. Note that the list of addresses is sent -# in CER or CEA message, so one should pay attention to this parameter if some -# adresses should be kept hidden. -@ListenOn@ - -@DIAMETER_PORT@; -@DIAMETER_SEC_PORT@; - -# -------- Extensions --------- - -# Uncomment (and create rtd.conf) to specify routing table for this peer. -#LoadExtension = "rt_default.fdx" : "rtd.conf"; - -# Uncomment (and create acl.conf) to allow incoming connections from other peers. -#LoadExtension = "acl_wl.fdx" : "acl.conf"; - -# Uncomment to display periodic state information -#LoadExtension = "dbg_monitor.fdx"; - -# Uncomment to enable an interactive Python interpreter session. -# (see doc/dbg_interactive.py.sample for more information) -#LoadExtension = "dbg_interactive.fdx"; - -# Load the RFC4005 dictionary objects -#LoadExtension = "dict_nasreq.fdx"; - -LoadExtension = "dict_nas_mipv6.fdx"; -LoadExtension = "dict_s6a.fdx"; - -# Load RFC4072 dictionary objects -#LoadExtension = "dict_eap.fdx"; - -# Load the Diameter EAP server extension (requires diameap.conf) -#LoadExtension = "app_diameap.fdx" : "diameap.conf"; - -# Load the Accounting Server extension (requires app_acct.conf) -#LoadExtension = "app_acct.fdx" : "app_acct.conf"; - -# -------- Peers --------- - -# The framework will actively attempt to establish and maintain a connection -# with the peers listed here. -# For only accepting incoming connections, see the acl_wl.fx extension. - -# ConnectPeer -# Declare a remote peer to which this peer must maintain a connection. -# In addition, this allows specifying non-default parameters for this peer only -# (for example disable SCTP with this peer, or use RFC3588-flavour TLS). -# Note that by default, if a peer is not listed as a ConnectPeer entry, an -# incoming connection from this peer will be rejected. If you want to accept -# incoming connections from other peers, see the acl_wl.fdx? extension which -# allows exactly this. -@ConnectPeer@ = "@HSS_FQDN@" { ConnectTo = "@HSS_IP@"; No_IPv6; No_TLS ; port = 3868; Realm = "@REALM@"; }; diff --git a/common/utils/COPYING b/common/utils/COPYING index 818433ecc0..c888423064 100644 --- a/common/utils/COPYING +++ b/common/utils/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/common/utils/asn1_conversions.h b/common/utils/asn1_conversions.h index be7748fecf..bb7b244989 100644 --- a/common/utils/asn1_conversions.h +++ b/common/utils/asn1_conversions.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef ASN1_CONVERSIONS_H_ #define ASN1_CONVERSIONS_H_ diff --git a/common/utils/assertions.h b/common/utils/assertions.h index a33c35ead3..8bb74109ed 100644 --- a/common/utils/assertions.h +++ b/common/utils/assertions.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef UTILS_ASSERTIONS_H_ #define UTILS_ASSERTIONS_H_ diff --git a/common/utils/collection/COPYING b/common/utils/collection/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/collection/COPYING +++ b/common/utils/collection/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/collection/hashtable/COPYING b/common/utils/collection/hashtable/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/collection/hashtable/COPYING +++ b/common/utils/collection/hashtable/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/collection/hashtable/hashtable.c b/common/utils/collection/hashtable/hashtable.c index ba2686c718..d424e2a0ad 100755 --- a/common/utils/collection/hashtable/hashtable.c +++ b/common/utils/collection/hashtable/hashtable.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/common/utils/collection/hashtable/hashtable.h b/common/utils/collection/hashtable/hashtable.h index 2082e4f85f..5c06937bed 100755 --- a/common/utils/collection/hashtable/hashtable.h +++ b/common/utils/collection/hashtable/hashtable.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef _UTILS_COLLECTION_HASH_TABLE_H_ diff --git a/common/utils/collection/hashtable/obj_hashtable.c b/common/utils/collection/hashtable/obj_hashtable.c index b1d804335f..63fd8a688b 100755 --- a/common/utils/collection/hashtable/obj_hashtable.c +++ b/common/utils/collection/hashtable/obj_hashtable.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/common/utils/collection/hashtable/obj_hashtable.h b/common/utils/collection/hashtable/obj_hashtable.h index bf7ea89b96..8743a13f08 100755 --- a/common/utils/collection/hashtable/obj_hashtable.h +++ b/common/utils/collection/hashtable/obj_hashtable.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef _UTILS_COLLECTION_OBJ_HASH_TABLE_H_ #define _UTILS_COLLECTION_OBJ_HASH_TABLE_H_ diff --git a/common/utils/itti/COPYING b/common/utils/itti/COPYING index 818433ecc0..c888423064 100644 --- a/common/utils/itti/COPYING +++ b/common/utils/itti/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/common/utils/itti/assertions.h b/common/utils/itti/assertions.h index df14404c79..c047ef6b76 100644 --- a/common/utils/itti/assertions.h +++ b/common/utils/itti/assertions.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/common/utils/itti/backtrace.c b/common/utils/itti/backtrace.c index f83d018d6e..3d984cbf11 100644 --- a/common/utils/itti/backtrace.c +++ b/common/utils/itti/backtrace.c @@ -1,32 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/common/utils/itti/backtrace.h b/common/utils/itti/backtrace.h index c2622a6b07..1ba8143860 100644 --- a/common/utils/itti/backtrace.h +++ b/common/utils/itti/backtrace.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index c61dd07636..572c207b3f 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #define _GNU_SOURCE #include diff --git a/common/utils/itti/intertask_interface.h b/common/utils/itti/intertask_interface.h index 350c88af6a..46fb0c749f 100644 --- a/common/utils/itti/intertask_interface.h +++ b/common/utils/itti/intertask_interface.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @defgroup _intertask_interface_impl_ Intertask Interface Mechanisms * Implementation diff --git a/common/utils/itti/intertask_interface_dump.c b/common/utils/itti/intertask_interface_dump.c index e17cdab85a..491bff59b0 100644 --- a/common/utils/itti/intertask_interface_dump.c +++ b/common/utils/itti/intertask_interface_dump.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @brief Intertask Interface Signal Dumper diff --git a/common/utils/itti/intertask_interface_dump.h b/common/utils/itti/intertask_interface_dump.h index 8d06a8ed1f..acaf450cf4 100644 --- a/common/utils/itti/intertask_interface_dump.h +++ b/common/utils/itti/intertask_interface_dump.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef INTERTASK_INTERFACE_DUMP_H_ #define INTERTASK_INTERFACE_DUMP_H_ diff --git a/common/utils/itti/intertask_interface_init.h b/common/utils/itti/intertask_interface_init.h index 1135f17738..a01f1eea90 100644 --- a/common/utils/itti/intertask_interface_init.h +++ b/common/utils/itti/intertask_interface_init.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @defgroup _intertask_interface_impl_ Intertask Interface Mechanisms * Implementation diff --git a/common/utils/itti/intertask_interface_types.h b/common/utils/itti/intertask_interface_types.h index 3e0203df6d..bf29e12008 100644 --- a/common/utils/itti/intertask_interface_types.h +++ b/common/utils/itti/intertask_interface_types.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @defgroup _intertask_interface_impl_ Intertask Interface Mechanisms * Implementation diff --git a/common/utils/itti/intertask_messages_def.h b/common/utils/itti/intertask_messages_def.h index baac5cd6d0..4f125f4649 100644 --- a/common/utils/itti/intertask_messages_def.h +++ b/common/utils/itti/intertask_messages_def.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /* This message asks for task initialization */ MESSAGE_DEF(INITIALIZE_MESSAGE, MESSAGE_PRIORITY_MED, IttiMsgEmpty, initialize_message) diff --git a/common/utils/itti/intertask_messages_types.h b/common/utils/itti/intertask_messages_types.h index c047d7dae8..e64a709636 100644 --- a/common/utils/itti/intertask_messages_types.h +++ b/common/utils/itti/intertask_messages_types.h @@ -1,32 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /* * intertask_messages_types.h diff --git a/common/utils/itti/itti_types.h b/common/utils/itti/itti_types.h index ec1b290bfd..f1a17d1228 100644 --- a/common/utils/itti/itti_types.h +++ b/common/utils/itti/itti_types.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @brief Intertask Interface common types * Contains type definitions used for generating and parsing ITTI messages. diff --git a/common/utils/itti/memory_pools.c b/common/utils/itti/memory_pools.c index 568c03defe..dadc80ca2a 100644 --- a/common/utils/itti/memory_pools.c +++ b/common/utils/itti/memory_pools.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifdef RTAI # include diff --git a/common/utils/itti/memory_pools.h b/common/utils/itti/memory_pools.h index a84499c2fc..72268f90d7 100644 --- a/common/utils/itti/memory_pools.h +++ b/common/utils/itti/memory_pools.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef MEMORY_POOLS_H_ #define MEMORY_POOLS_H_ diff --git a/common/utils/itti/messages_def.h b/common/utils/itti/messages_def.h index ea2a321ef8..7df3789fd7 100644 --- a/common/utils/itti/messages_def.h +++ b/common/utils/itti/messages_def.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ // These messages files are mandatory and must always be placed in first position #include "intertask_messages_def.h" diff --git a/common/utils/itti/messages_types.h b/common/utils/itti/messages_types.h index 2594d7b534..3426aada3e 100644 --- a/common/utils/itti/messages_types.h +++ b/common/utils/itti/messages_types.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /* * messages_types.h diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c index e1950b4665..b9a3316cec 100644 --- a/common/utils/itti/signals.c +++ b/common/utils/itti/signals.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #if HAVE_CONFIG_H # include "config.h" diff --git a/common/utils/itti/signals.h b/common/utils/itti/signals.h index 65bc59b046..53a73afa6f 100644 --- a/common/utils/itti/signals.h +++ b/common/utils/itti/signals.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef SIGNALS_H_ #define SIGNALS_H_ diff --git a/common/utils/itti/tasks_def.h b/common/utils/itti/tasks_def.h index 6d6ab48332..5f2a413235 100644 --- a/common/utils/itti/tasks_def.h +++ b/common/utils/itti/tasks_def.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ // This task is mandatory and must always be placed in first position TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10) diff --git a/common/utils/itti/timer.c b/common/utils/itti/timer.c index 25f70f04d7..40e8791022 100644 --- a/common/utils/itti/timer.c +++ b/common/utils/itti/timer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/common/utils/itti/timer.h b/common/utils/itti/timer.h index 9f2ec30f7d..825b3ca2eb 100644 --- a/common/utils/itti/timer.h +++ b/common/utils/itti/timer.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef TIMER_H_ #define TIMER_H_ diff --git a/common/utils/itti/timer_messages_def.h b/common/utils/itti/timer_messages_def.h index 077147fe50..56af4e8a8e 100644 --- a/common/utils/itti/timer_messages_def.h +++ b/common/utils/itti/timer_messages_def.h @@ -1,31 +1,30 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ MESSAGE_DEF(TIMER_HAS_EXPIRED, MESSAGE_PRIORITY_MED_PLUS, timer_has_expired_t, timer_has_expired) diff --git a/common/utils/itti/timer_messages_types.h b/common/utils/itti/timer_messages_types.h index c54f4d165e..8126b75aef 100644 --- a/common/utils/itti/timer_messages_types.h +++ b/common/utils/itti/timer_messages_types.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef TIMER_MESSAGES_TYPES_H_ #define TIMER_MESSAGES_TYPES_H_ diff --git a/common/utils/itti_analyzer/COPYING b/common/utils/itti_analyzer/COPYING index 818433ecc0..c888423064 100644 --- a/common/utils/itti_analyzer/COPYING +++ b/common/utils/itti_analyzer/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/common/utils/itti_analyzer/README b/common/utils/itti_analyzer/README index 31dc085b23..8ca077a227 100644 --- a/common/utils/itti_analyzer/README +++ b/common/utils/itti_analyzer/README @@ -11,4 +11,4 @@ To run itti_analyzer, please perform the following actions: 5) make -6) ./itt \ No newline at end of file +6) ./itti_analyzer \ No newline at end of file diff --git a/common/utils/itti_analyzer/common/COPYING b/common/utils/itti_analyzer/common/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/itti_analyzer/common/COPYING +++ b/common/utils/itti_analyzer/common/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/itti_analyzer/common/itti_types.h b/common/utils/itti_analyzer/common/itti_types.h index ddfd8473a6..3671b1d917 100644 --- a/common/utils/itti_analyzer/common/itti_types.h +++ b/common/utils/itti_analyzer/common/itti_types.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @brief Intertask Interface common types * Contains type definitions used for generating and parsing ITTI messages. diff --git a/common/utils/itti_analyzer/common/logs.h b/common/utils/itti_analyzer/common/logs.h index 051e8b16c7..21d2dfad78 100644 --- a/common/utils/itti_analyzer/common/logs.h +++ b/common/utils/itti_analyzer/common/logs.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /* * logs.h diff --git a/common/utils/itti_analyzer/common/rc.h b/common/utils/itti_analyzer/common/rc.h index 7fa6c05589..11eb107632 100644 --- a/common/utils/itti_analyzer/common/rc.h +++ b/common/utils/itti_analyzer/common/rc.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/itti_analyzer.c b/common/utils/itti_analyzer/itti_analyzer.c index 214430b096..78bdb43b39 100644 --- a/common/utils/itti_analyzer/itti_analyzer.c +++ b/common/utils/itti_analyzer/itti_analyzer.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libbuffers/COPYING b/common/utils/itti_analyzer/libbuffers/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/itti_analyzer/libbuffers/COPYING +++ b/common/utils/itti_analyzer/libbuffers/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/itti_analyzer/libbuffers/buffers.c b/common/utils/itti_analyzer/libbuffers/buffers.c index 7927ce646a..e8a1fc0c20 100644 --- a/common/utils/itti_analyzer/libbuffers/buffers.c +++ b/common/utils/itti_analyzer/libbuffers/buffers.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libbuffers/buffers.h b/common/utils/itti_analyzer/libbuffers/buffers.h index 1346c4aaed..fd57e7b021 100644 --- a/common/utils/itti_analyzer/libbuffers/buffers.h +++ b/common/utils/itti_analyzer/libbuffers/buffers.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include diff --git a/common/utils/itti_analyzer/libbuffers/file.c b/common/utils/itti_analyzer/libbuffers/file.c index 0cfe0edd59..b9404c31c0 100644 --- a/common/utils/itti_analyzer/libbuffers/file.c +++ b/common/utils/itti_analyzer/libbuffers/file.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libbuffers/file.h b/common/utils/itti_analyzer/libbuffers/file.h index 0c1ecf7e07..8d2b90a5cf 100644 --- a/common/utils/itti_analyzer/libbuffers/file.h +++ b/common/utils/itti_analyzer/libbuffers/file.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef FILE_H_ #define FILE_H_ diff --git a/common/utils/itti_analyzer/libbuffers/socket.c b/common/utils/itti_analyzer/libbuffers/socket.c index 99cd44bd11..e782ee431b 100644 --- a/common/utils/itti_analyzer/libbuffers/socket.c +++ b/common/utils/itti_analyzer/libbuffers/socket.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libbuffers/socket.h b/common/utils/itti_analyzer/libbuffers/socket.h index 755cf3093c..45881f311b 100644 --- a/common/utils/itti_analyzer/libbuffers/socket.h +++ b/common/utils/itti_analyzer/libbuffers/socket.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/COPYING b/common/utils/itti_analyzer/libparser/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/itti_analyzer/libparser/COPYING +++ b/common/utils/itti_analyzer/libparser/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/itti_analyzer/libparser/array_type.c b/common/utils/itti_analyzer/libparser/array_type.c index c69351d32a..d88c7fa848 100644 --- a/common/utils/itti_analyzer/libparser/array_type.c +++ b/common/utils/itti_analyzer/libparser/array_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/array_type.h b/common/utils/itti_analyzer/libparser/array_type.h index 277a2a7db9..dd3eccf359 100644 --- a/common/utils/itti_analyzer/libparser/array_type.h +++ b/common/utils/itti_analyzer/libparser/array_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/enum_type.c b/common/utils/itti_analyzer/libparser/enum_type.c index 1a2b90f2ca..78328b5492 100644 --- a/common/utils/itti_analyzer/libparser/enum_type.c +++ b/common/utils/itti_analyzer/libparser/enum_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/enum_type.h b/common/utils/itti_analyzer/libparser/enum_type.h index 745140b52d..ae19a5c495 100644 --- a/common/utils/itti_analyzer/libparser/enum_type.h +++ b/common/utils/itti_analyzer/libparser/enum_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/enum_value_type.c b/common/utils/itti_analyzer/libparser/enum_value_type.c index 47d3ba9b37..eae25817b6 100644 --- a/common/utils/itti_analyzer/libparser/enum_value_type.c +++ b/common/utils/itti_analyzer/libparser/enum_value_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/enum_value_type.h b/common/utils/itti_analyzer/libparser/enum_value_type.h index 6be8eda743..71ce4f9849 100644 --- a/common/utils/itti_analyzer/libparser/enum_value_type.h +++ b/common/utils/itti_analyzer/libparser/enum_value_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/field_type.c b/common/utils/itti_analyzer/libparser/field_type.c index 4a9c6df56b..4ebb743150 100644 --- a/common/utils/itti_analyzer/libparser/field_type.c +++ b/common/utils/itti_analyzer/libparser/field_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/field_type.h b/common/utils/itti_analyzer/libparser/field_type.h index abc09c0fe0..0437f9e5ec 100644 --- a/common/utils/itti_analyzer/libparser/field_type.h +++ b/common/utils/itti_analyzer/libparser/field_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/file_type.c b/common/utils/itti_analyzer/libparser/file_type.c index 84552a836a..c032e6eb88 100644 --- a/common/utils/itti_analyzer/libparser/file_type.c +++ b/common/utils/itti_analyzer/libparser/file_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/file_type.h b/common/utils/itti_analyzer/libparser/file_type.h index e6343afad8..d84f5af34f 100644 --- a/common/utils/itti_analyzer/libparser/file_type.h +++ b/common/utils/itti_analyzer/libparser/file_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/fundamental_type.c b/common/utils/itti_analyzer/libparser/fundamental_type.c index 1c9c9a0dc9..8559919730 100644 --- a/common/utils/itti_analyzer/libparser/fundamental_type.c +++ b/common/utils/itti_analyzer/libparser/fundamental_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/fundamental_type.h b/common/utils/itti_analyzer/libparser/fundamental_type.h index b0e169c643..cb13bf2b79 100644 --- a/common/utils/itti_analyzer/libparser/fundamental_type.h +++ b/common/utils/itti_analyzer/libparser/fundamental_type.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/intertask_contexts.h b/common/utils/itti_analyzer/libparser/intertask_contexts.h index 207910ee87..72d3fb2cc6 100644 --- a/common/utils/itti_analyzer/libparser/intertask_contexts.h +++ b/common/utils/itti_analyzer/libparser/intertask_contexts.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "fundamental_type.h" #include "struct_type.h" diff --git a/common/utils/itti_analyzer/libparser/pointer_type.c b/common/utils/itti_analyzer/libparser/pointer_type.c index e888c04b9a..921bafcac8 100644 --- a/common/utils/itti_analyzer/libparser/pointer_type.c +++ b/common/utils/itti_analyzer/libparser/pointer_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/pointer_type.h b/common/utils/itti_analyzer/libparser/pointer_type.h index b6eabff9a2..0c6b901f5b 100644 --- a/common/utils/itti_analyzer/libparser/pointer_type.h +++ b/common/utils/itti_analyzer/libparser/pointer_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/reference_type.c b/common/utils/itti_analyzer/libparser/reference_type.c index 7409747d53..ee49b10cd5 100644 --- a/common/utils/itti_analyzer/libparser/reference_type.c +++ b/common/utils/itti_analyzer/libparser/reference_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/reference_type.h b/common/utils/itti_analyzer/libparser/reference_type.h index bcbfc98941..693bc712d8 100644 --- a/common/utils/itti_analyzer/libparser/reference_type.h +++ b/common/utils/itti_analyzer/libparser/reference_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/struct_type.c b/common/utils/itti_analyzer/libparser/struct_type.c index b37c86fe59..af1201b4d2 100644 --- a/common/utils/itti_analyzer/libparser/struct_type.c +++ b/common/utils/itti_analyzer/libparser/struct_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/struct_type.h b/common/utils/itti_analyzer/libparser/struct_type.h index e132c31690..7bbb9ee100 100644 --- a/common/utils/itti_analyzer/libparser/struct_type.h +++ b/common/utils/itti_analyzer/libparser/struct_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/typedef_type.c b/common/utils/itti_analyzer/libparser/typedef_type.c index 08f9eb5b38..285acfad5c 100644 --- a/common/utils/itti_analyzer/libparser/typedef_type.c +++ b/common/utils/itti_analyzer/libparser/typedef_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/typedef_type.h b/common/utils/itti_analyzer/libparser/typedef_type.h index aac3a680b7..0657f50c98 100644 --- a/common/utils/itti_analyzer/libparser/typedef_type.h +++ b/common/utils/itti_analyzer/libparser/typedef_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/types.c b/common/utils/itti_analyzer/libparser/types.c index dbd87e8eb7..7ae55bb737 100644 --- a/common/utils/itti_analyzer/libparser/types.c +++ b/common/utils/itti_analyzer/libparser/types.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/types.h b/common/utils/itti_analyzer/libparser/types.h index ad502d3a13..339029839d 100644 --- a/common/utils/itti_analyzer/libparser/types.h +++ b/common/utils/itti_analyzer/libparser/types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include diff --git a/common/utils/itti_analyzer/libparser/union_type.c b/common/utils/itti_analyzer/libparser/union_type.c index 08ce06b389..ef8fd393ac 100644 --- a/common/utils/itti_analyzer/libparser/union_type.c +++ b/common/utils/itti_analyzer/libparser/union_type.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/union_type.h b/common/utils/itti_analyzer/libparser/union_type.h index faf0cecfa0..c1817dea6e 100644 --- a/common/utils/itti_analyzer/libparser/union_type.h +++ b/common/utils/itti_analyzer/libparser/union_type.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "types.h" diff --git a/common/utils/itti_analyzer/libparser/xml_parse.c b/common/utils/itti_analyzer/libparser/xml_parse.c index 98b93976eb..cdad8ee3ed 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.c +++ b/common/utils/itti_analyzer/libparser/xml_parse.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libparser/xml_parse.h b/common/utils/itti_analyzer/libparser/xml_parse.h index 7b1f28527f..5d23a6157a 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.h +++ b/common/utils/itti_analyzer/libparser/xml_parse.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include "rc.h" #include "types.h" diff --git a/common/utils/itti_analyzer/libresolver/COPYING b/common/utils/itti_analyzer/libresolver/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/itti_analyzer/libresolver/COPYING +++ b/common/utils/itti_analyzer/libresolver/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/itti_analyzer/libresolver/locate_root.c b/common/utils/itti_analyzer/libresolver/locate_root.c index 18f3a2d188..8d1b101e73 100644 --- a/common/utils/itti_analyzer/libresolver/locate_root.c +++ b/common/utils/itti_analyzer/libresolver/locate_root.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libresolver/locate_root.h b/common/utils/itti_analyzer/libresolver/locate_root.h index 9e9a5f204d..103e7b96ef 100644 --- a/common/utils/itti_analyzer/libresolver/locate_root.h +++ b/common/utils/itti_analyzer/libresolver/locate_root.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef LOCATE_ROOT_H_ #define LOCATE_ROOT_H_ diff --git a/common/utils/itti_analyzer/libresolver/resolvers.c b/common/utils/itti_analyzer/libresolver/resolvers.c index 312effbcaf..685cd84d87 100644 --- a/common/utils/itti_analyzer/libresolver/resolvers.c +++ b/common/utils/itti_analyzer/libresolver/resolvers.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libresolver/resolvers.h b/common/utils/itti_analyzer/libresolver/resolvers.h index 1b24e921e9..84d2e15ecf 100644 --- a/common/utils/itti_analyzer/libresolver/resolvers.h +++ b/common/utils/itti_analyzer/libresolver/resolvers.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef RESOLVERS_H_ #define RESOLVERS_H_ diff --git a/common/utils/itti_analyzer/libui/COPYING b/common/utils/itti_analyzer/libui/COPYING index 818433ecc0..d605b9a3b1 100644 --- a/common/utils/itti_analyzer/libui/COPYING +++ b/common/utils/itti_analyzer/libui/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index bec4dc3024..725a453334 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #if HAVE_CONFIG_H # include "config.h" diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.h b/common/utils/itti_analyzer/libui/ui_callbacks.h index 8ca5665f08..f408441548 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.h +++ b/common/utils/itti_analyzer/libui/ui_callbacks.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_CALLBACKS_H_ #define UI_CALLBACKS_H_ diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c index 8d66904c99..e2fb993933 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.c +++ b/common/utils/itti_analyzer/libui/ui_filters.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libui/ui_filters.h b/common/utils/itti_analyzer/libui/ui_filters.h index 4eb051e918..9e168ad62f 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.h +++ b/common/utils/itti_analyzer/libui/ui_filters.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_FILTERS_H_ #define UI_FILTERS_H_ diff --git a/common/utils/itti_analyzer/libui/ui_interface.c b/common/utils/itti_analyzer/libui/ui_interface.c index cbb3b9fc98..8f0f5a8415 100644 --- a/common/utils/itti_analyzer/libui/ui_interface.c +++ b/common/utils/itti_analyzer/libui/ui_interface.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libui/ui_interface.h b/common/utils/itti_analyzer/libui/ui_interface.h index ef7fe31f6b..de120e6565 100644 --- a/common/utils/itti_analyzer/libui/ui_interface.h +++ b/common/utils/itti_analyzer/libui/ui_interface.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.c b/common/utils/itti_analyzer/libui/ui_main_screen.c index ae3ab125c0..e440bfb50e 100644 --- a/common/utils/itti_analyzer/libui/ui_main_screen.c +++ b/common/utils/itti_analyzer/libui/ui_main_screen.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #if HAVE_CONFIG_H # include "config.h" diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.h b/common/utils/itti_analyzer/libui/ui_main_screen.h index 9d0805f4cd..4455195a1d 100644 --- a/common/utils/itti_analyzer/libui/ui_main_screen.h +++ b/common/utils/itti_analyzer/libui/ui_main_screen.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_MAIN_SCREEN_H_ #define UI_MAIN_SCREEN_H_ diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c index b4ec50141a..a5c7c2810f 100644 --- a/common/utils/itti_analyzer/libui/ui_menu_bar.c +++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #define G_LOG_DOMAIN ("UI") diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.h b/common/utils/itti_analyzer/libui/ui_menu_bar.h index 03e069b96b..7644862c7a 100644 --- a/common/utils/itti_analyzer/libui/ui_menu_bar.h +++ b/common/utils/itti_analyzer/libui/ui_menu_bar.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_MENU_BAR_H_ #define UI_MENU_BAR_H_ diff --git a/common/utils/itti_analyzer/libui/ui_notebook.c b/common/utils/itti_analyzer/libui/ui_notebook.c index d5e81ffa4e..07bf12fe7c 100644 --- a/common/utils/itti_analyzer/libui/ui_notebook.c +++ b/common/utils/itti_analyzer/libui/ui_notebook.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #if HAVE_CONFIG_H # include "config.h" diff --git a/common/utils/itti_analyzer/libui/ui_notebook.h b/common/utils/itti_analyzer/libui/ui_notebook.h index 741eb901e9..cf574608ca 100644 --- a/common/utils/itti_analyzer/libui/ui_notebook.h +++ b/common/utils/itti_analyzer/libui/ui_notebook.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_NOTEBOOK_H_ #define UI_NOTEBOOK_H_ diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.c b/common/utils/itti_analyzer/libui/ui_notif_dlg.c index 0b278e6429..6d442a733c 100644 --- a/common/utils/itti_analyzer/libui/ui_notif_dlg.c +++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #define G_LOG_DOMAIN ("UI") diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.h b/common/utils/itti_analyzer/libui/ui_notif_dlg.h index ea6d2754ce..871b7ddb0c 100644 --- a/common/utils/itti_analyzer/libui/ui_notif_dlg.h +++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c index 50fed85645..5a3b57656b 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.c +++ b/common/utils/itti_analyzer/libui/ui_notifications.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libui/ui_notifications.h b/common/utils/itti_analyzer/libui/ui_notifications.h index 377c093849..9ea36aa1f2 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.h +++ b/common/utils/itti_analyzer/libui/ui_notifications.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_NOTIFICATIONS_H_ #define UI_NOTIFICATIONS_H_ diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c index 41af8410ac..49e8df315d 100644 --- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c +++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h index 1c9688f68d..36d8d55de5 100644 --- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h +++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_SIGNAL_DISSECT_VIEW_H_ #define UI_SIGNAL_DISSECT_VIEW_H_ diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 69b6b6b324..94a612dac6 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #include #include diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.h b/common/utils/itti_analyzer/libui/ui_tree_view.h index 8abdf7f53d..cee24eba38 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.h +++ b/common/utils/itti_analyzer/libui/ui_tree_view.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ #ifndef UI_TREE_VIEW_H_ #define UI_TREE_VIEW_H_ diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c index 9f7ed5ac3c..c05c1bf7ce 100644 --- a/common/utils/msc/msc.c +++ b/common/utils/msc/msc.c @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ /*! \file msc.c * \brief Message chart generator logging utility (generated files to processed by a script to produce a mscgen input file for generating a sequence diagram document) * \author Lionel GAUTHIER diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h index b5c0c83280..e73f826ac3 100644 --- a/common/utils/msc/msc.h +++ b/common/utils/msc/msc.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef MSC_H_ #define MSC_H_ diff --git a/openair-cn/AUTHORS b/openair-cn/AUTHORS deleted file mode 100644 index 8b13789179..0000000000 --- a/openair-cn/AUTHORS +++ /dev/null @@ -1 +0,0 @@ - diff --git a/openair-cn/COMMON/common_types.h b/openair-cn/COMMON/common_types.h index ff9a595ec8..18cba9fb81 100644 --- a/openair-cn/COMMON/common_types.h +++ b/openair-cn/COMMON/common_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #include diff --git a/openair-cn/COMMON/gtpv1_u_messages_def.h b/openair-cn/COMMON/gtpv1_u_messages_def.h index dfaa0429dc..d58b2dfc2e 100644 --- a/openair-cn/COMMON/gtpv1_u_messages_def.h +++ b/openair-cn/COMMON/gtpv1_u_messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ MESSAGE_DEF(GTPV1U_CREATE_TUNNEL_REQ, MESSAGE_PRIORITY_MED, Gtpv1uCreateTunnelReq, gtpv1uCreateTunnelReq) MESSAGE_DEF(GTPV1U_CREATE_TUNNEL_RESP, MESSAGE_PRIORITY_MED, Gtpv1uCreateTunnelResp, gtpv1uCreateTunnelResp) MESSAGE_DEF(GTPV1U_UPDATE_TUNNEL_REQ, MESSAGE_PRIORITY_MED, Gtpv1uUpdateTunnelReq, gtpv1uUpdateTunnelReq) diff --git a/openair-cn/COMMON/gtpv1_u_messages_types.h b/openair-cn/COMMON/gtpv1_u_messages_types.h index 0fe662e9ea..13fd0fd8a0 100644 --- a/openair-cn/COMMON/gtpv1_u_messages_types.h +++ b/openair-cn/COMMON/gtpv1_u_messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #ifndef GTPV1_U_MESSAGES_TYPES_H_ #define GTPV1_U_MESSAGES_TYPES_H_ diff --git a/openair-cn/COMMON/intertask_interface_conf.h b/openair-cn/COMMON/intertask_interface_conf.h index c6e8f02100..9ab7cc3151 100644 --- a/openair-cn/COMMON/intertask_interface_conf.h +++ b/openair-cn/COMMON/intertask_interface_conf.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ /* * intertask_interface_conf.h diff --git a/openair-cn/COMMON/ip_forward_messages_def.h b/openair-cn/COMMON/ip_forward_messages_def.h deleted file mode 100755 index 37ea73781a..0000000000 --- a/openair-cn/COMMON/ip_forward_messages_def.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -MESSAGE_DEF(SGI_CREATE_ENDPOINT_REQUEST, MESSAGE_PRIORITY_MED, SGICreateEndpointReq, sgiCreateEndpointReq) -MESSAGE_DEF(SGI_CREATE_ENDPOINT_RESPONSE, MESSAGE_PRIORITY_MED, SGICreateEndpointResp, sgiCreateEndpointResp) -MESSAGE_DEF(SGI_UPDATE_ENDPOINT_REQUEST, MESSAGE_PRIORITY_MED, SGIUpdateEndpointReq, sgiUpdateEndpointReq) -MESSAGE_DEF(SGI_UPDATE_ENDPOINT_RESPONSE, MESSAGE_PRIORITY_MED, SGIUpdateEndpointResp, sgiUpdateEndpointResp) -MESSAGE_DEF(SGI_DELETE_ENDPOINT_REQUEST, MESSAGE_PRIORITY_MED, SGIDeleteEndpointReq, sgiDeleteEndpointReq) -MESSAGE_DEF(SGI_DELETE_ENDPOINT_RESPONSE, MESSAGE_PRIORITY_MED, SGIDeleteEndpointResp, sgiDeleteEndpointResp) diff --git a/openair-cn/COMMON/ip_forward_messages_types.h b/openair-cn/COMMON/ip_forward_messages_types.h deleted file mode 100755 index 40db8d5c38..0000000000 --- a/openair-cn/COMMON/ip_forward_messages_types.h +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef SGI_FORWARD_MESSAGES_TYPES_H_ -#define SGI_FORWARD_MESSAGES_TYPES_H_ - -typedef enum SGIStatus_e { - SGI_STATUS_OK = 0, - SGI_STATUS_ERROR_CONTEXT_ALREADY_EXIST = 50, - SGI_STATUS_ERROR_CONTEXT_NOT_FOUND = 51, - SGI_STATUS_ERROR_INVALID_MESSAGE_FORMAT = 52, - SGI_STATUS_ERROR_SERVICE_NOT_SUPPORTED = 53, - SGI_STATUS_ERROR_SYSTEM_FAILURE = 54, - SGI_STATUS_ERROR_NO_RESOURCES_AVAILABLE = 55, - SGI_STATUS_ERROR_NO_MEMORY_AVAILABLE = 56, - SGI_STATUS_MAX, -} SGIStatus_t; - - -typedef struct { - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier - pdn_type_t pdn_type; ///< PDN Type - PAA_t paa; ///< PDN Address Allocation -} SGICreateEndpointReq; - -typedef struct { - SGIStatus_t status; ///< Status of endpoint creation (Failed = 0xFF or Success = 0x0) - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier - pdn_type_t pdn_type; ///< PDN Type - PAA_t paa; ///< PDN Address Allocation - pco_flat_t pco; ///< Protocol configuration options -} SGICreateEndpointResp; - -typedef struct { - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - Teid_t enb_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier -} SGIUpdateEndpointReq; - -typedef struct { - SGIStatus_t status; ///< Status of endpoint creation (Failed = 0xFF or Success = 0x0) - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - Teid_t enb_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier -} SGIUpdateEndpointResp; - - -typedef struct { - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier - pdn_type_t pdn_type; ///< PDN Type - PAA_t paa; ///< PDN Address Allocation -} SGIDeleteEndpointReq; - -typedef struct { - SGIStatus_t status; ///< Status of endpoint deletion (Failed = 0xFF or Success = 0x0) - Teid_t context_teid; ///< Tunnel Endpoint Identifier S11 - Teid_t sgw_S1u_teid; ///< Tunnel Endpoint Identifier S1-U - ebi_t eps_bearer_id; ///< EPS bearer identifier - pdn_type_t pdn_type; ///< PDN Type - PAA_t paa; ///< PDN Address Allocation -} SGIDeleteEndpointResp; - -#endif /* SGI_FORWARD_MESSAGES_TYPES_H_ */ diff --git a/openair-cn/COMMON/messages_def.h b/openair-cn/COMMON/messages_def.h index 2e4dac22e8..2b8667507b 100644 --- a/openair-cn/COMMON/messages_def.h +++ b/openair-cn/COMMON/messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ // These messages files are mandatory and must always be placed in first position #include "intertask_messages_def.h" #include "timer_messages_def.h" diff --git a/openair-cn/COMMON/messages_types.h b/openair-cn/COMMON/messages_types.h index fd5da40bb5..46a7261c59 100644 --- a/openair-cn/COMMON/messages_types.h +++ b/openair-cn/COMMON/messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #ifndef MESSAGES_TYPES_H_ #define MESSAGES_TYPES_H_ diff --git a/openair-cn/COMMON/mme_app_messages_def.h b/openair-cn/COMMON/mme_app_messages_def.h deleted file mode 100644 index 68d904d4ae..0000000000 --- a/openair-cn/COMMON/mme_app_messages_def.h +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -//WARNING: Do not include this header directly. Use intertask_interface.h instead. - -MESSAGE_DEF(MME_APP_CONNECTION_ESTABLISHMENT_IND , MESSAGE_PRIORITY_MED, mme_app_connection_establishment_ind_t , mme_app_connection_establishment_ind) -MESSAGE_DEF(MME_APP_CONNECTION_ESTABLISHMENT_CNF , MESSAGE_PRIORITY_MED, mme_app_connection_establishment_cnf_t , mme_app_connection_establishment_cnf) -MESSAGE_DEF(MME_APP_INITIAL_CONTEXT_SETUP_RSP , MESSAGE_PRIORITY_MED, mme_app_initial_context_setup_rsp_t , mme_app_initial_context_setup_rsp) diff --git a/openair-cn/COMMON/mme_app_messages_types.h b/openair-cn/COMMON/mme_app_messages_types.h deleted file mode 100644 index b9caa41547..0000000000 --- a/openair-cn/COMMON/mme_app_messages_types.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef MME_APP_MESSAGES_TYPES_H_ -#define MME_APP_MESSAGES_TYPES_H_ - - -#define MME_APP_CONNECTION_ESTABLISHMENT_IND(mSGpTR) (mSGpTR)->ittiMsg.mme_app_connection_establishment_ind -#define MME_APP_CONNECTION_ESTABLISHMENT_CNF(mSGpTR) (mSGpTR)->ittiMsg.mme_app_connection_establishment_cnf -#define MME_APP_INITIAL_CONTEXT_SETUP_RSP(mSGpTR) (mSGpTR)->ittiMsg.mme_app_initial_context_setup_rsp - -typedef struct mme_app_connection_establishment_ind_s { - uint32_t mme_ue_s1ap_id; - nas_establish_ind_t nas; - - /* Transparent message from s1ap to be forwarded to MME_APP or - * to S1AP if connection establishment is rejected by NAS. - */ - s1ap_initial_ue_message_t transparent; -} mme_app_connection_establishment_ind_t; - -typedef struct mme_app_connection_establishment_cnf_s { - - ebi_t eps_bearer_id; - FTeid_t bearer_s1u_sgw_fteid; - qci_t bearer_qos_qci; - priority_level_t bearer_qos_prio_level; - pre_emp_vulnerability_t bearer_qos_pre_emp_vulnerability; - pre_emp_capability_t bearer_qos_pre_emp_capability; - ambr_t ambr; - - /* Key eNB */ - uint8_t keNB[32]; - uint16_t security_capabilities_encryption_algorithms; - uint16_t security_capabilities_integrity_algorithms; - - nas_conn_est_cnf_t nas_conn_est_cnf; -} mme_app_connection_establishment_cnf_t; - -typedef struct mme_app_initial_context_setup_rsp_s { - uint32_t mme_ue_s1ap_id; - ebi_t eps_bearer_id; - FTeid_t bearer_s1u_enb_fteid; -} mme_app_initial_context_setup_rsp_t; - - -#endif /* MME_APP_MESSAGES_TYPES_H_ */ diff --git a/openair-cn/COMMON/nas_messages_def.h b/openair-cn/COMMON/nas_messages_def.h index ddd7ca392c..7c7e670511 100644 --- a/openair-cn/COMMON/nas_messages_def.h +++ b/openair-cn/COMMON/nas_messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ //WARNING: Do not include this header directly. Use intertask_interface.h instead. // Messages for NAS logging diff --git a/openair-cn/COMMON/nas_messages_types.h b/openair-cn/COMMON/nas_messages_types.h index 6c03d25252..4cbdad2c99 100644 --- a/openair-cn/COMMON/nas_messages_types.h +++ b/openair-cn/COMMON/nas_messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #include "as_message.h" #include "nas_message.h" diff --git a/openair-cn/COMMON/s11_messages_def.h b/openair-cn/COMMON/s11_messages_def.h deleted file mode 100644 index 3859ce7d62..0000000000 --- a/openair-cn/COMMON/s11_messages_def.h +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -//WARNING: Do not include this header directly. Use intertask_interface.h instead. diff --git a/openair-cn/COMMON/s11_messages_types.h b/openair-cn/COMMON/s11_messages_types.h deleted file mode 100644 index 62882569a0..0000000000 --- a/openair-cn/COMMON/s11_messages_types.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_MESSAGES_TYPES_H_ -#define S11_MESSAGES_TYPES_H_ - -#endif /* S11_MESSAGES_TYPES_H_ */ diff --git a/openair-cn/COMMON/s1ap_messages_def.h b/openair-cn/COMMON/s1ap_messages_def.h index 2e39e264b2..eeb48a64b0 100644 --- a/openair-cn/COMMON/s1ap_messages_def.h +++ b/openair-cn/COMMON/s1ap_messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ //WARNING: Do not include this header directly. Use intertask_interface.h instead. /* Messages for S1AP logging */ diff --git a/openair-cn/COMMON/s1ap_messages_types.h b/openair-cn/COMMON/s1ap_messages_types.h index 23ff59a858..af45f57029 100644 --- a/openair-cn/COMMON/s1ap_messages_types.h +++ b/openair-cn/COMMON/s1ap_messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #ifndef S1AP_MESSAGES_TYPES_H_ #define S1AP_MESSAGES_TYPES_H_ diff --git a/openair-cn/COMMON/s6a_messages_def.h b/openair-cn/COMMON/s6a_messages_def.h deleted file mode 100644 index db8284aed5..0000000000 --- a/openair-cn/COMMON/s6a_messages_def.h +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -//WARNING: Do not include this header directly. Use intertask_interface.h instead. -MESSAGE_DEF(S6A_UPDATE_LOCATION_REQ, MESSAGE_PRIORITY_MED, s6a_update_location_req_t, s6a_update_location_req) -MESSAGE_DEF(S6A_UPDATE_LOCATION_ANS, MESSAGE_PRIORITY_MED, s6a_update_location_ans_t, s6a_update_location_ans) -MESSAGE_DEF(S6A_AUTH_INFO_REQ, MESSAGE_PRIORITY_MED, s6a_auth_info_req_t, s6a_auth_info_req) -MESSAGE_DEF(S6A_AUTH_INFO_ANS, MESSAGE_PRIORITY_MED, s6a_auth_info_ans_t, s6a_auth_info_ans) diff --git a/openair-cn/COMMON/s6a_messages_types.h b/openair-cn/COMMON/s6a_messages_types.h deleted file mode 100644 index 0999afabbd..0000000000 --- a/openair-cn/COMMON/s6a_messages_types.h +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S6A_MESSAGES_TYPES_H_ -#define S6A_MESSAGES_TYPES_H_ - -#define AUTS_LENGTH 14 - -typedef struct s6a_update_location_req_s { -#define SKIP_SUBSCRIBER_DATA (0x1) - unsigned skip_subscriber_data:1; -#define INITIAL_ATTACH (0x1) - unsigned initial_attach:1; - - char imsi[IMSI_DIGITS_MAX + 1]; // username - uint8_t imsi_length; // username - - plmn_t visited_plmn; // visited plmn id - rat_type_t rat_type; // rat type - - // missing // origin host - // missing // origin realm - - // missing // destination host - // missing // destination realm -} s6a_update_location_req_t; - -typedef struct s6a_update_location_ans_s { - s6a_result_t result; // Result of the update location request procedure - subscription_data_t subscription_data; // subscriber status, - // Maximum Requested Bandwidth Uplink, downlink - // access restriction data - // msisdn - apn_config_profile_t apn_config_profile;// APN configuration profile - - network_access_mode_t access_mode; - rau_tau_timer_t rau_tau_timer; - char imsi[IMSI_DIGITS_MAX + 1]; - uint8_t imsi_length; - - -} s6a_update_location_ans_t; - -typedef struct s6a_auth_info_req_s { - char imsi[IMSI_DIGITS_MAX + 1]; - uint8_t imsi_length; - plmn_t visited_plmn; - /* Number of vectors to retrieve from HSS, should be equal to one */ - uint8_t nb_of_vectors; - - /* Bit to indicate that USIM has requested a re-synchronization of SQN */ - unsigned re_synchronization:1; - /* AUTS to provide to AUC. - * Only present and interpreted if re_synchronization == 1. - */ - uint8_t auts[AUTS_LENGTH]; -} s6a_auth_info_req_t; - -typedef struct s6a_auth_info_ans_s { - char imsi[IMSI_DIGITS_MAX + 1]; - uint8_t imsi_length; - - /* Result of the authentication information procedure */ - s6a_result_t result; - /* Authentication info containing the vector(s) */ - authentication_info_t auth_info; -} s6a_auth_info_ans_t; - -#endif /* S6A_MESSAGES_TYPES_H_ */ diff --git a/openair-cn/COMMON/sctp_messages_def.h b/openair-cn/COMMON/sctp_messages_def.h index 3b840f1bf6..e56598bc44 100644 --- a/openair-cn/COMMON/sctp_messages_def.h +++ b/openair-cn/COMMON/sctp_messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ //WARNING: Do not include this header directly. Use intertask_interface.h instead. MESSAGE_DEF(SCTP_INIT_MSG, MESSAGE_PRIORITY_MED, SctpInit, sctpInit) diff --git a/openair-cn/COMMON/sctp_messages_types.h b/openair-cn/COMMON/sctp_messages_types.h index ac991e2f07..5d1aef92ed 100644 --- a/openair-cn/COMMON/sctp_messages_types.h +++ b/openair-cn/COMMON/sctp_messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #ifndef SCTP_MESSAGES_TYPES_H_ #define SCTP_MESSAGES_TYPES_H_ diff --git a/openair-cn/COMMON/security_types.h b/openair-cn/COMMON/security_types.h index debe695c90..3428b23e7a 100644 --- a/openair-cn/COMMON/security_types.h +++ b/openair-cn/COMMON/security_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif diff --git a/openair-cn/COMMON/sgw_lite_def.h b/openair-cn/COMMON/sgw_lite_def.h deleted file mode 100644 index 3f1814b028..0000000000 --- a/openair-cn/COMMON/sgw_lite_def.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -MESSAGE_DEF(SGW_CREATE_SESSION_REQUEST, MESSAGE_PRIORITY_MED, SgwCreateSessionRequest, sgwCreateSessionRequest) -MESSAGE_DEF(SGW_CREATE_SESSION_RESPONSE, MESSAGE_PRIORITY_MED, SgwCreateSessionResponse, sgwCreateSessionResponse) -MESSAGE_DEF(SGW_MODIFY_BEARER_REQUEST, MESSAGE_PRIORITY_MED, SgwModifyBearerRequest, sgwModifyBearerRequest) -MESSAGE_DEF(SGW_MODIFY_BEARER_RESPONSE, MESSAGE_PRIORITY_MED, SgwModifyBearerResponse, sgwModifyBearerResponse) -MESSAGE_DEF(SGW_DELETE_SESSION_REQUEST, MESSAGE_PRIORITY_MED, SgwDeleteSessionRequest, sgwDeleteSessionRequest) -MESSAGE_DEF(SGW_DELETE_SESSION_RESPONSE, MESSAGE_PRIORITY_MED, SgwDeleteSessionResponse, sgwDeleteSessionResponse) -MESSAGE_DEF(SGW_RELEASE_ACCESS_BEARERS_REQUEST, MESSAGE_PRIORITY_MED, SgwReleaseAccessBearersRequest, sgwReleaseAccessBearersRequest) -MESSAGE_DEF(SGW_RELEASE_ACCESS_BEARERS_RESPONSE, MESSAGE_PRIORITY_MED, SgwReleaseAccessBearersResponse, sgwReleaseAccessBearersResponse) diff --git a/openair-cn/COMMON/sgw_lite_messages_types.h b/openair-cn/COMMON/sgw_lite_messages_types.h deleted file mode 100644 index f83015b6bb..0000000000 --- a/openair-cn/COMMON/sgw_lite_messages_types.h +++ /dev/null @@ -1,928 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -/*! \file sgw_lite_messages_types.h - * \brief S11 definitions for interaction between MME and S11 - * 3GPP TS 29.274. - * Messages are the same as for GTPv2-C but here we abstract the UDP layer - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include "../SGW-LITE/sgw_lite_ie_defs.h" - -#ifndef SGW_LITE_MESSAGES_TYPES_H_ -#define SGW_LITE_MESSAGES_TYPES_H_ - -#define SGW_CREATE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionRequest -#define SGW_CREATE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwCreateSessionResponse -#define SGW_MODIFY_BEARER_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerRequest -#define SGW_MODIFY_BEARER_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwModifyBearerResponse -#define SGW_DELETE_SESSION_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionRequest -#define SGW_DELETE_SESSION_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwDeleteSessionResponse -#define SGW_RELEASE_ACCESS_BEARERS_REQUEST(mSGpTR) (mSGpTR)->ittiMsg.sgwReleaseAccessBearersRequest -#define SGW_RELEASE_ACCESS_BEARERS_RESPONSE(mSGpTR) (mSGpTR)->ittiMsg.sgwReleaseAccessBearersResponse - - -/** @struct SgwCreateSessionRequest - * @brief Create Session Request - * - * Spec 3GPP TS 29.274, Universal Mobile Telecommunications System (UMTS); - * LTE; 3GPP Evolved Packet System (EPS); - * Evolved General Packet Radio Service (GPRS); - * Tunnelling Protocol for Control plane (GTPv2-C); Stage 3 - * The Create Session Request will be sent on S11 interface as - * part of these procedures: - * - E-UTRAN Initial Attach - * - UE requested PDN connectivity - * - Tracking Area Update procedure with Serving GW change - * - S1/X2-based handover with SGW change - */ -typedef struct SgwCreateSessionRequest_s { - Teid_t teid; ///< S11- S-GW Tunnel Endpoint Identifier - - Imsi_t imsi; ///< The IMSI shall be included in the message on the S4/S11 - ///< interface, and on S5/S8 interface if provided by the - ///< MME/SGSN, except for the case: - ///< - If the UE is emergency attached and the UE is UICCless. - ///< The IMSI shall be included in the message on the S4/S11 - ///< interface, and on S5/S8 interface if provided by the - ///< MME/SGSN, but not used as an identifier - ///< - if UE is emergency attached but IMSI is not authenticated. - ///< The IMSI shall be included in the message on the S2b interface. - - Msisdn_t msisdn; ///< For an E-UTRAN Initial Attach the IE shall be included - ///< when used on the S11 interface, if provided in the - ///< subscription data from the HSS. - ///< For a PDP Context Activation procedure the IE shall be - ///< included when used on the S4 interface, if provided in the - ///< subscription data from the HSS. - ///< The IE shall be included for the case of a UE Requested - ///< PDN Connectivity, if the MME has it stored for that UE. - ///< It shall be included when used on the S5/S8 interfaces if - ///< provided by the MME/SGSN. - ///< The ePDG shall include this IE on the S2b interface during - ///< an Attach with GTP on S2b and a UE initiated Connectivity - ///< to Additional PDN with GTP on S2b, if provided by the - ///< HSS/AAA. - - Mei_t mei; ///< The MME/SGSN shall include the ME Identity (MEI) IE on - ///< the S11/S4 interface: - ///< - If the UE is emergency attached and the UE is UICCless - ///< - If the UE is emergency attached and the IMSI is not authenticated - ///< For all other cases the MME/SGSN shall include the ME - ///< Identity (MEI) IE on the S11/S4 interface if it is available. - ///< If the SGW receives this IE, it shall forward it to the PGW - ///< on the S5/S8 interface. - - Uli_t uli; ///< This IE shall be included on the S11 interface for E- - ///< UTRAN Initial Attach and UE-requested PDN Connectivity - ///< procedures. It shall include ECGI&TAI. The MME/SGSN - ///< shall also include it on the S11/S4 interface for - ///< TAU/RAU/X2-Handover/Enhanced SRNS Relocation - ///< procedure if the PGW has requested location information - ///< change reporting and MME/SGSN support location - ///< information change reporting. The SGW shall include this - ///< IE on S5/S8 if it receives the ULI from MME/SGSN. - - ServingNetwork_t serving_network; ///< This IE shall be included on the S4/S11, S5/S8 and S2b - ///< interfaces for an E-UTRAN initial attach, a PDP Context - ///< Activation, a UE requested PDN connectivity, an Attach - ///< with GTP on S2b, a UE initiated Connectivity to Additional - ///< PDN with GTP on S2b and a Handover to Untrusted Non- - ///< 3GPP IP Access with GTP on S2b. - - rat_type_t rat_type; ///< This IE shall be set to the 3GPP access type or to the - ///< value matching the characteristics of the non-3GPP access - ///< the UE is using to attach to the EPS. - ///< The ePDG may use the access technology type of the - ///< untrusted non-3GPP access network if it is able to acquire - ///< it; otherwise it shall indicate Virtual as the RAT Type. - ///< See NOTE 3, NOTE 4. - - indication_flags_t indication_flags; ///< This IE shall be included if any one of the applicable flags - ///< is set to 1. - ///< Applicable flags are: - ///< - S5/S8 Protocol Type: This flag shall be used on - ///< the S11/S4 interfaces and set according to the - ///< protocol chosen to be used on the S5/S8 - ///< interfaces. - ///< - ///< - Dual Address Bearer Flag: This flag shall be used - ///< on the S2b, S11/S4 and S5/S8 interfaces and shall - ///< be set to 1 when the PDN Type, determined based - ///< on UE request and subscription record, is set to - ///< IPv4v6 and all SGSNs which the UE may be - ///< handed over to support dual addressing. This shall - ///< be determined based on node pre-configuration by - ///< the operator. - ///< - ///< - Handover Indication: This flag shall be set to 1 on - ///< the S11/S4 and S5/S8 interface during an E- - ///< UTRAN Initial Attach or a UE Requested PDN - ///< Connectivity or aPDP Context Activation procedure - ///< if the PDN connection/PDP Context is handed-over - ///< from non-3GPP access. - ///< This flag shall be set to 1 on the S2b interface - ///< during a Handover to Untrusted Non-3GPP IP - ///< Access with GTP on S2b and IP address - ///< preservation is requested by the UE. - ///< - ///< .... - ///< - Unauthenticated IMSI: This flag shall be set to 1 - ///< on the S4/S11 and S5/S8 interfaces if the IMSI - ///< present in the message is not authenticated and is - ///< for an emergency attached UE. - - FTeid_t sender_fteid_for_cp; ///< Sender F-TEID for control plane (MME) - - FTeid_t pgw_address_for_cp; ///< PGW S5/S8 address for control plane or PMIP - ///< This IE shall be sent on the S11 / S4 interfaces. The TEID - ///< or GRE Key is set to "0" in the E-UTRAN initial attach, the - ///< PDP Context Activation and the UE requested PDN - ///< connectivity procedures. - - char apn[APN_MAX_LENGTH + 1]; ///< Access Point Name - - SelectionMode_t selection_mode; ///< Selection Mode - ///< This IE shall be included on the S4/S11 and S5/S8 - ///< interfaces for an E-UTRAN initial attach, a PDP Context - ///< Activation and a UE requested PDN connectivity. - ///< This IE shall be included on the S2b interface for an Initial - ///< Attach with GTP on S2b and a UE initiated Connectivity to - ///< Additional PDN with GTP on S2b. - ///< It shall indicate whether a subscribed APN or a non - ///< subscribed APN chosen by the MME/SGSN/ePDG was - ///< selected. - ///< CO: When available, this IE shall be sent by the MME/SGSN on - ///< the S11/S4 interface during TAU/RAU/HO with SGW - ///< relocation. - - pdn_type_t pdn_type; ///< PDN Type - ///< This IE shall be included on the S4/S11 and S5/S8 - ///< interfaces for an E-UTRAN initial attach, a PDP Context - ///< Activation and a UE requested PDN connectivity. - ///< This IE shall be set to IPv4, IPv6 or IPv4v6. This is based - ///< on the UE request and the subscription record retrieved - ///< from the HSS (for MME see 3GPP TS 23.401 [3], clause - ///< 5.3.1.1, and for SGSN see 3GPP TS 23.060 [35], clause - ///< 9.2.1). See NOTE 1. - - PAA_t paa; ///< PDN Address Allocation - ///< This IE shall be included the S4/S11, S5/S8 and S2b - ///< interfaces for an E-UTRAN initial attach, a PDP Context - ///< Activation, a UE requested PDN connectivity, an Attach - ///< with GTP on S2b, a UE initiated Connectivity to Additional - ///< PDN with GTP on S2b and a Handover to Untrusted Non- - ///< 3GPP IP Access with GTP on S2b. For PMIP-based - ///< S5/S8, this IE shall also be included on the S4/S11 - ///< interfaces for TAU/RAU/Handover cases involving SGW - ///< relocation. - ///< The PDN type field in the PAA shall be set to IPv4, or IPv6 - ///< or IPv4v6 by MME, based on the UE request and the - ///< subscription record retrieved from the HSS. - ///< For static IP address assignment (for MME see 3GPP TS - ///< 23.401 [3], clause 5.3.1.1, for SGSN see 3GPP TS 23.060 - ///< [35], clause 9.2.1, and for ePDG see 3GPP TS 23.402 [45] - ///< subclause 4.7.3), the MME/SGSN/ePDG shall set the IPv4 - ///< address and/or IPv6 prefix length and IPv6 prefix and - ///< Interface Identifier based on the subscribed values - ///< received from HSS, if available. The value of PDN Type - ///< field shall be consistent with the value of the PDN Type IE, - ///< if present in this message. - ///< For a Handover to Untrusted Non-3GPP IP Access with - ///< GTP on S2b, the ePDG shall set the IPv4 address and/or - ///< IPv6 prefix length and IPv6 prefix and Interface Identifier - ///< based on the IP address(es) received from the UE. - ///< If static IP address assignment is not used, and for - ///< scenarios other than a Handover to Untrusted Non-3GPP - ///< IP Access with GTP on S2b, the IPv4 address shall be set - ///< to 0.0.0.0, and/or the IPv6 Prefix Length and IPv6 prefix - ///< and Interface Identifier shall all be set to zero. - ///< - ///< CO: This IE shall be sent by the MME/SGSN on S11/S4 - ///< interface during TAU/RAU/HO with SGW relocation. - - // APN Restriction Maximum_APN_Restriction ///< This IE shall be included on the S4/S11 and S5/S8 - ///< interfaces in the E-UTRAN initial attach, PDP Context - ///< Activation and UE Requested PDN connectivity - ///< procedures. - ///< This IE denotes the most stringent restriction as required - ///< by any already active bearer context. If there are no - ///< already active bearer contexts, this value is set to the least - ///< restrictive type. - - ambr_t ambr; ///< Aggregate Maximum Bit Rate (APN-AMBR) - ///< This IE represents the APN-AMBR. It shall be included on - ///< the S4/S11, S5/S8 and S2b interfaces for an E-UTRAN - ///< initial attach, UE requested PDN connectivity, the PDP - ///< Context Activation procedure using S4, the PS mobility - ///< from the Gn/Gp SGSN to the S4 SGSN/MME procedures, - ///< Attach with GTP on S2b and a UE initiated Connectivity to - ///< Additional PDN with GTP on S2b. - - // EBI Linked EPS Bearer ID ///< This IE shall be included on S4/S11 in RAU/TAU/HO - ///< except in the Gn/Gp SGSN to MME/S4-SGSN - ///< RAU/TAU/HO procedures with SGW change to identify the - ///< default bearer of the PDN Connection - - pco_flat_t pco; /// PCO protocol_configuration_options - ///< This IE is not applicable to TAU/RAU/Handover. If - ///< MME/SGSN receives PCO from UE (during the attach - ///< procedures), the MME/SGSN shall forward the PCO IE to - ///< SGW. The SGW shall also forward it to PGW. - - bearer_to_create_t bearer_to_create; ///< Bearer Contexts to be created - ///< Several IEs with the same type and instance value shall be - ///< included on the S4/S11 and S5/S8 interfaces as necessary - ///< to represent a list of Bearers. One single IE shall be - ///< included on the S2b interface. - ///< One bearer shall be included for an E-UTRAN Initial - ///< Attach, a PDP Context Activation, a UE requested PDN - ///< Connectivity, an Attach with GTP on S2b, a UE initiated - ///< Connectivity to Additional PDN with GTP on S2b and a - ///< Handover to Untrusted Non-3GPP IP Access with GTP on - ///< S2b. - ///< One or more bearers shall be included for a - ///< Handover/TAU/RAU with an SGW change. - - ///bearer_to_remove_t bearer_to_remove; ///< This IE shall be included on the S4/S11 interfaces for the - ///< TAU/RAU/Handover cases where any of the bearers - ///< existing before the TAU/RAU/Handover procedure will be - ///< deactivated as consequence of the TAU/RAU/Handover - ///< procedure. - ///< For each of those bearers, an IE with the same type and - ///< instance value shall be included. - - // Trace Information trace_information ///< This IE shall be included on the S4/S11 interface if an - ///< SGW trace is activated, and/or on the S5/S8 and S2b - ///< interfaces if a PGW trace is activated. See 3GPP TS - ///< 32.422 [18]. - - // Recovery Recovery ///< This IE shall be included on the S4/S11, S5/S8 and S2b - ///< interfaces if contacting the peer for the first time - - FQ_CSID_t mme_fq_csid; ///< This IE shall be included by the MME on the S11 interface - ///< and shall be forwarded by an SGW on the S5/S8 interfaces - ///< according to the requirements in 3GPP TS 23.007 [17]. - - FQ_CSID_t sgw_fq_csid; ///< This IE shall included by the SGW on the S5/S8 interfaces - ///< according to the requirements in 3GPP TS 23.007 [17]. - - //FQ_CSID_t epdg_fq_csid; ///< This IE shall be included by the ePDG on the S2b interface - ///< according to the requirements in 3GPP TS 23.007 [17]. - - UETimeZone_t ue_time_zone; ///< This IE shall be included by the MME over S11 during - ///< Initial Attach, UE Requested PDN Connectivity procedure. - ///< This IE shall be included by the SGSN over S4 during PDP - ///< Context Activation procedure. - ///< This IE shall be included by the MME/SGSN over S11/S4 - ///< TAU/RAU/Handover with SGW relocation. - ///< C: If SGW receives this IE, SGW shall forward it to PGW - ///< across S5/S8 interface. - - UCI_t uci; ///< User CSG Information - ///< CO This IE shall be included on the S4/S11 interface for E- - ///< UTRAN Initial Attach, UE-requested PDN Connectivity and - ///< PDP Context Activation using S4 procedures if the UE is - ///< accessed via CSG cell or hybrid cell. The MME/SGSN - ///< shall also include it for TAU/RAU/Handover procedures if - ///< the PGW has requested CSG info reporting and - ///< MME/SGSN support CSG info reporting. The SGW shall - ///< include this IE on S5/S8 if it receives the User CSG - ///< information from MME/SGSN. - - // Charging Characteristics - // MME/S4-SGSN LDN - // SGW LDN - // ePDG LDN - // Signalling Priority Indication - // MMBR Max MBR/APN-AMBR - // Private Extension - - /* S11 stack specific parameter. Not used in standalone epc mode */ - void *trxn; ///< Transaction identifier - uint32_t peer_ip; ///< MME ipv4 address for S-GW or S-GW ipv4 address for MME - uint16_t peer_port; ///< MME port for S-GW or S-GW port for MME -} SgwCreateSessionRequest; - -/** @struct SgwCreateSessionResponse - * @brief Create Session Response - * - * The Create Session Response will be sent on S11 interface as - * part of these procedures: - * - E-UTRAN Initial Attach - * - UE requested PDN connectivity - * - Tracking Area Update procedure with SGW change - * - S1/X2-based handover with SGW change - */ -typedef struct SgwCreateSessionResponse_s { - Teid_t teid; ///< Tunnel Endpoint Identifier - - // here fields listed in 3GPP TS 29.274 - SGWCause_t cause; ///< If the SGW cannot accept any of the "Bearer Context Created" IEs within Create Session Request - ///< message, the SGW shall send the Create Session Response with appropriate reject Cause value. - - // change_reporting_action ///< This IE shall be included on the S5/S8 and S4/S11 - ///< interfaces with the appropriate Action field if the location - ///< Change Reporting mechanism is to be started or stopped - ///< for this subscriber in the SGSN/MME. - - // csg_Information_reporting_action ///< This IE shall be included on the S5/S8 and S4/S11 - ///< interfaces with the appropriate Action field if the CSG Info - ///< reporting mechanism is to be started or stopped for this - ///< subscriber in the SGSN/MME. - - FTeid_t s11_sgw_teid; ///< Sender F-TEID for control plane - ///< This IE shall be sent on the S11/S4 interfaces. For the - ///< S5/S8/S2b interfaces it is not needed because its content - ///< would be identical to the IE PGW S5/S8/S2b F-TEID for - ///< PMIP based interface or for GTP based Control Plane - ///< interface. - - FTeid_t s5_s8_pgw_teid; ///< PGW S5/S8/S2b F-TEID for PMIP based interface or for GTP based Control Planeinterface - ///< PGW shall include this IE on the S5/S8 interfaces during - ///< the Initial Attach, UE requested PDN connectivity and PDP - ///< Context Activation procedures. - ///< If SGW receives this IE it shall forward the IE to MME/S4- - ///< SGSN on S11/S4 interface. - ///< This IE shall include the TEID in the GTP based S5/S8 - ///< case and the GRE key in the PMIP based S5/S8 case. - ///< In PMIP based S5/S8 case, same IP address is used for - ///< both control plane and the user plane communication. - ///< - ///< PGW shall include this IE on the S2b interface during the - ///< Attach with GTP on S2b, UE initiated Connectivity to - ///< Additional PDN with GTP on S2b and Handover to - ///< Untrusted Non-3GPP IP Access with GTP on S2b - ///< procedures. - - - PAA_t paa; ///< PDN Address Allocation - ///< This IE shall be included on the S5/S8, S4/S11 and S2b - ///< interfaces for the E-UTRAN initial attach, PDP Context - ///< Activation, UE requested PDN connectivity, Attach with - ///< GTP on S2b, UE initiated Connectivity to Additional PDN - ///< with GTP on S2b and Handover to Untrusted Non-3GPP IP - ///< Access with GTP on S2b procedures. - ///< The PDN type field in the PAA shall be set to IPv4, or IPv6 - ///< or IPv4v6 by the PGW. - ///< For the interfaces other than S2b, if the DHCPv4 is used - ///< for IPv4 address allocation, the IPv4 address field shall be - ///< set to 0.0.0.0. - - APNRestriction_t apn_restriction; ///< This IE shall be included on the S5/S8 and S4/S11 - ///< interfaces in the E-UTRAN initial attach, PDP Context - ///< Activation and UE Requested PDN connectivity - ///< procedures. - ///< This IE shall also be included on S4/S11 during the Gn/Gp - ///< SGSN to S4 SGSN/MME RAU/TAU procedures. - ///< This IE denotes the restriction on the combination of types - ///< of APN for the APN associated with this EPS bearer - ///< Context. - - ambr_t ambr; ///< Aggregate Maximum Bit Rate (APN-AMBR) - ///< This IE represents the APN-AMBR. It shall be included on - ///< the S5/S8, S4/S11 and S2b interfaces if the received APN- - ///< AMBR has been modified by the PCRF. - - // EBI Linked EPS Bearer ID ///< This IE shall be sent on the S4/S11 interfaces during - ///< Gn/Gp SGSN to S4-SGSN/MME RAU/TAU procedure to - ///< identify the default bearer the PGW selects for the PDN - ///< Connection. - - pco_flat_t pco;// PCO protocol_configuration_options - ///< This IE is not applicable for TAU/RAU/Handover. If PGW - ///< decides to return PCO to the UE, PGW shall send PCO to - ///< SGW. If SGW receives the PCO IE, SGW shall forward it - ///< MME/SGSN. - - bearer_context_created_t bearer_context_created;///< EPS bearers corresponding to Bearer Contexts sent in - ///< request message. Several IEs with the same type and - ///< instance value may be included on the S5/S8 and S4/S11 - ///< as necessary to represent a list of Bearers. One single IE - ///< shall be included on the S2b interface. - ///< One bearer shall be included for E-UTRAN Initial Attach, - ///< PDP Context Activation or UE Requested PDN - ///< Connectivity , Attach with GTP on S2b, UE initiated - ///< Connectivity to Additional PDN with GTP on S2b, and - ///< Handover to Untrusted Non-3GPP IP Access with GTP on - ///< S2b. - ///< One or more created bearers shall be included for a - ///< Handover/TAU/RAU with an SGW change. See NOTE 2. - - // Bearer_Context bearer_contexts_marked_for_removal ///< EPS bearers corresponding to Bearer Contexts to be - ///< removed that were sent in the Create Session Request - ///< message. - ///< For each of those bearers an IE with the same type and - ///< instance value shall be included on the S4/S11 interfaces. - - // Recovery Recovery ///< This IE shall be included on the S4/S11, S5/S8 and S2b - ///< interfaces if contacting the peer for the first time - - // FQDN charging_Gateway_name ///< When Charging Gateway Function (CGF) Address is - ///< configured, the PGW shall include this IE on the S5 - ///< interface. - ///< NOTE 1: Both Charging Gateway Name and Charging Gateway Address shall not be included at the same - ///< time. When both are available, the operator configures a preferred value. - - // IP Address charging_Gateway_address ///< When Charging Gateway Function (CGF) Address is - ///< configured, the PGW shall include this IE on the S5 - ///< interface. See NOTE 1. - - - FQ_CSID_t pgw_fq_csid; ///< This IE shall be included by the PGW on the S5/S8 and - ///< S2b interfaces and, when received from S5/S8 be - ///< forwarded by the SGW on the S11 interface according to - ///< the requirements in 3GPP TS 23.007 [17]. - - FQ_CSID_t sgw_fq_csid; ///< This IE shall be included by the SGW on the S11 interface - ///< according to the requirements in 3GPP TS 23.007 [17]. - - // Local Distinguished Name (LDN) SGW LDN ///< This IE is optionally sent by the SGW to the MME/SGSN - ///< on the S11/S4 interfaces (see 3GPP TS 32.423 [44]), - ///< when contacting the peer node for the first time. - ///< Also: - ///< This IE is optionally sent by the SGW to the MME/SGSN - ///< on the S11/S4 interfaces (see 3GPP TS 32.423 [44]), - ///< when communicating the LDN to the peer node for the first - ///< time. - - // Local Distinguished Name (LDN) PGW LDN ///< This IE is optionally included by the PGW on the S5/S8 - ///< and S2b interfaces (see 3GPP TS 32.423 [44]), when - ///< contacting the peer node for the first time. - ///< Also: - ///< This IE is optionally included by the PGW on the S5/S8 - ///< interfaces (see 3GPP TS 32.423 [44]), when - ///< communicating the LDN to the peer node for the first time. - - // EPC_Timer pgw_back_off_time ///< This IE may be included on the S5/S8 and S4/S11 - ///< interfaces when the PDN GW rejects the Create Session - ///< Request with the cause "APN congestion". It indicates the - ///< time during which the MME or S4-SGSN should refrain - ///< from sending subsequent PDN connection establishment - ///< requests to the PGW for the congested APN for services - ///< other than Service Users/emergency services. - ///< See NOTE 3: - ///< The last received value of the PGW Back-Off Time IE shall supersede any previous values received - ///< from that PGW and for this APN in the MME/SGSN. - - // Private Extension ///< This IE may be sent on the S5/S8, S4/S11 and S2b - ///< interfaces. - - /* S11 stack specific parameter. Not used in standalone epc mode */ - void *trxn; ///< Transaction identifier - uint32_t peer_ip; ///< MME ipv4 address -} SgwCreateSessionResponse; - -/** @struct SgwModifyBearerRequest - * @brief Modify Bearer Request - * - * The Modify Bearer Request will be sent on S11 interface as - * part of these procedures: - * - E-UTRAN Tracking Area Update without SGW Change - * - UE triggered Service Request - * - S1-based Handover - * - E-UTRAN Initial Attach - * - UE requested PDN connectivity - * - X2-based handover without SGWrelocation - */ -typedef struct SgwModifyBearerRequest_s { - Teid_t teid; ///< S11 SGW Tunnel Endpoint Identifier - - // MEI ME Identity (MEI) ///< C:This IE shall be sent on the S5/S8 interfaces for the Gn/Gp - ///< SGSN to MME TAU. - - Uli_t uli; ///< C: The MME/SGSN shall include this IE for - ///< TAU/RAU/Handover procedures if the PGW has requested - ///< location information change reporting and MME/SGSN - ///< support location information change reporting. - ///< An MME/SGSN which supports location information - ///< change shall include this IE for UE-initiated Service - ///< Request procedure if the PGW has requested location - ///< information change reporting and the UE’s location info - ///< has changed. - ///< The SGW shall include this IE on S5/S8 if it receives the - ///< ULI from MME/SGSN. - ///< CO:This IE shall also be included on the S4/S11 interface for a - ///< TAU/RAU/Handover with MME/SGSN change without - ///< SGW change procedure, if the level of support (User - ///< Location Change Reporting and/or CSG Information - ///< Change Reporting) changes the MME shall include the - ///< ECGI/TAI in the ULI, the SGSN shall include the CGI/SAI - ///< in the ULI. - ///< The SGW shall include this IE on S5/S8 if it receives the - ///< ULI from MME/SGSN. - - ServingNetwork_t serving_network; ///< CO:This IE shall be included on S11/S4 interface during the - ///< following procedures: - ///< - TAU/RAU/handover if Serving Network is changed. - ///< - TAU/RAU when the UE was ISR activated which is - ///< indicated by ISRAU flag. - ///< - UE triggered Service Request when UE is ISR - ///< activated. - ///< - UE initiated Service Request if ISR is not active, but - ///< the Serving Network has changed during previous - ///< mobility procedures, i.e. intra MME/S4-SGSN - ///< TAU/RAU and the change has not been reported to - ///< the PGW yet. - ///< - TAU/RAU procedure as part of the optional network - ///< triggered service restoration procedure with ISR, as - ///< specified by 3GPP TS 23.007 [17]. - ///< - ///< CO:This IE shall be included on S5/S8 if the SGW receives this - ///< IE from MME/SGSN and if ISR is not active. - ///< This IE shall be included on S5/S8 if the SGW receives this - ///< IE from MME/SGSN and ISR is active and the Modify - ///< Bearer Request message needs to be sent to the PGW as - ///< specified in the 3GPP TS 23.401 [3]. - - rat_type_t rat_type; ///< C: This IE shall be sent on the S11 interface for a TAU with - ///< an SGSN interaction, UE triggered Service Request or an I- - ///< RAT Handover. - ///< This IE shall be sent on the S4 interface for a RAU with - ///< MME interaction, a RAU with an SGSN change, a UE - ///< Initiated Service Request or an I-RAT Handover. - ///< This IE shall be sent on the S5/S8 interface if the RAT type - ///< changes. - ///< CO: CO If SGW receives this IE from MME/SGSN during a - ///< TAU/RAU/Handover with SGW change procedure, the - ///< SGW shall forward it across S5/S8 interface to PGW. - ///< CO: The IE shall be sent on the S11/S4 interface during the - ///< following procedures: - ///< - an inter MM TAU or inter SGSN RAU when UE was - ///< ISR activated which is indicated by ISRAU flag. - ///< - TAU/RAU procedure as part of optional network - ///< triggered service restoration procedure with ISR, as - ///< specified by 3GPP TS 23.007 [17]. - ///< If ISR is active, this IE shall also be included on the S11 - ///< interface in the S1-U GTP-U tunnel setup procedure during - ///< an intra-MME intra-SGW TAU procedure. - - indication_flags_t indication_flags; ///< C:This IE shall be included if any one of the applicable flags - ///< is set to 1. - ///< Applicable flags are: - ///< -ISRAI: This flag shall be used on S4/S11 interface - ///< and set to 1 if the ISR is established between the - ///< MME and the S4 SGSN. - ///< - Handover Indication: This flag shall be set to 1 on - ///< the S4/S11 and S5/S8 interfaces during an E- - ///< UTRAN Initial Attach or for a UE Requested PDN - ///< Connectivity or a PDP Context Activation - ///< procedure, if the PDN connection/PDP context is - ///< handed-over from non-3GPP access. - ///< - Direct Tunnel Flag: This flag shall be used on the - ///< S4 interface and set to 1 if Direct Tunnel is used. - ///< - Change Reporting support Indication: shall be - ///< used on S4/S11, S5/S8 and set if the SGSN/MME - ///< supports location Info Change Reporting. This flag - ///< should be ignored by SGW if no message is sent - ///< on S5/S8. See NOTE 4. - ///< - CSG Change Reporting Support Indication: shall - ///< be used on S4/S11, S5/S8 and set if the - ///< SGSN/MME supports CSG Information Change - ///< Reporting. This flag shall be ignored by SGW if no - ///< message is sent on S5/S8. See NOTE 4. - ///< - Change F-TEID support Indication: This flag shall - ///< be used on S4/S11 for an IDLE state UE initiated - ///< TAU/RAU procedure and set to 1 to allow the - ///< SGW changing the GTP-U F-TEID. - - FTeid_t sender_fteid_for_cp; ///< C: Sender F-TEID for control plane - ///< This IE shall be sent on the S11 and S4 interfaces for a - ///< TAU/RAU/ Handover with MME/SGSN change and without - ///< any SGW change. - ///< This IE shall be sent on the S5 and S8 interfaces for a - ///< TAU/RAU/Handover with a SGW change. - - ambr_t apn_ambr; ///< C: Aggregate Maximum Bit Rate (APN-AMBR) - ///< The APN-AMBR shall be sent for the PS mobility from the - ///< Gn/Gp SGSN to the S4 SGSN/MME procedures.. - - /* Delay Value in integer multiples of 50 millisecs, or zero */ - DelayValue_t delay_dl_packet_notif_req; ///. - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ // This task is mandatory and must always be placed in first position TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10) diff --git a/openair-cn/COMMON/udp_messages_def.h b/openair-cn/COMMON/udp_messages_def.h index 809e31bab2..551788a2bb 100644 --- a/openair-cn/COMMON/udp_messages_def.h +++ b/openair-cn/COMMON/udp_messages_def.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ MESSAGE_DEF(UDP_INIT, MESSAGE_PRIORITY_MED, udp_init_t, udp_init) MESSAGE_DEF(UDP_DATA_REQ, MESSAGE_PRIORITY_MED, udp_data_req_t, udp_data_req) MESSAGE_DEF(UDP_DATA_IND, MESSAGE_PRIORITY_MED, udp_data_ind_t, udp_data_ind) diff --git a/openair-cn/COMMON/udp_messages_types.h b/openair-cn/COMMON/udp_messages_types.h index 464d1575b1..a44ab44c16 100644 --- a/openair-cn/COMMON/udp_messages_types.h +++ b/openair-cn/COMMON/udp_messages_types.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ #ifndef UDP_MESSAGES_TYPES_H_ #define UDP_MESSAGES_TYPES_H_ diff --git a/openair-cn/ChangeLog b/openair-cn/ChangeLog deleted file mode 100644 index 0db17ac628..0000000000 --- a/openair-cn/ChangeLog +++ /dev/null @@ -1,15 +0,0 @@ -v0.1: -- Build system -- SCTP layer v0.1 -- S1AP layer v0.1 -v0.2: -- Updated S1AP messages to RELEASE9 v9.8 -- S1-U layer using nw-gtpv1u -v0.3: -- Updated S1AP messages to RELEASE10 v10.5 -- Added NAS interface -- Added MME APPlication -- Converted sctp_bind to sctp_bindx for multi-homing support -- Added configuration file parsing -- S6a layer v0.1 using freeDiameter -- KeNB key derivy function \ No newline at end of file diff --git a/openair-cn/DOCS/DOXYGEN/Makefile.am b/openair-cn/DOCS/DOXYGEN/Makefile.am index 31f49b260d..f80ebfdfe0 100644 --- a/openair-cn/DOCS/DOXYGEN/Makefile.am +++ b/openair-cn/DOCS/DOXYGEN/Makefile.am @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/DOCS/EPC_User_Guide.docx b/openair-cn/DOCS/EPC_User_Guide.docx deleted file mode 100644 index b9cca8254cdd3b319aaa5ed907d114082f464140..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019641 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

&26!j<}(%r*0xq7i6Ea3JV2)w3 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

Cvf^IMEyLr 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

YC>g&vBB= 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

X6hCt%E<>3xF${Mqx`T|j=X8d<=$f+ab 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 z zS^C8!sBES^x7`a>0|?KC@>0us%Gs+d_eEXmfG~DQ9y_^wik`RyP_fVK=iD~B@)nmX z5g~9vKeYkP+CGSVuK#XR4Pk6YRgE1Au&Kz6w63fKaA9T5HTGsG#0>(@SPV*GfY4Y` z#eLwwzsI^6bCy9i#IdtyB#X}2p6u}BV=iRInuQ=aR;*6!mIM8nnkCew6gG_9qL$tc zl3PKrIZ0cbz&37&F4pi#a%=0yt_+W4XskyEKHcE0)Ki0npd?Q`{JpgEQI zpVn~eUfe4wm)dx?3kYdC+Z*5blvSw#l%r8+*;I50B03j=UJna?+h(#q*D%x{#)u(p z09PtLp<_r>5}FGT0<1R91zhp_n{Ws37)!xQGReW(_GBxSb0sG;Hfws%p(~y&Im+ow zKNP*;eo2JQ83cgE!u3LGny9}Sdu3aNCFcs%qo^>h zgGCs3!OX{_(4Qm8j15bM065sjcj7rYM!6{FMR+Nle&E(cFrg=r313N>h*)EtVJml) zf1b{`w^vEcsq`9=k|M<0Q7geYHM#75gg8#*Djx|`!@(Mm zo-AcQU>%)zht(tzA&;UyueG_985?cVwCI1#@)%S32Z`en|H~|Ua{eIkfq5p)uS`uk zz8shwdm(_qzOmO@(Agpc1j4JQ5V%>qp&I)^B%RDYYC$sLW3Ej8(oJwv;{GiPSK>VX z6oo4%vA8`db-7YSFspbOnhKhO-4$y74c@;;VGjx_<}W80Mq1~*-)_-9A0n8KTHubK zbaKPLFjPEUWmFtZ(|v&81Sdd%;2zu^g1fsUxVw9B2=4B|-Q5Yx;_eb$7kArt!*|a2 zi?emAtM2W(JxuNPOj~n-EjIX&IH><(%~jdPTTFch)jx^&mFt9*tpvRUeFRiJq!HW_ zg8r*cXl(ckWi5z!#lgfR*M{$`R=no?lxFAI$Pw}6Y%}wR6C~n7S2aNa8B`AQP zkN7cfQ$e=c8C#_}+Xd;{1g4L}o4m5ot-8g?Fu(fs)!)9s*UP8Ihh`Gz`bUvccjfJHx%|q68_iK!Hf(|_zMW;g@3k!WIYej z-z4Bh@50&VC`0(nR|E}K8ND}KmOh^_gu)p6_paFap^Dq5G|iBL0a=zTfmz$Fz8B_L z7}$p<_67V24pg2P`~gxt2?kT*dedl<|9H1aCB3=Eb8izetHyPQy(bYFnWXR7^hRPD zO?g%u;)<&I?b#!`gg;*)xQhvJLwX@mS2ehEvdLUY5tRmS9A4Swh~`T9yRT6|-<%}3 zg`VCjUYYaHmcS-9sOKFfI!6DgJ7&v_GVVmQ+YqqQS#@M4_zmY%D&Lf(YW{Uq)5`)M z&*y}UEZ(tiD}WDYjTSmd_d0W6=hwcY%K9LPZ%Ga2LvjcpJt!9icEOW4t)0ANoe>8azL=3b*N@RJ>{=e`sxCk6?jw_@+1<-yi?zOCW&ONm@#? zk7g@G=^dm)jflQ)*H2u0ZHSCt*H^_`hqr? zth{+z(!Qo$x(K8TVTR`?oN0ajt4H4lWDh{>QPicP1Kk9U0f%DS$SPb|12uo#dCy~N zbpqtgbusWAF`o?Lt_M z>^Y2)J|88%0!DFqVQT*EAWadW*Gv@i{4eJD80Mm5iL_(!v}4J%iAZMHkGz!acAI&s zsozc_lzXSERO_e5eYB~Pnyk8`BtB>jni!#8!qufb5N`{K@nF;zbxEvF`Q^9FKwE@a zzAgR-C9jTf8@wRe@hdw3ngj}aHsYvnZ2-mmn-9(P=ifGFoUDB5qGOwK0uz|188Ck# zuR>FrV40AfP@S+pQPDu%#xUHCnwye+R=QX zL$Gk0aoobrTGF;y4<0JQ45sK6aCGO!qi%) zO2KF%4Z!1p+HLtztgyj(PWeh70PQWF5bNfqISVERk;+T6i7}}H+lRt4&WBqfhsu9% z;;M`96H8v_TLoOmz|omH9EVJKe#c>M5~Ia_*DzFZf zPVjb{&_qr?=&kzX^Zc;yUf!kjTUD8S%$ERskSi41|4<{a9M02cDTG#)Q8b3gupi9n z{4JFyza@|-e=;i#kj2bRrGy8Cbg1@`9@eEieZJ1w-r;95RgG^|a&j^C3a&5uEAD6R z$O%z!{3za!&EDI(UiLL8*4%~-cdjLsjkQYe zH;?o6`-O_8?y1`{ftNeIF89Ui#}*l;bJXd*kSv}uhSu7J&XG~laNE)8{0|P*X<`zxvgUTq39J> zeOLW~Y2x82$Fe>e@GpM)srT~kz0Eb*lLDE#@(*Q`=@Bxg(!<08a`8=UeMT#qg4Mo@ z*U_OQd4^2gJEoVP!mO^FoO5SQ#J+g-C8uU(VOx?k$sxL}lNFuh zSv~V5Q>$R~cLK@$e4Sh_GK(JTuHX9ZcWuXUlDv>L+^q{rpJ>jCyC_Ou+&v)H=X1z= zLOOVfO<;{soo|(h9m2Zj*Gvc>N*WrE?jS(pdh435S8)&1S{%0bDBkQA}L|T$zob`WoufsS>vbr&DO*`G_2iw>@v=4 zF!aq<F}sa_O(yp5yGT%~a7D~E^p2ci|DqAMsXX^$ zR{trZ9fJVJSE0iM!v>H!FUZ6~PkvHZ8Ca>Ry=%0fsO|G9(>7E7`w1IghoAD@nSj%3 z^fKSQqhH{U6k(_LAxP;uk16h#$fv1#FHN1S z4A03KLoifim8F|z&y$={4+rSSn`P7b{7J5~LIv7>CPOHHoBDCI&6#QI$Bl+S;4oX{Rb;Qk~;S88^1ow)m0M7&?L z0c3JDz4@cbl=R6bO*6tj0l8=`MCB+Sxrho^MxH4tL!X8N5b-BOWfZwc16Rh|{$ky4 z@1c?J8hklA{of0y>AEQLSR|_Z9N-z%y_p_+{fjC^vpKbd%ERAqZFluv7{)vQD&9U` zbWZ%1Nz#4K{Ozl`)AP-wCBM#O66agPWthZOXy@_kBg6_(juLa3G$ zK?|a0$PP3Q(^s20M8%N%&tW5aCL64*-#?M-(mxBQFwm!DC+nx$b}?C}YHP`&t!WYw z7!jNZeY-SVDefI#^z9+|G_M43kRUi&P*dtuE)6EsKYV>DXky zt%)`Hp~_X`f%X$MgX(XJXA{ehJ=0G^g<>LZRZRGnEN)S}pX~eAT1+)c$FG(-XZ5*Y zhuTc1h&P;3zr>b=nZXtr=~l}J$T8v{@=R^EEVZ;cwaYQ6o=a2fLN|Y)!OEV=n(2=n zD%+VOAiG+#FM&frZpuC(vdR!jF@cR{y!ZP96KnkikuWVT!9;Khd_9RP2Si%It)2EZ zXVzA4pI%+40XH?tZ4F}N!HDu5FaFMk;)CIYUAaZ0l7wzawPzBtzqWiV+4G)x zUM@?Dm?qtlRQ*PFHG>Oh-jy@xeTsaV8>Wx>!YG8Q8=pzoDuCBPfsN7m)=WkXXz>7k zv`LK9?)KF!1uoRWN*Y6Nqnc<`rXQ4E@w6MRO<(GY#sEHKwaB*F9-lim7#us>c=O0U z8Q(6Nbo4Y{w@fK=`lkQDeTz&&@jbykq8NwwEEGC*C8rWjzj}NL$c28{m96j~ZW6*S$)S$*G|zD`_c*J5XAfVUi;m^c>U5z) z4Vcfmg|n=#xsu;QGHrJXyZW`W_(ea{C|AQk#VJ)oCrX}XwT>F}d$;grb>i()MKCY%-U-Qh zvJ9L;U)Ug6eO`PZIBaYF^%{+k0W&y0bCK`9;Cbn6b0ny!926K^!q=`W^QzgVfGkOe)y*1XJSvN4I9t)cKRc0Lbm zB^ZxaeIXJQ3MF(;H+6k@xY|4mHu&jU0$y}^X`Em$6 z{e=Ys1D7nv7h6Vb8gtym!N>@XldHJuNNN(>PRr@oNRKyRFsz^Gz%3!l>U?s&h4q7M zsM_`mj^`En2(0aTEH_WePSo|y1E>5tj+Pt0I(k+FcYAitb|Gse5NQg$k=w8;0rw{V zp08G~1@zp(qX`Dp6ml-3q2&rS^a6~LI+ z@YeoGBfVDKGDdxQ%+0+odT-*#HD6!0qh&U!EE@|V0iC<$pV#(~wV_6pR?Cmd4N~geJ?HwH-JW@S>E!gC zRja3s4YcKTaIQOW^}U3?Iuh8|oi;mtgzL}s`i)!qnC)4qx5#Pi*o0>Po{Gh^{4iGj zx(eP0hq>V#@>Qu~2IlD}YLp4j9TYQ{&)B)hAq%sMWi5)TPqf!?8cTLB+lTQVI-2u& zu$mSYE=PJ4m5eJ{A1P1mPcd_ zLpwjG2h_dCBT^~H(aeGg{&h^R-uzvm(pLwUie`(NL&#r!aS<*5id%;ff z1#a$h4xCLohelK9h;iv+^7Mx3mvrigI7gdO(VwEd;+sqdK3OyTC2JYTPs+Y*AhVTN zs}s@FDxeIbRH$T45cCGB5B1SlUZcCp&2z~sKW8Ek5cKn|&lE6yG3)IA`IuM%X@uOj z?nJ_Bq4L6Zxg1e*n9FkW_q-wvBNJn;k}pG^Ux7e(a*1EocA0wd;Hi!SoBS8hUJm|e z6(L)AXEJTS8rI}zj|gv;>va+vv>z;O zu(H?jjR+KP1S_uGGGlBD8u;j&`51<~ikH`em$M7Ey0+bTyV5(Jyk7c~bla459_c`H zl>#gMCdG2TD%Kp4KF``BeXoH64J)h4#HT2;P1o+zZjpigfYCvlzd@|7_M zE}d$Cu(U%DRU-T19q+9{8NmI*B`XmVAfhRzW%|s4aKerGZ7cReHF^O!v&Deyo z)>h&S+dpmI-0Qfr^5%4HZoBuG67Hz81b$RzW0K9dAx*1p^e_ExrM}6c@T5d6Fov>< z+dzRA0-P7XAJ-!oXK&2yzJ6Znwn12Bk2z8|xt&#&5E+{xW@jKUbW5ZCJ4Cn9^x!s@ zy;=2K-&cr#&Ai%RBL&1~TkaRUyVv2%^swIldSdOX!E4fPLa1ss@i8vO*gR%Sg3W4K z|Booa(C@lE;7_Av4egvtF}G*5qa3~-??u@mde&s`q!5`RyG73x|D6+cW z6FI?g4{m~ibC$I~u_-T{rR0>VlCpEKtF|0RJA#vUv;VZBjHwImu4V*{Y5luR5qCsU^caB1B*zu9~ z2eXAbN`&>Es+3PvoDF%$Jgw(c6357{A2PqAMQjveyi^)VG5yE6NFj_ky&(PMZjcW` zReB2;U5f$uxFbDZ+I_F9!6JrQQ|Z!*-<05$AsS3#gx13ro<|C#_)L08ZWWShA_Rsr zJ~`pd$?+fE_mkzs(83|*I@Ut&3r?$7VM`&O+_@vuIpzx)oJUeT>}Zq5knKLT&~qmr zitysZY8S}-A;eNRzY!YTT$Hc`@ZpXi^ZGrnp>c20fVkynWid&`?v3XxG9p7sg&FYy zLojrG110p3f{Y?j4BML@Bc;#&>o3N^?&R2{xZj+Dof>#f&uEI?f#1>tyRFg3?IY5q zHTx|)uiMMz`Hv&m^az~N*stCFz-IMHO>y;l|Mi{S>C>LptADf#8@Ar5aX&F1{WUakO@l9Dzy)o0ATwGTmzU8=~_1 zTVXnQ2(NoO4?i@jA~NuK*iA6`a4XC#i#c?y+8B|?xHyS5>WAVmjrW`z@|mY?i6tUM z(7@_L@`s~53{wn5Lrb}EsoCtCv*4+4rRM43za9x!l{S{_HaiU#ry*w+UXU{wqnVV0 zXX)mLkOP}+B7@`tQ`_9c3&pUoSJ{K+LT1-&cXm+lNpopM6PX@%>W*E`utTt$Xe?x%6#LbOkWoV3?=iDU<%#J2iT;Jpx7w zLkHP*cJxOndMu53-i&3(=Z`C6Sl%eXrT4mg3svoXdDF~;ry^K7QEL59GaFszhR7Bh z%-j)cKlg}U=mO9va;;XTQKt~>T#<%%yf~T;G=oIuzGyJVOT}X&ek>Cr6^kkGyUcr; zj3wxGcgK<1#zx6Eo^dfEDaKh-M&}K6i8qP!ic5_ShKXNc+f^rDHdN{J3~a>%I>aTD zU`78H)9E9EOE;u2Adx4j!2@zs2RajupmUK&e2Dl@nLs-7ci<}8wh0A3$)a#p^x!8k z-pZ29R~y(b;8STmkpkhh=qht>J?L~Jmxh7zKsMJO!`$TfsM|=aeNr-C z>066PCPnX{fw1W|F3#fxfzMw|QsUPran@?LP||Hl9z>M};&f?Cr|>#2+HhJ_@p6Nv z>8%T=P&p_HQqDu)D6%Xp0bDWMFxyl}jOKs!GEEM{u~r{=y|+c#p+6_7d%(y3eKM+C zyksXNg`S>zGXJcY5WTUZMASr&7|m3kESZ$!@Y!0X5*?4UxHcU6vmi8q9c24BtUv;n zw$(3(butUpP`0(*Ew^dnk2vIFAF3%3JKd^D?SvK6W1uxA2R z4fHN0NWM|XMBe$r#i*R#iFB-EC(Pk|CmGWc|MsydEhV>49@|ou%E0zT#lv2fv2#_>90ign0-Ih20e-J|wH07!;f2v~G(w;s3@p0hX#rk> zjf}+~5vRY*X;fhn=do%NVd6wSQN6RfWK2qH1!;}?Eb{&HJ&ndPsqP<$#ZG!L>!EMI zi5{bHEXDE9QR=DB&J;J1BP1gZ=zq=U*isBUi&Pmi4j^+FtUI`;T`k&nWUJs+=Z+hS^66!aC31wW1L$IqvUtbT_7ZtH*AlMF$#6?H) ztz!a%m!YZ0?aLLvH~bXl3pk7${;+Bk_fs&9_g@O1;({<_mot$tF%IZWVO-3AUZtxmI-WvG+Dhd*8sx@d{dX5B7Pca7-hT&fm0xqr`;s^pdXSLDwjTOHWC*Y zvrYRyCrvR%GEg=NJ5z_#4x`kjGD=g%fs!@}ed(ZC%i5ewh5kw@z;HyNfN{>gc9jdN!PGOp*XQ9~QW?*_Hh=)0b8 zbN%uO!_gpJPraP*hd@1ycog*QCAQsJp{xWN5pJ#0Gpp|;jATw2gYsh40j-fz4B=tn zYp|Et@scELV!vT`IWRn-x2eh2VoNAQ$czwKzl+(3Y@o-BkmQrG5>k8C>|OzN|G?~U3RJX@GKY}Dl%M=Zp?UVlJ5{$Qt1#_JoIF- z!V{5F$iuJ@SSplcdLUY$I!4`xHd3-?5}{wiByqeL_^3{j5LjoC;q>7OV#R^%zrt~) z8X)8wBczz6!ot5oV~9~;ez-0c(6Rd(UKUOfq!m8Qi=G~C^795G{$AuMVi+|pfUF)@ zjFjwIgivf3VOR=-77Cx9tVAS<%n5Z+T#PZWHDZ_p-JM)y(ez_Z) z&qBIL7l|_h7w#Ztec)j!W6*9KhY8GWfDNe^lSnGelZXpNQ5Qc^y5**VBq}f5jAK~L z<{dgH{fI^i0Kd{Q>*(@9Oj3aNc-GMdh5eIL@S#b+M|cd1LL3`Alv99Se#8{T@W%`k z`2d4}wfwRv_Cxhy7!?sK3*KEsPmzr{Gx=_2I7y>_u+JDPe!ox;o2q4RoqCwI@VhAe8$2(-O;K4@zBXSuBrvpVP z95Ho008PvgT|y{`ujx}8)#v8+Qi7AK*S;MD^cqM|^oP3V-mq(RA4rJxA|&8{^<^9$ zicafjNK>x1Jt}9#{9tVtzPq=3wnu@O?c;r6vp0NcD4D*C{t+&}^H*}=h2RX9oe3U! z(TRl9#HSo{wovpaf0H3aaD`wg`bGPQ@2L@fg3vQ5c$ zxeQLv`VIR1fu}5O#@Q0}!hcMJfj=yZkhxq78%pg$mndPi)@K;-7tn<57MKB=QG3pTU(UCAM?EUbt&!_o_X?qG+E`PdHM| zCn@e&|9saTV=J?+Io_MK`E`ogh~JqjmBcotuk*CP-&#zMH7=o+tufzk^Z|y_18$Fb zP@JlDG2}lmlEm)~S%&7!N@F(T>06#;HhL84HKLgIN5-e}8zR<@qr zCwWcy$A_no349?YnkD8BK#XepC@Mj^1wRQ787CJxwSxE_bY|r~&@cC_mE>opo+-;M z=okg40jdGF?3)K!MDN#*6K?=olKrNs#1L<@{}wEjZ$P$4=?Te-=PW`$$#E(wR9C)9 zxLYhip5K&4c>60}f+&v?ap`}@$i9f$BGe?jct6fY(Kqx>t|A|iO}J^ef;vT^y98eM zT_ziDI0r?ErXCJ2x51=WjQ(>q{txw~juV4G^b#sEO4Q}pI?w7YodPN{I$EGZ=HKMc z#9wf+L}Y0M>BzLn|NNDuZtEysIFcjJ=8Y_zoy6NvVL<^HYyFPYNSe|Xl^aztZjS{@ zWl!yR41te@`Nl31au1;!3 zJ|2}_njWkp`o^W2${3BV04(O9ToZm!)lEz+1$P*=PHyhJsSa_XgTlF{MTghWK`=Gx zUkVs5Sf+sA=mJ?J$8JPo6_Rjbul6ApOWvej3N^Q(-(JlJzki=e|C<0Tra5%}_g}ag%zvLC7I%9m z6DC_z6H7xTOIt&8Qx;Z6Q(LpsY-A6d`L?&kjkY)&JE(8MZFqNZ(NLt{S~uY^(Xn9} z=rrB}5nzKqH9?i(tS=B~V0$%MDNYB`d`T)VZEXH!dt+g1-L#@}QZ`@Elw;MErzfW7 zw6Qs6keDrBk018oIqRUuW5Z|D$GYlq<8gt@+HBHbEC$c`6Y}%%@iE1i0MC$3c!8(s zAJd_+H~*m|1#ZUz7K{cbubAbj*);xD63WG00%wnE7V3&~*i-f@!j1MRn;!Z}3;5z( zB{~atUvh;(msA4^u}G`$`Kzbc7T$FZIl`+*)W^+<$jQ4)J4-w<=#LEFb}k#g>#ZH zvCFTg_WIbj6;9RPlQ{bo@%l=5tqh=cRAe|Mn(cB)k9u2QeK@%0T6j+3$YAj7)*!0PZO@}T_oe_*PrfF z{+UyF&84}7UKIs>qsKM$P=i?+>*60p>~?1l!2hBe+}6L?C}N;q4&|J*{+4Ysh7Zps ziET~%z=+*m>_TMq#N!}!5NYH5r)=ANN3_xgWg5iomS{l1tQa->;t+ac7|3uYd>lLB z$;Ql5-O10QjmO{{_$0@?Nr%rM$C#V%b+zGICRwl5c2f zwUidk=7(tCB*f+=U*;5K+0gWwRFss-zM(sUG-k8f?J6Pbq3A9)P1(K(ezBY=3DIA^Ea;ZJVX@d<@2; z4FI*v9ZBRsE3?FQ{#+>wH>F~YBh7w?)uEd?1&fj>V9C?jN`a9jZ)3vx^GSgWHJ}M- z<3v>RCHqZ|n~$=797t?%|6^W}GfDj*d#QM3ME<^$?Ndkc((L{&0wK*_46d~YzAE1a zPR?8Kx_v+*K|13q1=L2HRLjR}w?~ay8-x7W^W4=e&}vJErH$#L?1um0nze!(?}YaA zwK11_EBLGeDeGi~pM`FJ?%C8o%5%Tl3#dUdhVfUHzuFNY93cLha3?6s z;ugu>Hq+c^=em+x3_@xNxd-ILdah*AA2^d^tcO9_^L5qC&$DY63tgCk(+L|DwNG9- z{{&nI@9=8)4@r9wl5I09yg_;Wh63ji3W8spX&!tV9DBJ4yP1w0@u+(?Q~iGmPHdvF zpp0zIDhh=JZgLU8`wVQ^O2-b|@7>!z!XIwl-(QP!`&-0Y z7?7Z*l$>!TIEw%D4Dt+X^KYxw`f+xCGWQ*KrUn<@SrNpopl=RpkrF&5T+`)6Ct}i&|82@UR*83RvTMPJA-ax6*Uvow1PHT3Ot?Bkae_spfnm%`LX_A(5Z|@J{lqxR` zQ_C}{nTF=9$>)2=Qvm&K?(|;+s-?Dcywnl%I^n3%>?doLp(cmUu9Q#Qo{!08udRz0 zX8=d*9bCs5-xu!nAUV#RaoQ*AF?4FCM^zxPXVo#cTyNKiN5kCLIhsk1A}>M50BxfQ zmg_OD+ez&lwgsCs-r~EJoE#sAH2Q4va@D&s+UIYYRPJ*gw~P9q5m)jBkE@E7cBj>5 zu#2hX{3pc)fqfZRMv$~f`-bvMIF4RNu?wPV!c1K@Syl;L)RFhyHdS_gXbfGIT(yx? zbBt4ddLg8NOBa1*@E9#JrbA-4vll0OeG?RR`dPLn*n7$gCctI%=`IaFP`pRsyYIhE zJ}?MR6d)Euu2#y7?q`v_{oJ6x8gt_v8JU9b%s;ozIcu8fBm$YOCJoGJ&E|a%I(vVCzm--m?j300N zOMq#Q3+S1GZ52G$R=LJ=!2@_KG`qV_@qcs3B9}WVROAx^Ck`xvT4}31NJB?Q_fJ64|o^sT}`ZW>6F&J3P;oCT%HuxZ%Bu>auUt@=MZP zg5O)oiO7B+D=6(TFs*13nGXj&{iQxMuZ(@NvzEVI)wwq?g!)A94(Z@gR#RR#C3VG& zU+*@5l8Gf#s3+Ljf9AF;W&Fn~1Bcnbiw6hm37{R~FJS zfC=O|qU3th(eHbqx~$jk9hLS-;|V%iUhL~8H07a&8<%j=}TWA>tc`l%-K!uW0Oor5W;x3ClR3HVCHd9Sz9?jGwUbG`fa zAD4#rLQmReDwbNvT1n;0>!0E-lcMJJcBZ)J`wC)X43hgA)drZoH&<;ZaC^$|>)!Sa z1JQqzPn^7>A!2vTvyB5;s+ zuHb0Ao#hsTn~D3WML5cAbTg<7PheRps+3&f!iuhj8#UH>yPt{NA1-ah*;QZY(7KCg z^XA2q4kvSy9h2ZVa5t9A85?|qsR4c!G3sRX{mpvYpFrZUUWTL4!t}IJsl_Dp6mmgQuZ32%&(za{)PGYIOypX+d zj8r3!`Rr*%3(ne~T(qXDlHaC_x9y4L-WzeeQfe*;zGcw2*gg_#R(pd4YPz+Z?bjWA_eYl77QI%TH9DMDnd}_)`UH$?cWlo2hHJk6-oA4p zcPwO-@|!0PBv|5y)4TZ!U2Dt}^tNt!G|HN{QzwVq} zAv%@8`0GoJWSJ+Z&Me$KJ*FgD*hc|lLbY=Wtey)VAG><7Z}5oh_U4E8cysT{AUeb! zzSYhN(A&hE6do2mOMI60`%P5caO-NPTSE}aHimBP{U_!jXY#+s4vxUKh^927;V45 zUe@wd`}mf&5HB=YKsMS;?D44oiIM&Ul&tQ}5Xnqz7q~vhz+0s4*9&-g5e`L!Mn(s@ zB{!Fpoq=ao+EiWn?-Ass`Gy9|6Q?9dG{{4s1H3oM3>%fQE*2&*zUz8SD3FF0j!OzC zGQ$0dz+b6ujHc+)aCP;O7zR0fdkJl(9*m8|p}yPiNol1z;Hc80|HPkLsFDCbs1M60 zh^4xdJTZF}=6sF~IZ#5us(kK*kojorgfQWnliJ+Ixf1BB;$vIKGsI0yxr^vX3h1m+Z!IhUi2wKW9Iw}) zkB7&A&TEBZ8-Y&dZlAyhdkN5me<^3^`{?n z{2b0hrDOdhp3CW5*u%CrtvNP5jV7mkqnc0S1x;v3PTAcj+-2!LN>9jxB>_f7Y=|uM|!B0lUpe3 zm=1CV7Y=VDBFW4tCDPBd4^9n>Gd1wtrBPV2F-7H{2c>4ISQZ*xA#Y&mFA;0Ti7$%) z6r@rdJG}|82%b+2CO?96Jlf}rA_Du%A|mRVBj|O6u)wC7#6!p{`k#gBUS}RM3S@Vf z+_VVJ*N)O3G=Hs9QJwIzE_daes;}MOW#uVng1VZ2KaWfcF5AU8&pXXC66on}voia~QDaf2E4Cx+na?aH?eQA$ zse6JaWjbYGS2$c10lYg3OwH925_T*4w;N3@n%WWTN6xPEv-h9W{B>O0>FxDD)%5#K z)7C@@S=)CU_xRpdR1>u0kg!HzRpswdeT z8g5qJqoP56T`ptB)ZewA3mfcKJ4;?&4wl2nbd7%@?rf+J<6xuuch#?JGA$zo^FTWm zM>j2dQVW!vzG7diguFQjvQafJU8k>w)A5zNc9k!<8izL1+mcJK#Ct!f zQ+$DX>WIJT*3eY-e`SB(j2-BnTL=Rewvm*1{0C; zya+Hu8WY3RzmC22vTsmN6ApxTo$n1q@4fyP_^%y%#ChkCu{%9*?_;AN8+i7NA^l6o zfaB7u%zNT5eUNyuka)2W+pW{Pjrt!LYDnVy;GNp**mp4A|Cn_B1A_?M3h5=h_!y@6 z&!qS-$47u6!1>)R7ZH*-7bqkQW+x1b%|ZOv|2*hjaQ}GJg8(##5PooZ&ms6PZ!RS7 zBqZ;f$v>NDHiU=@r04Pd&W%dU|K(pN)EfjJ3-hV)0QbKxMvAap_AV|ic zz&-MX_lf61nEzb!2#(bVYsDaVB>Npb&bQt%66V6B5JDJFI}mQHzq`eqIQJ&dgZ~qt zCJghpdvDN&uX$Q+c7-PQpmGIQ2yz`Cz8bsQnt^>TC%s|*RqV^bW zHn*zYcc_nxQ0I}bwlTr~XAW`9z^Xg!KWx|!gtgeiLc;bqF#|$p2>aN-h^XKaNPi|GoBt&0D9R!xn3h{$V>jgp5^&j16;e^mx5`&#C~) zn!QV$=ME94F6%qmB?vYxh*yaN;afY|yQu*}z#Ky0&lY#*UDf+QOvv40|ll|uOVD@g&gjlK}mX6?^i&V;Y8HGVO5mG_WT63e;e0}G{y>{?(&jAuE zEM({6AmrU`9ioJGh}eYq3B$lSxbKs;4guBynKV06p0RiN9g-fcj~X69y5=r#Zd9hp z|6_RsVW|qi9}B_H&h`)g76JqZIfUgs3Sg@U|2;twgm@7I8swGdTd^hYtLWwmGHsNQ zU=V@hD!yk3m-XU_pk##DG^J3f-*rF%L52w#xC1HOR`B~=Y(QdlK}tv6@A&Zg``si6 zG5P+>hzi&WL43~$IZ3OQkQNe3ksEa~_FXO9BM{~^5ayDhI~N@+?{21$k*5EEAps5F z7tg>n#3DH=B+LZ49<}AaJMBSCd;gpu;g?6=Gj{*W2mz5AwsWy+{I2dN$Xwt2(+?M6 zn0d@QA#RBB_V6GXU%xrgpuMZ&pQ64)mM{y1P^db7UykB70V)iHB^*TU=a2%M6j7X)UC>BM{Tq_e$bzLqdr`y#7Ke8ELN{IF1In zo+?3VnGc~J2GNw5;rkVb8DcX0XM)V4habdbHw-oUPf!EjoQ4qx`)q#;eOx^Kn7WDa z&k25eO7fW$M(3!b*+a&>2djt)*MltK5gad9NV z=V7M#b=$N~|5EeHKVB>88o7(eQPZdK_=1Oyk_cE0y{Er-|G_XyV*1L&r?Q$#y1G>O zm|N52@c7ut+=jz#WpJ+>~0DpZ}!r@O~ zTKzDM$7Zx>p_!r<>$sPw>ESdRR4pe6{?+n&=$*q~3cfa=nivdb;TPvtbd;F%xu5;K zOk0KBweLr4gb6+5O}s7hQO)>V)Z~Tc;`W#CdHVf?$i!QiTAl539A!~L;>H)q>0ah% zsY>u3=gY@m!RL;yvM)V=z3r-N#R`&6@Tf9{^b+V9uGE^Ez>`y4is_Cplh$~^U1)yZ zks}{XmJa4XI|1Ah^tRbzeJd{ukehvVWrG1%AzrhB0^80}U14JHHc za~z5u_t-Y>$eBD=$1|JJ5&=^G^5cu4Pu@&km&q6J0Gp@*gAAcIHM*D zq3g<$$D%&Eid>bHJw|5f(FaEZpl`EjOCK)(@+){#&*;0_=`H9boG_awr{K0bxtUsP zRujxFB#(Q4uhSyTK@VT0Pe^wxjA`w2{S{|$+Vz5hKN~a96Gn{&wKp}ch;!~@5x^b) zy#{IU$Q3xot&B_2)1CELb{I8bfV%hP3@GdMuk`eA_6UQAC)iA%A2 zcIU~h-wU+-?-~?Unm?1;oD$wvVXM6?Id;B|H!cL#OGwg-%%4RLg&C7G4wm?mU*@0v zaI!4A^RI(QAaTw;DQ_Dfs&<=6vB}(&2=9%NF34_e(m!Y#>f<8!XYWE{`x}vCfUK$~ z8^fPOz27GLBNEFCNa=Mvz1KH&4{~9g>-TRYM6VJ`kRM{gwL^NJe>zdpcJ6Fd0h}t( zzV}S04#fDjjCeXbtE}z)^Rd3``ORlGwGHR0L=KmJeLdiG6h_spa?Pmm23y-2_^9&&cCL^!kcJFQ%%m>}MObzxbOFT z=8N*&j+uDJw1@hfjrTHlPrgCKHE~89 zQ=Eb(4^a@L0w#N2*2_Bx*R|c)(f@3{v11c&>X|nu>-BU75|Vm2#&l+@NQEg=*kNvP zDtAXPF3WmJsh&yGnp<>Gq{d(k2gkbV>du$JS+`_=U9g=Dz(}Y~njYZNCB&{_pA!$} zuGKvzf4y{KY#We`R_3vma4{{ct*z1?Cqh+K?PCtkP&k=ZCKiW%Q(??;FD!8L9 z;?qW-fE`p#U32aCgugb{vBUn`Q@O9FD>9COB8XNJnTQ=G*hnt&?u{_ZS%VV}e^qpzvnYMNup zo`2X&>tIbMC}RTuV8dC|n~Mesey3`3Ulo!n2R{qJ#?|%7lq5ATZ)O-<6iLds6?{~3 z5}}Irv~pM=FS4)I#$-<3{)1x-VlKIt9qUXc@N-1pfX1Ga1-PYZ?7Wk1S=BFUn8Z;oxI z!tqkFW1pASnryLtK?aBoZ@033NwAP2`^2)SBbK0_%-692tyrL?hp_$(6!(s=ILi9-VXk<+!vhW%tB$Kix zM;^&~BqdJMVq%hFqNDX&{$;4j{BYyAvjlye8N)KDWY9;)@X>bu&;S9kZq+_1QwkA| zw#&)$5QW~>vF9RkVuN8L$dZVjoa`HN?Bzut0yqxzJ=_cV(KTh;z5;Es8L^9rcI}P*Yd>f8A<5U?4%>l6`(;9)i9m?LDD)6lcyM_7WM@wON%3 zpPLZ~di%uo?cD@EC(7Q>V?InhHfFVg`jhV{T#O|RjW)25T^M6I_A&Xs`VYnhPxfg& z_q2le0voZ~;#SL7r?)lkJ#*{#q^b4FED`DUq&I;abN!Wde&d=)b3d)X^;%QC)%svh z-kRlU&(5>j3NIP>o5I$9|IL1Al{*!tPGKjlf#vT;^k&|{g?yg@rkKO2X*U03S=8;0 zi-7~v?9PWp+%DuN4O0ix9tVfDMJMGm?%pBaI@w--B|Mz8x4^8cE;l6ivhS! zH3M&t*gAzXM7lEuc1?37@lZ==f}`%M**;pyBU$=VH)OxhSmv$~d8wcUSV&OOWE=Po6U#Y)%*a)7OZN&{q-k1y`Y>u*n<5zDBF= z-`(=_ zN_zq6VKdYu@MJa7)z~@*3*YsJ%x$uW2bOgt1r`@LX4r4`n2%$`{gX~k-n4z?U9&E1 zrb*SQt=xDSY*|)5#)D;Pr(O)8U9;^z@b^N0uteS(dKp9c*_7g`L4R1}h^6|$D9dfn z6dqv@bCY|5)r*N*O4`q6RE&g2B^gEs z4paUV!IjDbnY)gC+1AkP)BC#)6@kp->-NL<(>9wHUUg-?{W`=Ul?2PM?U)kZD zh~EynVb2Gu9G*bY8f z6T=x9CSo|_~E5&Fh=ulMXfvf|BSjo)(SMqA|<&z3PIiB6qc5+8LD z_wVg&mcC?Ot=Sny2ZGCzJnY7keN(RY|1x#b^ZUsJy;EDOaZ9)bnRi8pP4&q%-}Mam z)kL9h5wt%F@*3wP4BW^L-|Se&yCT7S4id#mm&~gUqH`TfNd z-R)ft4F+3#_{)}}+FJYC{|j%8#csdOr?%OvZ)%(FTKvB>r6LWwo-m((#*!ZX3ZoZ0 zX#c)++he#!>-qM4*S_m(qS%zq61_`vd-eb0s%Q1g@Q#CwlO{@s5coqYN6#Q~zf&Bk z6MgBMg3UWirW$zay9#4kn1r2h_$C>w8H-;3>AH8!H3QLFe+ODqAw@uCv zhE&ErO1DeTSkBGxr551(c4gZw!e1SUB9u72T1zXVX|-tB^l%08>>|wK-R%;=eLDSF z;E)hr5cV*9^MQSs$dD@}My9AcPLZmkija4i%1~vT3vVU(Xi4@?*!-4+f1LuqrtrLC zkWy!u-Z6dqmw8$H)qJlL{^F@*=YcaIDo^+I!uT;TZC%bA?HD1-RI%k4P;+}QPp5}Rb zp&d4^g_4H;gRD_-%V|KY#8K9smw)Kz#6$JnVg?y~b>0KV2vk$*(vub(q(n1J8YyUg zsXv_e=H?&+;;-Yo6`bYzV_(H1&+WBcX%ZV)(h2_C!3FQ<-aa&_bd7LDsUV0U{duV* z-m;%&d?{4BtxO|SU{^8cbARpikn`!u&j~k_MqZ`ffqr@QiAiOX)vKeUeFj-#(aeHM zYL-5=IBjCrSURhB&`7M}u~wvoFV5eyZJf8h_>YZfq{C|E=pNX}-CxU5yUy*PUKWm0&QvCs~sXW{r zvi|AX**V4OfDDT54fb1q9~eE2#3z<(+;k{|^y>c#fxga4YB{!cTMeK~=#s?H9b-8-csFF)vBRdakk^?2SWI-SQ8Z_lpNb{_rcc?kCU@* z!@EBB9-Rg|L2)jNgTOPAqTh>bGkJ)afYBr9oin9~s@kT02V=*@IuyReXI$a-!L=UjXT|#4`ELB-Tl%bkftf^y+o2s!~ao2Kw#$7rgyu& ztRR9~s}bxMqY_qW*%74&J%& zi{=Qa8t}6DTMX|I%aNOr($%fUIX28LS&os@tLtdOsmnpFkNx&tNA%Src!_Uw^HPvc zY3dAe)h;Pc;g@Hz3n;$iUVPe07=`OWhp&Ez*hizE_%lS z;c@>H9zI|ecTyY;f*kH!A^*ym`s1$8+AI!YH4v8lM=7TR$*J4T;vit8s2LUecS`v^ z$tm7ud2nD5=$`u@g=WRzEfkA~VgQmn>3^lKLCI^nFn*x1CV1{T5&U#iiyyX00fc$S z4;a_0s^W@QTsLCZc;W2#o{e5JeBX=y(^uDD_4T85^udf^r);riz1UP|4B&uyof;;Ls{f%d1XH=k3hL^gp-b>oIXuZIbDKdTJSD!ht4+U<%; zpGb_MZx+g0sXnnarFwMi{_#MT*;W3^?K+I9m*pFr?_XWjPUVIRc(&HayH4QCw+_7@ z-i(ZhVRalSC=rSDSJK3%@*L-$7_#MVYEc(#y4eRB&EG`UjzL}c^^N-;g?AWX)9wf| zFRJ6MZ=~wXR}H+#V{(RcCCy!{!tmuDp(>cN!?}0&hrNGhoz}FN4%M`L+UIl4Lx`s2 zoRx`dct=^UF{A`0XerWg{*w1WLdn9UvU6k=YSIEBvTui-i!1)jE%sPN1*R@o#2Khc$3~R9{#m5;!+;pZpdYFg$)LT0b14v0p3D z{96Go^%IBGKBhP3d+O@6Zq8izgub=MnW+5=lB3VOSEmukN8MOgyK;Ez2J4K%eT=uz zA^x$WiS1(d#CYANe<(F?MD705;t&(nisqaTkU9M~RBw`Azs+{% z>$#ivExc)E|8s_UF$~1DKjK|GtR|tC-Z-rl`*q zeGl>yEQ(WC4Aq$Q(~juIIs2?t6t#+5-9!74Z)dlC)3iO{OC0tHBjH%z>0jCIBqe?Q zd?$|%HkoBBuukpPdo}kbXM2v5J=I<#@5pbzobjy>MA}PY-Z^QhF5Evcm`Zsb;+hnx z5rWC{Nxjz>=M-CO@)5P|&XQ8JNTXc2s~)OKLAp8aGyhUDytPBvTioa*R#~h(z-EXp z+&X2rY`c=Bt#Qn<+r=5D7eek7aMJA*&Z54GZo4wyp?s3M|8{H^t+CB?uBtcsm1v#% zq=~#+_5%7=S-{)-#!309;`TpY*8dIpoQ#DU98#_52W|G(3Ar}eWr}3o{P@wmKcavy zXz8zkRGvhN*)J^W|mf} zEaneZbnC_ObMf#x7D1EO+`Yiv9=D`}zWpqdr)tm?ni#kKvV_MtGw!HP&!8jK37A>j zG)FtN5ppKxED3ialao7bGU>RN@=dO8SQHnmTrpL)ZFl@Kg+H|p*P3%hAAWOg=1YYr+$D~X+EF3YAL;%alKwED0kG z54c5lbDWWmahxUZgM}q&=!<8bbX3urbaB!8?SDFL=@jmo_UA^Ns60`#&}#qHIZjt~ zGtKa4M%!mT(WjO26HeyI*?grbyMm4|$9qqQ*i9&sD_KD zF$SNq<%YY5qh#vN48D@BH22~Yv8D7K7LF=SeHIf@&ln7zdws>smCHgCo?12A?x+7^ zhSJ5@HGf(?+)I5K^xzszGTzEg{$#wQ{|gtr{Bc|2en*0dmgx&WO(=YjWDOUuULwGc z&%TQx%dRff;KvOYh4#~X1?{a)7-q;b9>*?|iPk&`GJ*!}E#>R{Mv<-<9^-zX<7Tw6 zyMyvNQ`*N{Uqe(__?mO}w%^DLq{{zk97OjVXRqhL`PQ`Szpft*23uar8i-%C!xd)< z#Ch)eSk-*j&b1`DtjY^D|Kphz8F!Ywm;Uff$1kXDBP%Gkv3Rfl2c=4oP^RHZvtAP| zzGhWA1Bslv-sH7B@*9Jkp~d%?N@wT|H_o&>q zR;wEebN4J$dv4m6RX*4yky{LmIXV{FfFZvm1w+*aL%wD-!P)$(7VSq$&(n^`@6lD} zw4U7O%YYun*VeEF>c-LS9{%RWKux32lubvk%;qt=UQTRIYxMPW)Mne#VwXk2g} z52x`6^L5=y@^i**MCynk>I&>39dYa?M)dOPbN)?cWv>P}e)=n`A=_`GVx5i$-jwm= zsL?Vcp_>O)8`oB?nN8ySJH9w$P7-`kXRA|JviVn8cuwYEpHZ<%kbUi@@~mBUJM{*k z9@Xa9vFy-FIlZKB5qVGM_IpKzVplFKyJs)Y+*dx#Rjzl=wA+0r@{HBYRx$J54#)Il zAe)+I+6i<1!;br5A62tAmSyC&n>NyYQzpckOO|_MF!ktL39Ax%= zul;E~#)j(4KX(_k&{@hVcwuJP?33jfFN$wRX(4%<_Q08}_q8~wAzuqM)+tW@E-0aw zI%~hW+-NptMOWSJoqTcwt1Av`V!34XodLEHZ<$^L;0Ln_u9uQdE;cBf zeh6q_XxThGFY<@1MZKp~0U^B@+377Id_s^ZxL!^wz1W}vdgU;*6py^2+k%g|DDvQr4%W=9*r@b>O5{!n3;#^OuDdNgPWanXnkONeX0E4lT^vZ(&^V1I} zuNhk66$vnAqbwyjQ3?RYm1$ZrdCD*6oM~zIa2OWyF7eC(^6S_;;xM&c!h{NA!td{* zAO8eh)1M|rwEK(ATuCyj$V2rw1_%>of6S|(kGKJlma?{(5=X!+KXi%%Ze#$fvt=p*ej-J9_*sbZL zIu9kl^yE&YYiG0spyhlmt~-74@^|I?qi2f=^Z)uSY|&GbadN}AnxUm0MVw4MK0PBq z8qnqK0Xh29PwX}>>=EN^4JK1}BE_JX36r_;Dp+HeIzcxthz}-+$TWZa9VLV@z~Mec zJA+pwFuiO?SKnDv03^^T!Oo}%BkNznigz~d1wEb_37<`c6Gs~L{8B^I0j{Q}Xh&ym z5xW_}jIdq_@^=S3Exr(m-r-g7#x4<%c|(pmA_<&bkk^jQYTAy*x*A^xLxsBh$XE#_b5**`E&o2c;Fc2y`MXMV`q;0Q~G9BE1C*IknUG|&)-)gYJ%*dl63n-=^VL7RX$EDm*z;Ef#mu=z#*x4@^i zBS;g70`B&>ybbsS_|R~H__#kI&gMuLx-e-7aCC;xhT9S>njUGn%!iT#IGUzub?+06 zfQV0z48V1>L?60BeDG65ogC)7V{UFUswsIO}6}LVyQScv<8UHw2w{ zvkw6UfbWo6AsKl=0{Rz*Fm9|a0HIeWB!iSEG!5&+?69L?oL++v?zk0l2i zT8S$}f0%>V%K(~!_6K#5w&)rTV0ek0!=gFvx)qKUbByT1dR|Jz`zvV5TAMov6~s4`e)4F zV0y}F+9mJ5dtV<$ld>*IYk__6J?lGlRqe!9?~I~w*D=^iCp>|H3l$4gRl000XwtFL zfXt2fD9|CRw(UQdbyFVml5Q7iEB5)Q0uJAic80vjfBtO@j>6t)m&*x?M9WcGCWQXT ztzrCiWU<<(Q(xlXh-&w%uJTRSi!`%T2dwYJ1i+_c|^fWQCwF>$Il$Aopl(u z5t>%$IX<}T6UKEA)2~@3_8yPol6vVow=YyDX1^4%iqbJWW1<>Ulb-XFyNx%Q^V4lT z!EdXASIq5-)Y+cOrX6PEf+9mYQS*0p4t+kH$TBNpFx!Fy;NR6NnDjsmYqw&%_5lvO zYT3KY;ZtVrHDUIuecd1m&-_s)?4i#ITB4ldTTXZUiQek$T87CmZu*y1Q8FKUv(?*C z>1^m4o7xFyNQXw)nQWR^$#|j^csJcu(FQf4I;+AAD?!z$n;b*^9Cow5+f>=%Nq$q= zi|%YlzwhER^3_FGsx*%LWrp83cVsN%3BxsGPXce0{5Iwr{@^+Mck!rQt8XO|HLo1d z)V`q2VOzdGH_>*+tdWd_?bb`1B>NlYlC8b1gxh@(Wv_vARIZ=vs=^y(KueBWvsQuw&eh~ZPy#Dc=bRv2|#?e`v%h?*Nmo%UEC zOrorzX9eU%*g5Tu=L{1A$3Bi?mCqSQq0Ez!XEpXq@dA63eVzixuA>DT&sir1vVFqI ztDdutUb2w<%-Cx=xAe<~`_q{}LnKTWSh{B|Ok9FeE9R_DG8{GSo1Vh8 z8?80JbnaY1$z^Om$MTVph(Jtwe^+qo%dPzQ5iYxW)-XGVd`3?~HQrni&v6=P{;+T# zjBx*2Jp4LIO-C(FcR`YpvhrsyW~e+lGbkH1l$N<`yWw5=(rGm#W(+lyt(%eQkoUAZ z&ZoaM7@OCzrP9sqmOYX|vddu)m+Df@Zu;Hsh4kwDH0;rd8;K&>4SB)OO>2V4eWg4e zjO~K>kXbh&-`2^UnBWsGa**N-giZtxBY8YN4>xLn*$KuS+b*ot(Ql@8J<) zBm!ZrKR?}tv<%qe*e5XT8_nEWEGA5OBqia)Fw`efvXaObA>K;dKd;<<_j5LE$HlAt zyUWA&*DlVsQ9E{g1wFL4m{T?BiR>=_W-k%LEQ*$%zu(xj1{em0}bliok!1GE}Mh4WLM#r!O`&|9BClzwbKpBR^-SIPcVR2C-_t6ZqU+bLKRu z1Z^z6SJaS^HGbZZW*AkfO{c23xR}TqIsmUrfJq~2qjx_rj=f|5ikc(UFl&|` zX52A8`E-iOQ9a6QC#qq7jw!3s$z0LcbY;3+ zxs?1qJQ@T~ltL%!# zB&xC`WnDr)KE2mRDS!7YxhbUF**uvKc`zI~Px0BW&HYl<{JV<{&i16*9uv zwu*4Gv;a7W&EeLOvD7U;ptr}M+Cm^Z5($-S8QOt90a=Kxe@Z3opb!6*8A0As(t%Fz zHz4p3i6Cw8Xno}g;@RNPKql%=?{v_5UL1y(eo%_buBY~C*(&@tQ2HD(0HO_n$`0i< zgLTy9x6|TOAQs})+M`R0!`uZyhxLZ*AY|D{x{7;wfP^!T)qwZ)G~NS_G=J(m=l z$%7IwBp?b6@`jA<%Khzydf|A}nbzdR9-T=P<`eipU~E2fN;n;tv6H=77;fFp)5p zA0#2BRs^#|Q2oa&1>h4mEP@+|m}2ITg&_%KgCUm>w&+aaF!n%7$;5nSTU5J<`xfj? zHiHF6XRAoUBUh8K8uGmpJgyD5U zncM5P8_m9YAJXY|c~^nK+)A)uDf3b(;8l|Vz8x092jEYH-w8+4%#yXx_iR-MAVFN* zywUmnshB>~sEstOPsc3MEIa@Sds`5PFN z8?f-oVo9Vh7Mx13?sy(Z*a`*gz5WNZ9PqNyoKO)a zcXiunn|rMY0f#)COh?_`NQ|7~}kOU`=r$gkbI?y?+PYaiDu-CJWaE6_H!~LuGE6 z0Q1E=*8xxetFSOA&<`ZFFu+uMu17m(gT%5G6anlnAc5k}3gZgQz{E(0Af}A}PccQBnE7Q`cE&p^0kR#$VfWMO zLc~c^c@>nfUNIndUhZ_U`~y~=f_2X?Wkf14opha0qvt<05_3AKo|;bpmNj7@4h%Hr zQ=q|mf$S4A*C{CC0yfX|WXol4loNnpJWV^(C_%_k7YtxdJAH&+OPzwm%9%$EY2D5S z*ml#_+PB&-5n$aJ5cWuLP6M-hE5V2bhdU_Yg)VVZK-fUIS(`X9<$hz?ncxhbC%y>Q z7GI(^A(os`&J;i!@GL`+t0rEB^Z8pR|DpctL$ z{JIW(z(5lx(vmb{$w$4Ew4>+nB50duqU$H->WcBR7qQe}B>Yc%=}7@mWQ`?fjI%T7 zbyo@Yk=XLT(g+hBctIVo*RcUiZfAoBRF66c8<*J}nL?T6G7rie3`0banvxoUCCynz z+P1?7DuV)`IAs|?FyXQ_-Lr*B4UmMlM$c9f3o3SW$6YlqKnt9qrH70tui26_&N&E7 zr6mr_nkQD}5-pbnP{N?;G=daD;Hu@Xp6B;a=YSD0M^=W;ctn6TaYGb+#a1S^Z%)GbPC=kw2)SiR_!o>>YT}1dsKUc z-8L-!e?<-@m<`d1n=ErfXYs!7exOTu~ZdSM#|CS9R{|pt_ad;qD1{3!6yg^ zkl0a6cp#cLntgZ)E87VNju+`^u}ox2uwS@!L0TQGhb5r$ZY)swhj3V|Ghy$SAgoAu zm^f*8eELH~IDknOK^oA*ypD4M+ro(O{qDmT0M!$5m~S)y%F^YMAD{uYLV3~a@37;q z=l7)lG`jymUp#7ZmAg7SIjWMiVEu|+uHX-RpRRv?SAh$D#l`fcx;jLb9==0I>pU9x z3!l15QEw`15fF&%ZXofCM;W`Ajvr~roN;AK9meeK(x*3bC80gpO;}>>tA<2UtnE8K zu@ze@^6rbIG_29xY=OM&o9LBESd2dZBWjQ6+pu-Ux{eLT1x^dh55X~{P!N4AUt z{iOc|XLLnxO00?c9XUEB8G9^On=?1Rrp1}HU46>VV0DVN{$W7C_{Fx?E*Z?LZ`7d! z$-UbRe}{`flkY1%a~gWMb`IsE99wi{T`$-wxOljw^bBWFanyVZ* zG$)!g@+e$iDg2LJ(UTOVlyU#dCh<#&F>51*mKE$szqU%})Xc8YPiuK=yCDpd>0&7~ zqUrd6n&64j&E2s;{^xNyD{H~h_@w*t8yzKxadJ^REyv;rq>VbUcyT~!eK4Vs9nrN% zR}Eij0OKp+@K*cX3TnHS`V3onmbD{$HY9SWX~MfWvkQ^tcHceS4^FaYnvq6!()X+8 zb6ivcX)2~e+S<2_3lc$tENpCpn;xqK zoo-4u`B+2-9jQlg+^Zd2!8s2d$cUsN`3I;>ZlX|o_`-|>M(?+uB@z)q_0-k6BomzY zl$kZ3Zr#kt_1oL(DT@vY7RT!oZoAzLTDscutasBq)_k)MX6r_W-7QJ>EkFrpanfVz zpf=%n;5Zz=XwuxaD7Vzn%Q2b$L`^EBW={0DHkiJQ|EcL%+5pFC<)OJwdiL}{rGlf4 zJi~m|tYlwTi4vhWqa#JGy|cFB#MhwUwm~8=h|p$Ns}@+;msOMfqq-lc7hOr_Duc;p8gGTd{RZ1k$uoW*fjmx0fb z%!yoR;5FzdURx)3p~0`*y`d2~paWfo*VjDf7-dq!)hl!~DY`kDYFA+%E5|yTPO%g} zpFGyhecXJzs>NB+nsH}ta5GUT|9(w*1&yJ-j<3{{h|m2^uJzRekw`lik}7kis<$Oo zVr^^VrOEzZ&#n%0m?rm4cvUYLG<-QIioHKR(S|y-pBf85sXz=0A|~x4+#wD}@ptFj zDX6wZFiiS2{D{J;W7Xkfh`7_9-8a_^8c`<)9KGnu2`z&bYx~14QFA6yE$wIHun2r@ z*@nFWF8$sx%oXD1sDJ3|ARp2ZZlZSIY42NmxT9&ty%AX19Z~bCFGj?&S4ZH~*a4_^ z35sQkg)zk1|LbkFz}rrbOg5zT2xTtDzDhA&^QotCwBk4E#Qikqp9t7ZEh~mIH02V( zu!-4DJ++ux?z1QUJ#{EL9H68GKf}QQJSvO~rDXxc`HyP)M@T<>mePwWS}_o2Vt3jIGvuZ8)e>2v1r-a+zerP}{Xi*VK#}(RYrG=Mbd*eB^KXU%l(~G1&7GLQ{a&QY(X>4Zuf^K^gp=X(J?oAYGDMtfdC+#MwB?G$#8Ad zSf=ZpXxDV{65`*TvZ@(*4ON%l-iM*+Yg|F`@BO7A@^%BYf^`S~-DeJUhpI}e3@q%X z(cVU1@{=|Xwb}!RV*zT}mw?U0wGn1a8+jy26Lk(z6mbFpffOjYX17 zBE+oo?}g!W$>x79OqB9J#o0O<9legg`FB+bG(N(qC)^)LL~Y+fwIps+p*XeZ+F>Tc z;-Rhj7UA+|OHu-2p5qH`)$0Sr*Gc9dt|sJ&L%Q}MO#AQZs!kosN7>UTCh51aqt^0H zMwBzr#(cX?z)Sm*s*e+=V_=;n z+5Fe*rR3XT!yjCqyAhs7!(j#+k-58NEaKHrM+pJDM~;N`0P}=*9Ju>TEss1VF4eIE z@U#ghZWiH0nhxC8JHTeZFhK!PuxkP9O$@BJgWa--<|l5@5|5IDR36)MOdQd~A6;2> zz}g4P`+p0bu$KT6M|Tqb`<;v={zZ>XqzVBG=Y`ouGUUn5w=YbHIA#9x1i_!l|NkuT zfMos$xCjPaFT(S)gZP9eGmwdx8Po<&2 z&0pKj(MFi8f426f1S`AtlR~RqB@C7i{aMX~muq69E&B~!*^82D8K!q@*+b+3nB-zd zta_Zmwz0XJG+}3VCOjYgS@y-&EAI?X3?#aRefezEfG8tpZqN;uYCA!BuV|%d}DKP}rczY_$XwWk(@yeWicH^5j8tHZPx0H?;kTm|5n3KuvSgQTIS75k4dT=GZ zWX)8B=~OnJ6{YuOU+GEh)+p9LD50^rrv7C!oo#lDWB@A4N@YRS!IU+XEAFXkiiVew z8Ri_$85Zh1eyOr#k3Kj_pIWJEiCnwk z#@F$Ma+Si7+LkNM)sltT)rI1POA}QcRrdqR?ITvAZQjE|MpL&bf5vSYFV&?isY zOZ7P^sk1Y%srDxF<7J(iBEfCLtkhQ*LpikP{0?G=vmc>VO7HPAP?;vcOPxY@K7uOb z*$+<)n`k zP$(W1$CB(Q2Cs!O^BJ-B@un5-ds=ZQR*hL$b* zlKiy#z7%r@=Ru6>71ccq zk4|2j{_0pKX4LZ-zH{UjVQ<$dMwz)XsFRc~uvS90+|zq}gyvU9Fr^T}tx$^_ELkj~beR4*h03NNStCWPKnrW!)Rb z;$B|uxIru8Z(<^ofi9f09Td;xN`eo%XG1p_5YfL`v0u*aBcfMZo)ic$aHMjl7GsAf zk1L1fJ5<}e>yIn7N8sVHPgGb%<+bp>_Rv^c`|ORxq#?P!s@oVAQ9Bym=x%AxV`*%#%#>U5SO zpYu@nXIAU!4E~YRjlLDgVYSAyQDX{u$$dS@lBtOA%w8UN$?Epv>{zIZxcm&4*I2^5 zt7B~Bh(-_L7S<3v(Gprky7Z}v6-td+^X5!Cwr^f~v+XD$7yG5rrrNBoYy6bA59wog zboK@55N~Duo`quIZ}}U=p|^KBT0Y{EjFQC?)>wQb1BKs3aR*Z}Sr z1t2I}PVqQmfx)~7l`Wu4+g>X;l3q%j7X(fR1GfmQj@r9M7Jqrzly99}pEyczS#O&Cv2h@-Y zfFM24ajH&)*s+SVV6g#|(*mj}TOydGi5+qAW<>!gLLGdqwG@gwAmrqwGs2AmsC|$U zW2A)~Cad`fqe0blZL#4Y7~MqKGFoIvgh|~~`Ve7AD3D4BIgFPRFP}KnkQy#D7=w4GkQcN{$%f*;A1bBl=vol5OtIeE_l|Xu(OSJ<#i1&xE-ApC683o<;6VD_vb_84| zX#j6tHkMxPGq4i0iH=P0Y0emALqu9Xy$+8!>BY(LG2JPni0*nE5wj?8?W0H<_Q!A- zUbWaUd0;dk{Jz3pL2>ybPmYY>^HW9==|}sVNv0m|caokv9Aq8bLuU8k_bIfb`bm`Q z$k&>h#WCmVbiJR}JXONgy|25M;aN!E)ySepzdDL8nUQ$ii95xd*jI})-xe;3S#kde z31UL<>lV)!9(lg%?eP5SWF&IeZe23HwhVppEw@6Pa<>%ZK-y z-UwHDgvPGAP}M?ReE39~wUd20s!pii=~t}rNzRqH_lS)3XBb~Q^qOQY&HHD2VI2kc z-zH``JM)7du9;g*@A1f=R42zT&j_VgXn^z^gWBwX%dNC6=@c|dVETXQkBXlOO-2T7 zE_V37Ym_KaZ9bR2zl)G*kF1WI>(2p-HYb#dLVOH;&01=nC}X7dHY= zRxseE!u0g%NzihlfmC2uN=PHEKh9O4-%tz%H?8>`WP@2K0C@C<8r zs}c3Q*P<^|Kz0PwrHSV*ESFLqA}{eEMaeA&KH^suoO=cXJ#o z_@XVX(o(uAouLunE6;mQd>N>xn<)7#4HodwyXWSxTW6Jj`fh;Y2`RpIRt42xQMOmq z+uj&?js9am;4jwE1H2N&U!ouTJ}t3mQ>-_|^w)dRmm&)!UN#A#AFDUW{vw_wL4Qa8w7q9ZMpI+%#|@e_bE6oJn;Vjs`!z3HFug8ITfGGP zbEv=aIQ614^zV@b^OJQB`s>ggjM400hsjT0$#PdaymsdH+1>7xe;;sXXW?$lSPpH6 z+R&!Mulsy?4+AD@y1u0@hddq+iq|uL8HJsG<6D1YnPluQK8_z$I-X1r>92Ecub96} z{x&&7`>Jqthg?X38$_vQw4dIw{+WlKg4j<^eU20;TyrYlReTx2yjO0NHse*mn;KQ9 zA<4TF=iroM0gX@i)+7^jPjybgs>X}l7ymkt@|0Q%R(PuRL5gy~K0kloU+I&7MScu`(2rBUQ zlB>`$V@Q~n%!I^kir`OY?tK@B%~FKg{u*X|y>>(4El;oU0q#9Q{rqR>&{-1&hbH=K z%}h~oQj>N1Ej;;^;vV`}V%E5ZO>tUA34xTu%MT=O&*@4ZLNx`;_2J4)vEp}=i#G{)q0kZecQdOz*t~~!cmG*<1dG5+(x)!zBn?g4o zKWN%$ggrEEl^D892T>)7HvQm8VsR@ut!-q%dRxT~5q5V-=3{NgURYTFuStl%*hJ++ z7CuX-mw)Y|rYx2)MYoJalOSMlQvwj?Sr+cLbHE5s@+ul2WqCCse9=ml1 z%5Khm!;kHImCJc<8{{LvVA|CWY;(M%mv##&ztQM(JQ1i=k1%may(V+LsZ&ZMY3(lh zIoofTyHxM7u}4}}P_No3RETc0aV)v8q$L7g9k;4RsVkMlXFtBO(_^r5x=f~JyT=n{n5q2RungfGeXBW)O8w2Pz>mSFr5^YE zqJ{;s9~|4O`gbuI-gf-R#DA zBTUH-c$Hqq(Vt%)t)afL)Tn<9oH+h_UH)bigs!?IhWTRlh1iT9K^((hK^@>B@)7#1 z_2&GuR@!;)5fbp7`R7e}&#Y4~zQze?lRhx^XWXe`-yzY&*d3bwpfc8xCeQNmby1gk zFz{E*U(B(UK^zse`Lz`$loGe;uA`5$I2p)oB3VBgI`?v&IhEn;l^TYLeocD3 z@d?k}7o8LHr~0RhJ53wifzPHTZy{}HP9Yjzdq~`QlME`T=xdFiZ+`rRX5c6B37}lN zsou4Ksrd*^5&Fd#PI5=&ujp1pt9~NuV)D{c{31m2tNVTCg2D%15nGw}3Kug>++#6_ zSs0&CyiGX2IWMEoy+G%ejgJLh-clPjQ(rDbF<`A`>Tj7FrMtbnS33oBy)i7JHc|aZ zNrwWe;Iw`wOfFTjHkh!tf4<~}#1t%MsZ`^+_z{_GD)MF(Blvk=i6|YCF^*h@6WC0o zyt#$W>7h8y!h^}Z3unbSF0YhTz-KjrVl+}EdQle~V-sCEn^Guk9GPUJD_50W2TUA^2q@4X!5L|&;zKF)n5eoOok zQ8YQ@FT!*`vfN&MB>AVCo@P2hu0llj8+J*6#hY$Y90k=AzcO(z#0a2vGlPG1+L8|R zKU`e`nE&WXmbQ}NF76va0>`RU2;HujkZ6r^#xD@ntGQ?zWK0}<0OVGNK;QbM3CTN5 zW)p>60TW6A)r?U!7gLv6&;1cfS{YpGD_3nfo0Cymp4jDN7Pn1il*$Kc+yMBP!mwuZ zPxkULwaSwVQ6+A#l;wcJ()9CNgDON4JhT7_l%Q=l+*QBHfGD^h2=;&h!5k1q6Q75~ zHhx0e8_;GAVT|V+B9M^&0C0L9aOy48ZYC6zzV=BOs9a3w7z{eT5h5RuDQC93_1!ptF8;Lhg3x-R@nm(#c~`Cix~0QizuZ?Q z>S6*Q?!5&NH6V=7R6O0kI=U?v0cxCqE{DSHX1%mTU)TiHEbtTB#M;dko)X)xf$6y3 zgLf?$w@Z*R{9_XqfaREg?-y;zkCTG02naRMZyE@h`ae|t1yoew+CB~w3IYOB(x4*J zAR^rYq9BcQ3DOPHF$mHfB1jC~-8~{HHI&ojChobx;H_pK#sxi)uPcRcev z_q8{((RG#pB&o9QP#dEqe*>r;%;t5fP3n``3c|`}bW>=K6)u_~+Ig-0xAOQp!9in8~z3)1c91v802qciCSLpd(rN+e+ zdPT(po}+*Qcvtfh@$%jYCILxM#{vZ7dxd1*-hp|k0610y?D6pSX1m+pIev?FOanO1 zjdE^U#sRLiiU78Np1!a$q-&ztbIh(XKrV(5v94BjkOrKxy>@3ij{9DBDsZpaSZvAX zr6-RI=S8$E_%TLa{b^vG+*Df0t`d>-dnL)%uG}v|aSvp%R4}n~oP%f5AkdOEf_Nx~ zEa~*@`RPjTvW96)h<5j)>z2|-5n<;KQJ5o`2tT}+luK=bE^J8a ziPLim=U4?-?IKH|hLgl?O>xNYV-ZS~{3t1Mish-6k%3wkN(&BX4!MK+=UHw!tzGTU z(Gsg_SVZroEYCIt`ro{}(g5!-H7v3|nZ}Yz>u#gSQRO2#ZYCHJ?R@UbfC-)mWym7m zTktr#mY@!!Iu<-)jNBN(4nnSU!8A1W#7)+ex=_MziOD7dC8 zKn>Iu)xa+5fh!X#tIW`>2j^Z-Rgz?qMLibF`aKL3&cFJ~ zNla+7L8;68-)emJIyfD0{lH==&W*@d0jqtE?%gohbHp7*Og!=P8?iqU?)wKt$j!K$ zGir)6l81;yX_W2%5U1^a^#Xo=!7`wX-Ep{nN!M*#R7@HY5I%S)Rtzru^U6Bx|9( zs8)|G@%6_?^5@Sl5GS~wc;JIF9jAn`zn|=fQ%R^i?P)5>4Bz+5d~+6P%XF>G$kQ!W z7xGa0leUuo^CPOI#xEczo~Xiydo01ACDP*?lP&uIrza#~_jcTO4wFk(H#tKSc)A5B zpCss5I;VV(5hc=3NJL-?|Dry0?$bNuWPB~({x0CUQqH6n@<7fkO^rh!i? zX8kElY*4?U>v8LKRnKYDfFBp;=!mP}TJBd7j6Rm$;ih-TSR8&tnvNyox}n$ATx4e7 zL}G}inG5b|r?l?0abpL+$2dh^aNk0eKbwrc$Jk!jDw(xpF$%hl{&idIhP^GXBo?%P zua_$!>|<{v;e-2B90VWAzrvVZA4s>?AGH-n*G(oda|xI$Mt%^MlK7HSdqh_?sTm+* zn6IEAm{t0P#7pBHOPQ{4oUFh=O;vgHy!PXrZ`cl5L;=MWk5N%%z&SQtj3D5d2_{V# zfBa=c{|~9y`~Hfyrdh{Tl)da%xyMia-17OI!E#=b>%4Z9@4Kb>$cJ2ZYRjB8b+j;B z=^gdlMNafOJj!Z(5jtkgyj}^+&%7d-xtk@OVtYc|#*@{2DKpGDwc-BY|T+?o`Xea8hXew&sKcxk$`DIZ* zRGp7W$W?3KEJbwW6L2#l&~s2`pI{zoA8lT1|9w5lzH*%pmX@s8fIkS8%JGBbKQikl z#||PlTlG$lLJ}ew_0)Id15`MVkziAC32PEtZ)W$v)ji@%ldJIO7fW74_hHTi&J2%` zF}Vw!PmnRQM0#Pl4cIoVZdTe1d4{Rw^EFc^_*L)i1qqNAIM$~r!)9tPW$Xp9kvO>4 zf?WdrIVM?i4m5M?IM#v`uKd71!bkqu?MY9N7Be)z7~;zsd>$e_VP08YoM!?Mhy zxcjTIKNdQEUp1}9Zq&zo-;i46?s7M!f8yB|?3zX>?b(K$F?q4*+*a0bDL98D7~gF( z1D^+)N$!1}S|{>V)nk(1 zJavLE-?i4QNmt1~)PgZ*FGM{-CM1Ycf%_6t#5C+ZFmL9`^A_&+aU>tcxC}xtI}hpW zL?7iXz+!?PuW(7#>4&;^PL;mub0(;MY;u*4^(@>ix-UXECh*sn0m-@mlhtzjQKF z$N8-I{qz0DY^X8BM*qQjFEJwd+3i91esj;v&Bjh=GnwjbG)BTTve*4YMObi~rzXn1 z4Pg}O&uaVzl0@7|)R>67tr9YMlSv_I<>>a$ry$a=rqW3}rI@8Rh1hB6u|mN6HjcyY z%)*+&42DtVHb;$qKe(@vg!!9L_tpfh-EXK=j8`r7}esf0G!1GJPh~R_66Gp`HeJhP8=QkZ+a*26gAkSnCx>$aQpXQ%t zm~@yC%XRu{5M(j;DyceVXXcJ4S4Ea&KI9SX4Iq1mQN-5?t|33x<^FOq0gM7Nnw1FaI_2yTJ(rW_|GB#DXn{{e`2BvO@p)FnaYV00D~EQhOdwr zFjxz~o|X&rj(JMt4QEq8&ko3sL=H3d#FzKn8vpMiy(SUzQzJIoAMOAAjjFAWV!De0 z2dMU-{}VlD4~?lBG-H--&;7rP86Szxt6hgTah zdf)xLQ8dt-(vYs3CeT*o??^ngV`2bl0HQV8a6m6;$MHr_;x@C6kcDfQcj{dh6=XVv z=i4rp?0BZ2gNI%1x92Jt>H+wN?tONy)x;NBpGvGAvdu9inV1ROOuf{$@k_P?)=Ng`aV&KM(D+FGX!Wd&GJa)=EeY$0bai?^ z5B5@ZFV;(eWDHl#-nUHJe}&sn$No3&OQ`Qs)0e33k2)RsHJS;Tk~7Ne<*<>7b>o_O zVHVD`^9*S3pn8d2Q9n(4!2lJU$awz>#nkWn?!mFQWTW#?wiITTk|_~^S`l?<_jyhw z>uk*XGcl|Ya}dE-77X|`$GkbdbG8`S5{mP|u_$kt6eU82z=87EV9{euKw7t^G2JcI z-+zPP+=Fgi@mzEr{;isux%ba^Gv#9}@^uZ~&+#Q+PTYt`Nlj=KUOb&u;%YL&Bm%8Jc6vY%0RI< zWkx8;{4}r5zRp*M_-`!QUb^o7@=UTZ4J3$O2KDTDW8JkZ-MO^s{H9tCkDD|AA(Slqo^^3sK z1C!E5NzFR4>$3_jF~JuQ@s!+~I7X?*GB(0^6|7VIlJu%$_djE$lOeCM>J1ba>;Bm8 zzGMM;RID~*9(a)9zBY^-bpDIENt<1pxyS7G0)9$U(}ux{F*U*1O2(oiCNnFb9wmE+lOi*5doVX~jWP(2~9oQZ(rZV&m`F+Z-ZG`t7qxhW{T3dGr z*Cnehc;DJ$9#N>-UEH$@M6r`jN_HCdumtp;RXmfv{^l*2M{ED6;lL=@uu%xaIlYVh z;L^qxAbSO6f_rCvHJRRUWzjnE+sZzin`oeTx3>jZ^Cqz>-@NZ{Z4`6#eebCoe3fK6 zoI-7&emi-FJ0V4p4!UpOL!k!GFT39nd&aw77tkZC`Lw|@;%!`xA=Qy& zkA0XovxCN@w+UAj>G^l72|C!buiqE>Bm6#NJPVf?V%4EOweOy5nyB&;c~iIANTFh8 zPcXUbJMb?ok`0apFGZf&_taC_X1P;p2*_rr%#t57J=qzPPisS7MSm3S`0mWXyGTKG z8o>(cvm{A-rqx5oo7pq3rgDrmsC#!Hlu=Ey|k;WqU#r=y?Xb3}-1aed-4mnGzPXqg5EIVM@$@?4K2 zy%QJNc{J-~dAWJ}%L1wG)IDN9X5V*)L&ndJ-UYzb*KW8@^f$bSG{fwpMB}^DL$b3R zuNq0PS5)L5VuoNc#WPYH*IVqtB20((ru+KO2-Uh)1my@ZaWMSiQM3@Ph12_z{)%dY zvF9dNdY=dff9oY<*Wrphg}<*Ya634mwu;KADyZ-CPR9O>Ssv#Yd^``Idv2=Kow+Bx zsxfr`Sd*v1!XC}~(T<(|?QLF)s3<8{a!PGe0f;UsL`TX!rwsfreyO7SlI_P=8I%XK zVTrpbEFgWg{)PI>L12$bSpRwW#t?-hzuxk4WPy|mA-^(1{@|0U%gRi?Ta z@V<^?v%hwDtywF}^9hyrov_y4XW&inD5`@JS`vtMPo6h`R+&JLfw*pa(=%%eu zNihuB!tm)oV!Mp`(BJKi%EffbzjoPx(SOzRn>`)RIRX7_0Ns%hE_!ndt$ZSbIoId$ z+XP@{1|H$IPfPy+2%u%r?_Jtem*|ZX@~T@J<)(_>PtT;+_vm+SFn}Ey1?;l_wLel! z=O3`(3T#ieo&PhCt-kI=~Vhl1UE2|5>mprThJ%>q9*t z&0s-#xeBUr+-fJf+hyH864ifds7YaK`=~aOoki%ij24#}u;ZxO%2jAmT)`9dSH~W@qy4WEy}+@us?k z3-LgaQTHM5oL0|?406R|5h_@YB`r9C{|LO5!d(ZSSA?=QmmIRqk>1EG*ub^KBJ8gk zOqm>`#3%$sw^Z?~C0B}tOx=^L6yXH)!(zo}u>n7s2pBWw`7lN(g!gU89o6Ow08M8RzVOG5L!2jxp%8);sfC}7&Re^AB#AwOY!yw!e4$=TjuIo-*S*!M zq+a{Axd$t!@_8mk>MwariEKnjZSSev3-RnExR^>je+&G3K$pG|B%>n` z-W2W6qz&TzsN+X>ATCg^)(dGQ1xS-4AikGdDwJ~;SO89Gic3ge%Ms04`2KPIvcNBMD)DUbW~XXLegA zUGazWkkRom77>if&$(VdAio#MGb}V&AGz;#9Sa^$Ij~(~>7`ta@b@O#J0@!!Q#qr2 z*|FQ{{sMmN%P_!z9mOE|hlf#0Jr+FQ7;3go!{Zg>n|GGymH%wmt!90uWK0KW2gQHb z0g$i0e%CKyt^sB*Xz={Y$lV&+;zkE;xs{DX+R)9vsRprlL zy<@`0F~KuSR(~-o53Va-BNr}5-{`A-mKe$zoU@A{*wGnwpSiGM<(UH;(&jL|e??uXKU6v=ZTbZ(1m+o)HF0XeuPTyEAb4 zSR*nf%!T(lZ`IpQ3R%qm>0U-9z&oUpS!lVwum9SiP`HWakJxE?&j$7W_@{3tiTNff zMd_77$#|}+l+jws(%+|fLX{)0s+0GGdfa>%RKMaJ`LX&Jo?T?ZHhoU?F{}~~rbiWj zM5t~;DOVbeShsXA<|qr6cdY+%jnZ(h@89xxiJR330Lijron+b&E+_a~QBsNW} z8E{wy)_itsE}F=4M7A9>S+?YMgvT?dhxL$+CM_V%m9(W-k{aIf;xMPG7akw} z7tp`w(z zeV!KxU&P*%mAo-+hSYXVCn}4I9s5m2om3 zq{3x^{bmV)F&IE+x}`2dH*cYdgd+T zc!2li6zoVIoRifNya0%w%Fr>CY7aZb2bmJgqgp23 zv7wn-(c&27Mv8F}6YeY{j@88A{G#diy!q+r=d71_s#DmvP$GdKVs*@^*1sQXp;ySS z*X6%%husP-G6fA{_9LI0COc~|KDcl9OI^dcUwtAfF7j0oWoVf|^h2*PP0|DTiK4jm z0^X<4wBBG&zVBG4GAu80(^F__usl0o6CM|art^tod>}p-JV2-!S^uOusQoAL&eX17 zW%JN@Gws^4(_Lr@hpO>Gkj*8Q*}J4j9i~&PtOt7wv9kV;8hWs9;nS)YTMD+Dp*k|n z8}!(+q}5{&?<>(WinNLl3AJK$(V;{_MHXEpwsjEc2p!b?PRcH)$B;-d_pKoP;08Q=dUa0m}9DRye_-9B58*jx@qSvp=ba)RL?BHrA9-ZnC z6^C_jv{zi$9>Hf-3c&SpBA}{;&8vZ_2mMa|*4q!h1Q^|W*xNuoQrqxv1U@@0x;-~7 zT#G~r!{*>_C)JEji}&XpZ~Jw_c+d1p3r#PvPhvABkYEh3C<_eIt#=))L8sxpN_9wm z)g?g%dWLtKqBc5slbX1R7v|12w)-y5ooh!vUDoyTQ@tV8oIT+<_hiRk>uLzTof<6T zcg&?#oI4oC;LPr+V}Hs!M+h*RX0UeU`!avsLq{vj;@lZORY?3cpvU@VYz3vxTj*=} zGQ%`J=?>1#;D6T&wO^((ZaPdt;?!r{zY$Af@VwzXi5-_gG8Tkl23oq-!RYb~34FXn z#z-F_y>kq8T(cW)ZLS85<~7RVqOKRExBy<$jQW?`fml?O0l{1Lg5Xf(L^3 zsMc9kSl)^Xlp-_bTZx0}^mor*`US5tEyc|_P|htp`s@!7Od0rPTUTwN?$*+C?TB|C z>`o;}_R$KNICl!2NcR6yuCL#|Zmp|)EMtTK=NchLs9t6(ruEv* z_i1IY!R1vsc(qC^=68!AKB6(VDml6q6ehrUQ!?V#DfCuC+WTBZJ+K*cFtLXEatrrZ%@jb2BEXCY-K}Yq_Y0-0pZJ@h3 z;p9~3S%W-Qsj4%LJ83mM<9MUFvI%&);^wnlr*Jy9@k=GFUhG_FBe7>|WyDy>*s@mq z2X&GazfPDpeemo!zm`)}HRJDHBmbf3^t<_eU1s?TsUpQV)%pU{M|B~B2g3o(dp!@% zHrlj9a_p+DJ^M|aTAu`6>^-vA&(1Aj!M=6oo{>zJIv3<}d(jT{u@T-wvEzr5ROvq? z0&bq78N$Uxfd2GnRTC!fa=-%yqDWw>x@==X(}q#%!b!h&S%JCl2Nf_Sd8wdBII40N zs{5_E=)1${X%Fgy9+SFszIR#8&=UZ2&e;Eq()AY8_5R)!0`z0~ff4X96Foesmbg&i zw&nxF9wVANMTn!P#ZQ3)+2rml=o{se|7Y}?Jru9XM-l+V@_+tQid>o)-C58#vHb!1 zRs!`N&7~%OBqICd@d_=99_ao9H6_O-}2R*8Kv|Z7%Wat{KCu}yz_{$GHRqQm{HMh zx%0*C6~;#lbUocN8xI??z|1@0HNNJ#-j#&6+*1s2damE4i|{148^`sLpl-{+?}|=Q z2i)I_+-E@uecY!k(r=1R30-NY^$yrE>fR3t_ARe-!eLmTf%j+R(`pal@ZUwjUhfIq zM{G%w!mQ7AXI_jZVkXyelfgS%_HM`p*AYD)E3?zKu7r?OJEe`4zvNGQ9i_E4v-f%o z`wOugyBY_ddcnu!bm*0eY5AtT!*58lFE>HZ_N$bmjKa<+8zde)ubS@in%VkT% zwh!5;BE5}^0wquUC`0hv@E@WCH+p7-jO^(Q*%~~SpOi%-8J#(a=wQy_@(C-X_Q(Ep zk?v9UCuFP*#v!-Vuu5z_z6{gu3cUh@ z)UYy-cEGIn@ysH2-@O>5hP8Zxa{lZV^8G}wz$G3z?0U(!SKzk6y}r7g?oga~NpHmm zq=kMURIFku@blcva|!6am$=|MWhBv>)(NXtzQN50NLvLWXJLeT;j@=#C`aYfEog$n zu&Dm>7e#o%fD73iOAei2cLc2X18+r%k3#*a2Jh6X01=Fk@*A!=kwnzBCMOR@1jdEU zz2}hNcD+PYh{A0D?f5B{lii16DZVV0xQ8#Dhn9^to53ZNTgjL=c{3{38nl8P+eep0 zp1(`x38aXgSwn>vRrF~DApFk1^}_H|(T`hD;)s_A54K!s{ixTiC7Uu-Dwwu8y!=nx%cKPd6sei1C#o?kq@ej zPmhV&aFX9+2du=cpS2?JuQL9{jt4#EdFT4ZC`s#ES(1B58J3m;;}a0pdSUgo&*UY^ zF^I^^sOIMnh4>9-_4IS$;tsFswbwie4!k@`E<*%)q$cb~@@gmK4O~(g`9+t{=8{r> zVAdIzWd^l&CRX{S-Rq1kDpIwUllujE@F`x-oIm1Oe+;HHHf#U05I;)Q63r6ReDxn% z+v?@z2OxhwkB~urLAqGH13!7jMURoxW+)%3&2?ks^RBQGaUp|4dc45#?{{;5qg(Rm zt9`=BN|mMJC;F(Zg!Ir$Ug);3Zj!u3VMkJml`ODmBUtYWN4n2qq~ny z#4d}EmX2R`rx{r8jVH32pPG$OsUyE|m<3>N-Q1w%VZRJm; zrRQ;9(hT)C6l=kP>1NdkeQ~a!nx=-NzUD1kxhH-MemH&4rW`9p4n#SfGT4wAL2vP; z=sO|cHLBCcrj>+OH^_N zNYI_`b|nIVhYzzYL{m7-;1?5ur|J7WGOVG5RQ zJM}r+XS|Mao@Z^7&o8?A=hgg}zs{{8`1)Tt6!i8tqF;-=g?Zt{(0Bg;kiL_0=lY?| zUtiMzftWPo$`r=L!8O#A>`EykqeuGx7LgZbjNB8$EcT5u)Q4Z&#@P+5Y$S|jp= zF6~Jx;jKi=_3KkSf0$O8?OW^f8X;S&e9Rv~E9#g116*4LM36iOo4*A;#kI7@9|pxB zmUAm*D~!IkF;);8yoI`;#y>6)O;%bTUtiZwAL)j#`DBBg9AOpwB*4{Mxsp z+BYS%yn>SpLI3Idubq7xUm-uAY# zly$}nkq7M3VnU0&t7N2P|AE7KNVOi0s3~H<;!|p0 z$TfRZuZ0?3b@uRc(9ca**8Ovhq895w`(*M&>&E)PHLldpke+leMsgp_NgYnF|a&3dAgtd0w*3GttPlIt3Vl>g^?^nZt0Wf0*^{x%RPW+Rfj&V%?5W z`F}tCuU5%w3<`t=-?c18^&Y^PyAuRVz1p@{t1mbFJec79A30&#k62mQZ*x}3lD&rd zA*dW)g5n^?B6FAFTV?6A_czR2aQq`(vwN^B8Dm^&=6=ZvnMEDlc=<)QLsrx^#QS7e zW$Kz^*xt_kQBVqc&yfruzdq4vpT)UW=_ygOAx`Yv4e&nJ_t5paiw107) zxOw?8TLSdcBu%ot-kumR3y#oh(k;2z+^zh<;Kty*`pWrT@B=^fjF94rVO#eITgwLF zzxC!Y?c?tuQC9OmzdsV33!~K|Ti2X6J7x0x@h+{Unbj5Rvao%ZTA)5pu3T&a$-uULsP#HRl;)J17Csd%HT-4AkTV!U1`9 zz4b!|cxM#%n9zdin{=y7w)1*5@NI$#3=}=t5OnW*)~&+W@4qx^J46UAk1y37HExUc zo8}W)k>af-&9>WiE%WtWl=W`N%r5OFf$KxMY4;20_X?#XzmGj1<(5RH%Zqq4wp=4R zZBPu+|29cY6=-?QB}tF%#U~#_Vyl6>_NDECS+NQ;)Ak=>G@UO_*y1C;|FnkTU_pz` z&&YICm!QrSaW|#u?ms(M*tve3#MqdH-p+e*H>fzQ=FLycbx!H8&w`J{siHsLGj)z0 zRly~=RTMvp#~Y9(%26g`n~Z@e)vQy)Dh4+sjO| z5R)R8Ld?}=!5mKL9MM5bs^$~A?}mG1I?HvP;fS-qXh`cUAJbM0+TVI`Uk@_Ue%d++ zwr*e4lQ=a2e_a%?CaaH-@r&PLY&n_#x|jjpc)#nr`-}flFXU}{qCmXcp$vkMssvT7 zL@emctFvvpu^mo$^AyHoYvQ>shu!f*tD#iqI306WU;$T@a;mb_EVIB(MmbcABc0q{ z#h`eb|CbVc=|aKJ@~KLbnnBQKpFa|;gEwdJLTlP=^C^|2OJC*J#`DKIKN6Uo(yuL5 zf)5Ju_Rsy&EvMeD!t2Ko0u=pzBYgO)aKAWRHpEtI3C>ArGsVLGUe(obzIWaZ*hAZ6 z7Bnwv9$hzlKjQe^EO(9B=h;|6XtS`nxA>@dzPZ*ZxnzL|_|VU|R976dk#b5Q#K0Ec zy}Cle(F(i&KZ*p0vvK zia8Wcps~;?+nU2_*;lsc+PQ+sAqACx1?%273N?#*@-dr_tPR?Zl6pj5Tz!&dq;7*s z_30~~MQhQ#7=(v1B#UblJ#+HEo-vy?f(?=5-;4S2r`38Q?KDyham9@5vp%Bj5)m>y zvd?uq{4@Fw_4yb~m>TZphHMs`9`rIgrtgEm96-@3F5U}XiMFK%b38RV$JLb0oE(dgP5wWy?@n{wU*<&EL1u3()cNpNdm5p@jl zr^Y&yk)b$376#TbB|S?oAxSFTCfuGI*;Qp~U#1=7Nx2XLJvs?y7(KZ6m$K*@&r;i} zWy)~LjzGN7c!ASHAXG~*n}qvg-Ee z)adtYWcEomJyzR!w$^x$S2|N%kixdv!B5}4?dvwSV&c_wPnkVvyurC)J@PhR!Y=y+ zA@Vf-c$JJ+#*_jcYF-*6QPynN^6Q|HUlH=wQuMaWEA`N8cq$OG;5g~*>z|Hn(Y$Q4 zXtcQ{?;vd0Epq%v>YIrDoR^tQvuLn>wO6F!9a5>F|44%QICAe~fbf;P_Eub~ z#{S$8DpB-vg|bbYm+@w#6NjaAv7Z}3;mdU75TT%lMTowTO0d3&N(f9u!%+NMaa2Rb zEl4Kxw{616fLMaBwMA=$aB42QVRCc+fo>{Wap-U4L_vsr`Z!x#u>#U*!1{Ke>EcL* z??pZ+tr`_Ix4dQPj&H1QZ*#_OC|TiB$@IQnPxO6##iUw`dOQc0gSN9Z-T_Ec@#l8ldhFK)u?^VFwgDcKiA@^e?+aJ z+*d`&KI>4IsxG)r+F@g;<@#CjMJp_7ME7OCz{4p+WWI!0>IS!uWL_6cW9 zxw#_AA|-7uS4Avc*+Of%#!d!*hxp+nOEOa8 zWrGrw8N$(V`P*5J&~b;3`luCDuB`E4i;bcF8~IoN9uUj$ZCT4$Lz;Ow-}afCKk%Yi zjhj=}i+p>%)Vp)yt#1LNic82h7a0@%qS9otV~WC1t>6>U(l@S0;gIR$^5D4Vk~cn@ zF%n(VRHc8Q^vG3W_;_r5j|} zb^GTx9-h7f@l5d6DPzfaoFpO=0yw-nGX!^@nJ4Cqc*gqd1}>?Gefl^PXY%34hZr}H zLbYy)TsneM4z^D}i5?}fsw&rZnhRP)fPd1sh64-^R*@1%(FGjVJf$N^33 z!e!&oX#QW(A!>nzUw^8t;GPlBS)XmhRpT^`z0})#t;(l&g#k*+2&shgO<@Sq^gaMo zd&3x)VjCv+V(z50&{A4}R8&R?h~Xt#ih&e>CidJvKypgCOZ)Q9LFjz|8gV4!lH}*Y z?9fu=Xkhq29vSN=_D(>;tY5?7Y6R4@Sqn z*97Et!x?bU2cSL3xyy$fIv;XZ7`M)fgo<}yS_|Q^(01Qi@AqUCtq>|B6$$-=c zQNmFCD0FwsqS4L*8LH*v|L_W3;th0$Hh`F*4HJ7eo_C5BXvGRZkxrBlM$*xQJ{D{v%Ql@h3lan+<#5E@360g#Pa1E8nmLd)`7dMF`=^t6a_M;+_iXeCpL(N_5*-6tz*;Ai_YT|df80@%MM~!_(|oi=AP&k za2Nr&)DtCa^~zm8L*+cTrf(WkcgBJY}u#JYi4P-Nti@)yf!($3v znJJ($m9-O9rKxxEOQYkL2Ku`_BP4^88m&l+?p#^`ilB~-)!m}CL&s$Y#07jW(Wk!q zcYrO>aajOyDY?@$9OC?#ZN?L%X+ZaG1CVsbhKVY!L3FS)>;SY`b|Bau^)BH%RROfB z0H9h9s7~Dl+kl4F06=pDpfOL}DLzFjJ_QsPl)ELN^xOKuJeomvCs&?{M zA>%ri683zbO_l{1(Aj=VbLCf7=C`KM*>O1X+Jjn*YaLJb3iaI#J|Q{c_yblYUp<<0 zd+Ce#Oz(JTXHCbzeQkJFn*nrg1y0D1i_2I@0kpsAa*~>wa6BXwUi`&&1No=XBC}it zG4i#{k)obtRu9X(DrWKfZ~vz!XJ;K+e<}+>0rMONWC*fD9IU=Xu@z4S(h~wYXh?i6 zgn9Jz#=RsadByz(#iIVq*^J%5U5^&TRpwIA%}aq(+5ygTk!@YVn2M(Db6L48Pfv3= z>D}yp^_C@>SEM>>jBPt+?9VH+FQ$X$JHb3jhY3_k;bB^AY1Nc%P=)hfgu#hW>9JTv z8f&qT3K7*|3ELH4w`mma$!ucgND~eL&oxpihB4S|lLE98Y|QL4C?9k6exws~7*)mu zTkd+1AKm^k+&+fyRl&k^OyrBLEwu2-I^zbs6EOf%5Hk}+pB_h!xa z80vN85tGx*$!p6-%g8quMomN7Q z@ya^q`2UY(5x@8S31|~{rB|MrJ1UlaJ0>>5+*fmpnvvo%v4ZTz{~TdxZ2iQ&8)-Cq z_CKnngv&xQT|sXHCiqy@*XY)FNZSz9DUeBG5Bs2sx5Abxa=WmvHYldt{V7f=ogpqd zmJFaOz88V?a*>huV4e@B8m!p0P4=UM#XseaaQiD zDOJRdq45jQf&Y%pkPrSRbMGfX@re@veeu1S-3mo>iii^n&W>-pdt`W zE)tiZ;aUUN9;Tp*cTxD9YrcSFM52{{F#4TQlXP)>amjJ%1Cgt~sK}2@dd7-VDBMlT zu=m=_`d`!EKVESS5m*UKmc3SCsn4zr!tB9wTd%|H47j!l8YpHb}3j!Ma^5 z|Lx!lkaxHsGfk;+(j$(!Fp3M(b>jV#`b&7}xr36hbMx!Na)JD}eG)&mWLGsBznzVq zXt)%&U1UfM&kI5Ca?n@?9~GD{RZ5=FdSb&)PtAtCl_)#-UXipVYysHw2 z;@HCc0~MSy<9|3qmAn`rjq3V{gG#;DWW+w_p%}y9p{MStm)M|KY+v%ZxTBnPT4{>; zAousbw|!z{-0Jr)$TC6!=BUw;WrA<{RV?+jvg_BB`lRSsYWwaep%)RlEcMJ6%Booc zBP#!+@La?<$YX8<0GOLLwVwKNe+8{w zUitcw=!$!#o$tIAlY^B~l7`{m$F++AVGaYDbDFIfJr0sgCdn)-53jLf2Ws4`XtSWqL$(Xq_--3Ol2eP*Y~ zJnt6<8@#U2F{>eb#jx3Vt0D4+ZwPB30|1FRDe$&xSn|jX_%ym&6(K+Tpu_77#xwIm zs|=7aLjC@5Wa9N9DD2n%?pMUJbfQrb_Jtxkx(jp!Bn0ZNlWro@(_hSNs5sigWPn8( zYO6d{tGO|xZZQ8paOjNcG}v91bc|OSJ#i2ti;1PR??wXfQm%!lGx2_S0e=mYc}ZG$ zst|_$baBhMEKEBZ&aYgRAk+FV4i@2f6XVtbyb{PfP0=f&6MWzFsMyYzd(2{7((5NE z6Vfc`{$lYa5};Gh4`Z$DBzT?*)TORLp~vaaRO9Jrg*=aBOI!Xg$V|d$#b~XMNNoyf zwog~-O+Tit)t|&FldK$u37CGAZpeM4e+AKS(^`k#rt=)!ayx6D4O>ECR@tikf!2?3YSmvBS=b)eV`95&L5t;Ci0IlbzqcjJ(HKgyUu8 zgmro)D;b2nHbPt8>}T*CkrF*f&!yC+)ot~5dnv+K+q?NevY_SmOz#c{{c6Z;wM zCC@xrg-k}9bwi$}>Xx>%^YqHT8}Y(zY&l_3<=Zq{gyEsHvf^KO<82q+T=mU`a?#Ow zc7Lw7+B<*S<}sH^%Z!URT$tb-k1fM(l<2V~{#xprlb~jn7n7s#&{we|;`>T&*WS{D zYd+YWJpOR`-Gb?qj8vo5m?6iK#(|vz^Dh@Y#>7T*ESo7$B;>3p>g_*|&1(c2QC>Vi zJ*XD(yVe`toN>PSFB5mADi>|D@rsx{*(>`Zs-3%P^7gvoc7VR%Jo_!2-r4^9?yzer zu8oUw?!2Upe-VMpc1to+2@(2?yZf&s!_EH0ZY#6DKkJq#e)~6uInN^Ymdz)7FbvQ+ z+@@9ftQn#83C_AEqmf;!DxXyaUBh4&M=ceVhou49MUkCmI}C>1kWChxWre>*Yce0A zM%ev2iU<+(z~3E$v^EZKepqmeOR~5+cMZOxG;q?|7_9!@%W7^<|iPJhqS6Rl0KK~A_?fGa5Td+d#;uJ(+O zgTQ^-Dz!mc!b;wBNtP8F4F*Js`V6Fl-Zfg7MNcJjkDlkmo9t3_5@h$r)#V{rR?RG;&`;tjR>rFyA<=WJwuNq`dtFOK_7i`97Og>+5 zDCZ|q>K}e6H{9yjRdf7<$J+JmS}_te?yL4A-&~GHz`t?wJm(5pQkqf#+-UuH@4^By zg7PqR9k?~>Nw0|N{dGRXyB`UXC>5P&%^Wn2h_p#+V_$o4=_bxTe(aDpYUqFE zClezv@n7mpK6QlhFPF7bk^cDqF=aIe;h1ym4{kiXeIx$)s&#(}Go91z?9!TS*z+J* z3A+u*!09^AG39rvT(+iqwwN7(`HRuCu+yo7_4O|$x&v%NnVvK>FEpv%rM=6$A4}iY zfBFZ^t>?g=1x&~f30|*7di;kpL)#ez#?=s9nvighCSd4!DM}b}D3=Y$MLhtxG}HrN z#9DTzd5DO7159UB)K*ka7vq8Xor#m*wWc&|zh6b_%7=3%6 zhJhT#3K+mezNQ+X36X4J8(Y%fHhywguDH5XY zNH8;OLbGns{}5m1s3&2D?YyC2v2Omv$ z#7lK`t@z0T)W9c2!b)lc8at(xr)=9QFl{ncPnZZ9lmCBIeRouoOZT;kfJhTT>0kp? zdhY}*ARVQ5DbkySUIipbM?pFSMSAZYL`vwPcL+T~=mA1Y_#U|Ty}$Ljmj4VhbN1Qi zOx8L3ndJEhEMCSVU2YdQ0$S+QD^f4XV7*D#8SWkkfbmcyor#FX2lN^mtHcNMp@0p_ z%}ZBaGXR?0FX^^ddn!O<4Ym50{76W507QN%jRPRRTcs_hqZ4++L134u(Y+~=V_pvM znN8ouW9qUseR@kk;`#gyfE>9iayrTYG|~8Ux7*JyLlf{H8YXf93D$WSu$H;v3ihQO z7$@Dfyp;9`kZx+TAX%L!0P6Hx0!kD+lmJBa|AQDC0AXuCyHq(T|BGQFot4MCMs;9A zXytz!ss}*wmVEyc)Gjy7#-~fayYsK2_CKEwq}v4cQ~-4q3aG2QO3NaE3YLRMI?{1g z2^ev?N*)RzA$T4S?pAtO0%8KlKF=io<0W5x(rqMr13->IO|JO5%n=KGI*Ty(e^s@A z6R(d>2~hg)yi0hm z10a?i4R3%H)cx;FagYgc+}$w+u)O{+9v)nSr81!XQfVD_GQg|rlUxDpk?q9ym zSoGYx56D;`$N%z;B>?hhj|-5BxywhLQuZ#BND+@zvAsb9pdj=riM{~YrgPs)=lT2x zAUPDb1UBLPQNWnT!@*Le#(zb&|D6YJ0y?8RJK?}YZXKJ2t(O%oKL9wZ0TAkrhJS@N zAWD}JE`2muYS73Ige2iABv;2SOSA)OJ0V;Qg?`+xlFP+L8{zas|3#8i=#^XjC-yf54fP8>I9d4f239 zng0c0lEG^7$$USsYs%HGm!F5F07~6PeSk&b|5!A!%`ge~r~$ljEE{!-+Pl)`@ad|< z+*1JHTH>VosH;!N89dUN_J&J&J0%UmnRJz~QPOR0d)oj=gu_*i>;u`kNg}X$XXiiR z?J{9EZwqWv?Qj7;r~TiV7?W<}+H1ZP`+ENiUIQL!Ntk;LV7I`HPAJvFhXXjs>C$Zu zd)q+LA?))O{}IO>GfbjAF#n2gMvgZ5i3SzGOxplR(~_?;0I?(u;@a5#J{vIJ$YkZA z+*op{=UL>*bX(+J-!>C$jTeV!KD`Rw+o8(2!?X=1#z7Bh4*$A!r zmTqpfEt-c?Im*ic&1Bnb;&OxdqxY;DYrO>!pVcK=s>GWwbS=HX`bCY!Bx|+%nCnc( z=+F8;dFyjNU&<;vptljnsks*JBh}OiWFD!7O(^)P?%?c) z9PkDgZ0ujeZ}huVWF_08>BkN?XQ;j1e2Ojo{evuXW;ds3F||V6o)Na>Oo@LvcRXkH zxl$MPTnp?C1-C(R*nB-%YNXf%jgJE9b*LCf``oWc+LiKW8N&F*ruE|^I|Ly6_#qIA z-$PAhqO_vOl7I(wNYmlH^weFq4%Mz=hB(FfGjlb-%C}i3};-t zBJ7@q0Fs}7bmv+)Km;Ix9gHH?mf&p8mZiWYp%oQ&;EoWp{O}1vQP@&^?hAw6nclzZ z5GWhEk$>1iMS8mx;gc<#Gp&~k1|hw6k{{&Rtg>z@l;n@^&5c5w`N zM9uh<$h#O%@asR43-5G~&ppkp*~7+J!c^H*p*XCG#BB{Zgc&`#sVXA#Zu`rSz82^b zQw;CxI>L5m@-Lhtz;(3fGYQjnNoAi1tH-i`6{sE`EkCIxLTO) z%mv4AH9tOZu_^Co@GFeuwq(XnszoNX@un*Pt4w!#B_G6lOLJg8l>>h(^d|4(!+hcZ zlRr(#wJdn9{P!J=|AFL#G9(j^)X^;7U2mzHOMSuCj9Zg6>@|LsCe=CWLzvHLSL_N? zX`I!xv0@$kar!J?CoC2a8hY`=3_T4Ln?9yJp2d64`gNSUzS?6h`5pfNm#pVB;Wqlq zPzXyqAX~UJ+FE-?zP3MVlG>O32%MYd-DNAgT2K_6d0J^7i99tjMoudOB3^Uenaqdb zzWa`~)gI>!S+WKBM`y4j!vk@steK{K_g&^oG0#`+XLGnmieCxvK82Cb$EdE4IMxX* zzFBW|gw2q=0=LwsF^>wlcaKz@*-w=5H-;4RX0UMvofOTd#rXjr8W;1KwR=0#?Usp+ zGZ<4#JlwxZ-ibU*K}HOu8j(j7&hgor+g}*TPXzfOCW`g2zC}=>CxjwQ?WM8j1_3nA zzCWC}C<{g!G<)ZqC+J00OLF7I4^h6wTmB~~2j7sTrfnJvBPGG&-O`m68wxg%;S88V zL>A~G&kNa@-?-TV_h1;1fQ}(!;uJ2`R)v#N_s?GNw@^HJ_5u>awJSXIwJJL5t&Vzc zL)EONy%o>~k!F|Jr3z-cEf>yL*;*KCHPpqA;9r36^dMs`Cxu>cE(+fjmou&J<%*9S zTd^Ipk%i?nX{E9%Q8k*~RS4^HWIaB?<@@wh5L4?xsU!GdWn!q)lp77lQ6{2w{(rxP zOHK`h+qyWt2-~un3NByKa5(CkHsr#O97(VgR>7G0{v04SeN*V?d3IPwSPoffjC1yN z*!p-<9C>b2tB-JBzU8h2;?8D)QnMlhTO6kk&Gy-)kl>2%ZR>Ji94BXszt_5G%fkkn zQ^=-qR?Bx^<9a9>hkVlGIlp{tq=%Cedi`@CZU-9DtffhdlsM@Zl^@7?-MA%EBO*M7 zJoB4+j9DTAJEwA^s(V`wgV=Q@ko=*>KE^+z$JiKr2X2Ivh`+9Hu&T>*N;uj{ut|MB zqgefOBfq+~L2vB7y{%Fc$pXT#A2H5~5kZ0|$Zl`?x4l`yFbsHA=sPUGN=ZOky8bB z%M?;+K~L8T4YyU8F&!21k5#O5d%3~s)3wG-moxWRm~lktoDVz_-MZz){yqcS?!pvi zF~{F(hPKH}@lqzGyc875qrUjFXy(H@C|ziaf@&b4Fu(@ zdpwusyu8uu+%aGAXS?@LXNFThc#)d&520oM=_J-1MW+*vK!K}m5RgB-e-*b>gZ4sg z;PqZKxa=k@L!Gc1(t{W+u4^&8JUESM9Vecwx}fGgb6}XjcOnl`ENH*@C=T6klOsFo z$7z?{^4$_7=&|(4X$8NJYG~t+om&dk zOJRD9da|%5QsDyfP32<Aa8F$_r%9qi?G#oxsz+K{ykn3Jk3JiZn5nr z41YyzFxRLDPwqV@E{g#LQNAy5*ESz(K$n+nu_TsE4mMbO;2vfWEu2t$Y0rB`z7{$3*N7y64ay%TE(h<6z*io#kY%a6F^mu{(M@?D?~J z)gYN2c@=)R5UoYJkR)tUMT6n*?{foT-`s1mXUV3FzFomb>_vG-qxLQ;lpjf=LeJ>Y zuOy^Xsv1-0rlYZ2SRK`r?E>AIxA(?g@8BnuX5DZ@5+O>-dylZNTcsHr8 z5nQ`v-o^BhkSu2J9OEvI#sG1IyGU~?w;bN^3{pD%jZ!!usxWe~LEe-R(Y zFSN1_zb_oN5U8k64HRm63H76T`UXx#^gYdrI0T~47t+f@v>c;zv4iwI==EIdbM^zT z_3?upSz{-RZ5tP(LX!QhSSoQ^->O>p<`g2)IfLYh>!ly?%|_1H+1Vq-lcM5ByrN5a zDsUy(FZ{cV(@bk3>ooCB(t`GHmT9tI-r9IcAn*w?c?gUg1l0^kCKOm0^@v$Oj%y{e)c;o5kfkFKG7Zff*+k<#sFS!4b z`etw+1mSqD{p7hrAj2E?`#sH#mnJkMA(RVjJU3K6$G(3O5jey{paLm#x}ADEr&WZ8 z925*~y?M+m!pQpPNg|2*0!iZSkp(3Y;_R2tQc01&NsdKRiTO?LrxGID@YM(^Ovnsw zffpau(r^VRnlSZ+;H#0DO%5xK_nE-q9qEoGtt8Q$;T3an?tCb7A@XTkEfEy^_mIjb z5<^rl#s{(dn@v*YysA+#_ec_t%hRMEg7*))E3ysWYsYSFQRx?}BL~K-jmV+eL5)uuSZ#GOI(5%z zdB1ImC(%(CxMh#4l8Traoxc!+2^kzVa5l)Pke4(+>$mZreSGn}eIkKY3@YHyVAU_5 zF(kd*&^cI_vG|equYm!97_;^ZI;#(9;3=K7=wKatB&C)^=e_9cb@xApPQtTz>k%|A2QbJ(!F>QJXNHdA+=CuRwDY@V0a3~{ABJ-#ONJ7kx_hXndNXP5SzP%4CbLGk!@GbD1C)Q33b zJ-=N*Q7LJ48`&gL!+YV)fTmLN<{+#ZQGVvNn-7V;J;Zb7?%QTagb) zB7YDG1S?q)=sHp5N<~A~25;!SV7DTLNt0Cu7<`e|w<3i7`4~e8dnr{JLN-VtCUc$Y zh2`HHhCgoA%eeo&F8PD{03wwEE@3_hxqc@&fag}&kDCN-cW7?6y%$Nn1`42XdX#$e zu?bZKgx85LB3OMvLxi-m)#LctISK3Ui{I-!6s)c0i8m~NYa|j_{?X-OR9LhVA+-1n zUo=Q0s#uT^Vdnb8mq-d;c#%j<-P++qWN;h(UW((Bb1ey12>XIU?d@WS?fZuY#4Vpt z3tqL?9X`JRgMr{kdVmp_WkV_l^n6 zEOEhm!C68~8{Y1N!hjHI3`0=RfMo)R2P=0>DM1k3M!EZ>FgRzy+JoTvg02S{js)ID zy!)sysO7iuB8vyDQGoWM<1Sqznd9%2U3U*++;zt`&?4h8^*Q}`TLYkGlQaJ&IKCql z7`;e&OeGa`@f*2|??YtVI#Ei|9N=g|X$Rpfy;t4pHhEp#gnAPqSxSA>>R!tHT!xx7 zi8h15v`|x?0q;D!zac^l%iP;T>$7x+v*>KxTTgs~ts-J`Nn-$QK0r7wX-pq!+mFi8 zPtp1{2`vy?fL|Aykh()U2_-@Kx{`LF*=*y`ogFnuo4(N0>;4o!LoAUDc1-_yP*JFMv`2P{ zSvK~5E%0M;Ke&sgGG_BTY>NuatPd!PB@+CpQqHyVkI)$`xkt+=aZxYn%=j6?6zSfq z*G0cf4$cAxa;OTEH_o(0VF^CfT$$}UV-0!U{Lqwu-yZ^cztzhYnOnbA3?~SDYe!*~ zLUV?bb34q}#D1^wSP|}BKUWARh}Kbm@a$Qh?(9j)@)SXCUeLhXWfWz~1XTfca32)( z_I>hxA?wydwc_@qfG0W>oA;?U*nrlyO|tc8h8k#UplpdcD3pR(6{hNEk6^G|r@5}a zsKlzF{hA|#w@0Z3qH5OpHG(3^?q%7?L-BD-?PYiX^OlE+b8chO@?@YNjerV?xetwM z3tOTE^Bde^YEAtsf;FTZ7GT9KC>4 z>v4I8as7sO(__gW z&;}#Nar%Mg@k*neuFw<7N15n`PeXYOkx@n3bIqMQ#@1RyXW}tfroh408%; zwvcjBve_@MsFJN}CE^k@J66Sf75d-gAB|{=?k3WQ7cEmGm;*t#d(!x`Sy|W#hpjsW zqg-pBCYzr*>36@iY(CX9#v2e)Qa0OPqi5p6ElYZ`JY%znqiOIOOTb$Z*22~DiasE< zIeE(lAMP;Rd@v(|MfSOk{Ok@WJB9?fu=P&&TFnj^v#%*BM!Ox`ymT4KR(7MMPm#Px zksD}sbE)i(`=IJ>G;-YPU7`{`AG2qGP&<$|uvdkFKI+@=X0=kq7;&2U%nH>XKH;p# z*%tD{f)9K8eea7_(u*HgelgdNMcC+lLdU!=FK>^izXt$6{~?bI6~L4NxSu0Dfxd6UCVIRz$k zA9o%B;F8%$W!W(Ft99nm%aBgSNG#Zdz-rTxS<=byON$Xhx1_58U6EaGSctG6-9g0 zix~VI+@(M*;z7{&M!)@s>g4eXy=9L|YKyDPn76HG{_?W$UUVh4j8?De_oki*8<@?k zHc^Wo<Ls|k)IeWuqLMPChhFYo`(v%Y-87S=8V#$Crola7+}J6^}H zN%ahLEV9hmE14cv=Ct4z=@H$Dhc^uB)t2_vZ)B_RXW4J6N2P0jDdPxdPOy7g>SpK@ zD(D*J%f4b{_QZ>WBS_!uWC8=0lWs|-{3WfX&2 zAJz$pLe_ip=RZ_Au9sOy6vWo9iott+klclppZ{Hii>84%ETkOkkkLmKHQ&)I^?JEx z{85RG&udQ8)kjXF_<2i`a~c)eZhdi7(PC$pTij$!F{yUk-+PMtzQD#D5+O5S_O$HH z0B@cRNm%)-uN9**qIOAU_o_A>i#!9qa^TLRcf4td_b016@mD$g3?^k?q?Qh}gnt*% z+lnB@A3qo#N`r8q#WW*z1|HGtw&Uk8yKS{>N6) z-W%h|P;B?}$5GB4#;(hMbk^d_@HorBWiYcUkcGiuxL z#>)6*ma4Lug65(3Gn}q87^U4CwK7xNDgow?vE_2boLl9@yK}p4rl^V^?UUQ<&p)*P zWQdBcDz|@~u$;OsmWM6cI}91GlIbpKnx4Rwq@wj~yj9fH&!+u4*b}DVV;ni10y}4; ze!gU%qh6N_X@IxfM<0dcVWR{`{b2RE*gC8FFN}lkz6E8WRVAMJzN^Lc)6n0IpX;4V z9Q9Nu>IF){pOqy*J$v5+pyn7 z)zWm&R>cq&wA^5~gjI`mC2f@4s~bM#tqDuDPIs2w$nT$ex`rKG)=$DJ;YfU;ap2KU zVZHPuxwQ{W^-vwI0qAJ41wZ22dVGx7@Fo6ypx(w?s;3_m?36QyR4-QI)9 zMw2!amvg7d1)D!&4aD*QH&4AJ;&XBex?E@pPiPF8qQs@^=k!{ zy8bNOu3<4L#opT-!JD|u;E(lTjjwUf?@C$o%qzh=Ta3`puJ-$TnryY2>ZH%OB7ayV z6`w<@xgw8l9MyK6fV0^7KRj;oQ$X-!Xg=yF2Cw?nV+}oC&)ic{Ve%QQUggG>kvR*5 zdN6l5SJs6w03JUv95bY@Vvbr%F7b~ppHg6ZAS6|?1G~jO2 z=3p@^2xZ=GYhbvG62_fOR_1=!=;Rxb0kMz3iAE0^7pi0V6wIM54wie#z1ti@TDbS& z!5!@AVZ|Qe&KV(hg&EV65(!+844#GX^QkFtm_2B7(M}FtwX0+NZup+Od=l`hMoJOp zgZx3+taXy$9SRo%x!)RUzJB3mJb$mh;y3I&0OINB<>qkj418O|vY%J0IQa#^Q*GY| zq%J%35Wg7OkLhXZe##^6TQ)r=AX`P$P|_oQzNqy_6?evU^UL2sDZbHPJi)9HfVvs! zdLlOEeL>Fl!)Fq8@kAQV}4cbkc!`oz~ zUWD-KQ|X-rhV0%wWBbEf^S}9oD>m&V%A5#MQYNk>S~`q@sKTSxiNf;*FVyiujh2xU z_h&p9q5jSNps&(r?~&55_X27(97HZ;WJE64I}lVnRYnmiV?Q@UnwvGL_idp{SgRxo zo_j71f5o4q(fjIjDJAgu-bLetBR}Mng2p1v_EXNEYO{uHutj~C+qLFEMUe(&*Hjjt z=uSC|3m19o8dq-o zm?S5s(rZT{%2M&cT*;!K>*=P)nlcaj`+hN#Q{`lwI3}{Q08AZBy&7fZqUqq(_PP$m zr-d|9zd+Qrz2tm+IHDTesIk-8HI`TKsN-3*>=9d0SRv^=O`V97*RPVX@=o4{oUy>1 zi0Ckvnq*looybSNg%MrX3Id993U5p59;;;57-2-ao@4MgI*hc9h*>cT7yXA158n8uXBo^uPA1vkKpT~fgEIJB35$6 zR~6ODkkx8loZU!T9Ti1lYJ4ig{kPLacsy@?`mR4Nv3^L@VnZHV%^P(v4Ll7DwYRAk z8qm!AuFT|O-`(+J@1-l>&4RsOEPur)FO+nhM|Gog2X=ISuoG4q=#A#@r>nqeg?)j$ ziFOO)j2-kP4VjZVCz)Ht&y3vt^}6SmM(n(2QfEz1xS1;a2G_mm;(gA;q0?>)SYtA) zKoBmy*miXPpt0Pv<=tfI6V7Bhn(!l&43u^`M{bg31as|X<=-qQRN!~M(*T`WijdCf zn~9cz?TgXB1<$v|u}6XpbdizGr*GcdKiy!!*j4`ke{*3dFA_Q)et-KZTn~85O)aId z`kJ4@^z9QlB$z4DV!(1tHfH1LqL=0$S2Ko@*A@>8bye!=@E^6h7rxo$s`lWTsAIbG z3#x`D1o7VD8!K2^RfZSfVzv)txR3^Gj9HLZhi~8L8d_enE6qlt0ETYR~T^un>ss} zgKb<+z*smimWC6s^M_Rsbi_mEE^!M3xEs!`Cy&UlARdTs19pz?0Cr|_Ai@%ta3+Z_ zhk%Z&1qOu_`J(}+vrL#p0LyZKWg~yO>c-70%k#Xzj!1F9X$;`BXWA7LXRQDce!y4@ zI>%%LedV-9AV7q|<-D_z-K~nNvA?X-Ll2@mFw`%w3Q)TAqf09f7i?nKq|jw-!~Ac zanat@mK|g73m*D~6}|MDE)(?a9I~Vxu`FMMQyb4+G4(RPKqg&diC8}gSh7K1hzBjQ zIgQAi99DymJy4YdFsoy&k4=NGe6ubl@ErcaJz9cPZ9}?W#Uy4MfSd*pE#OawtC+na z`p!5l+bR(N4Z5w`W?6GJPYnTV=L>B2QcCcA`f3`9c8~-u;L`*K_`bCMl>=4)0Xf%! z5YgfUe4Hz;jFK9X?h8C=R%;0Wkur1dUpn>UD*##+SSk$oo{73zdaHqMg$T$OL{|>P z_Mgo*fz5b<%|b5H7N74hOEvyumlg0L8HhMy(wIrA@y`{O?8`AAPK<4#y zE8UlN^8mYjS6T2Q39xGc*tI+bzMA~{pJ{c#G@!|C0SMgbzv6uHDd3shrT?qyZTSDp z0?>7{HmhAc^{1OpTffTDA;4x7Fb0}|LJs+_0&NAbnIj57mID%H=iODD^=j!>tbv^O z0|N{T_Fut`2bStx!u^v2d3I%>@{btCdB5@!NEQG@>EMc|Dgf^|fVXBpXAw$yWkRHL z>;atja_lH)aqHvN;uXL|H=rV1&;TYrhF#Ha52RNmFa`n+K~1N}<@t*VceQz!ZU6*v z=6KZU+toA*z*P!h1Po-!nd(1Ipa3U00VgN`Um4aeeSIkoOxpr7#}TF4Mjvz)9+7bX zNZBP2H1K8NfGZ#jNShd>2(VrBVa{R|?jLZM1V0AAi9qR2uW&du0&Xn>pCNEyrK9AP z(Jpr&^;LoMxrY;I)LXeS>V0YSavG3e-v_QXb8!;v8VLZ>^$3_YJ9I^66hNlfC7G=` z5T7f`#Q>A*uK>#B{OOE_)oJIOp&EA9Pl2`S!0Gg316Z0KzgqhOFcA#+Kz%&2o51kT zVj$G(mxu5Nh!mxFmHdMpK=M-qZixe7H3eTys|V6+T>+Rz4W%o;a^a~nu>Yl1ZNRG4 z#+3`g!2WXpZ`?otPfD*Cp99W=3mXvU6cDNZxT;}eBsuT_ED40`-~lk&03wBFUFkK0 zBY;&^z^XR@&MqHV>|09U=>_B^Vk8IhM3rtc_!zlhdE`Y=bNQ**Bw=j@bJMtfc&w}M zP*}1>_5(zH5cy_lhqMFae~R$QG2xr`3QR8Z`ZjXX_(6BbYBb#v$9tB4s097c>xxVy z;Cw(*WFp>86WxzDqSWjfr>F1lILD%H2WNy;f+tovtmD;R`_gU4h&RZD%r*`l%^v2# zUk%86L24d5z_(x$9h>wOZ|#I~eU*L5AvlKDnd&guf$lE@Z4DXs4EwvMg*LVmWn;Jv z55F5bpQ0@NMs*RPy1cjC3pGjj;P}k@4dG?(pd^+dmnS=ZdgmXFQ9Wm;`b{;M3VSVi z{~0O&EHiE3MYa1A6XGMP4lbJ%*a2^*Z9w@hQ2;&O&gnQF+xXfv?Z>=C7ZxQ} zg$St)5YcQRe+yGp_DZvu_g-rRtL;dNr@0FEtxNHT;4@)MGqN%1_pIncJTdArq%9a7 zHR=|O2(_}p>zK4H2&vh3H+1v$e%mjqu0l7KQbb{_3rZds^}1qKJ-J*c!9bVSf{)Gb z&`j`8hMor>BYJ`Nv7P6h%&FendWpB`CH2$GK14{p#B4o$J0sP4R-rFx?U`kdnd?=H zdt@vxCcvziSaaum?d2)tdcWW98?m^vN$)r*yTz52se$T9T$wxLiq+k{(?I863{TeH zpyM8|=X1$TM<2U`u!DzfDeq!WA_*g-tBgR8r-WD6%Hh~T+P&Ed*lCl zT9LJmtq^R(v%|ft&fg5*;LbiD7KEX1$2o5#r>LgIQWovI%qMBG9SSCFv8$p>Lp_Iq z_FC}k>gZjREoZaff-v(xJ?_b%>(YWdXw}C#IxS^&r_gQl=6st{@z3z|Qu~umq@8Wk zaXCM>oqoWjXgt+fkU6ebyezbCRAP1CX#y66>91qf=+D#oQ02#$%d*zMU~D+bygY-q zGb%IC`4i)yHlSrn3C{L3+9;{tvnN7v-)uQ#^92-xacD8;fcKl96aMd!=EE?k_z@H_ zE)&H{v16nb#ROx$mC+)+J*x$h# zNvfqwwX?2Ww!0JlmOi(m9oI(HoWZaGM@>S}0*Rq)wh%A%TT zn(T!mI1738l_zBZF&7RN^1owY3L43=R%~k_jENBtJCZoH3wkCI$-S`v~nco$?#wgFpX?~Uvi0~mX zn`@Q^qXRT>tlf259lH)HvYkh{y!?Lqd{H#Yrk>VDuZ;v$J-^0pY*=V0<=DLCEYs3j z(kBS56YayS<5BT5v2I~lyJS!3Wvt(_%Zsw#L`&h<$ItKWPN{dZ^zRs~Pp7A~a7Fo* zXY0h5JjUz)nfjO`g=Ew8yn+9em)2JE!uMg(2!HkGvT22iL~{GGbTcKX%JlUdCq-wv z5ytlqZp=gS1|t~9oelYjX9R3ni>=3=qms2OBnM#5BbL0zh)DQ{4%&?69}H2Mpc`>7 zs~u}#aPQFp&7Cm9aCf6K<-J-@+c0B?%AsmZ#7TZFIWBzuO+NDubE5ZhuL#$aphLK3UaJ~)pZk{xDEuyVb#Y!cipi6n0{Qz z);Oy}01V2WCbgWKdYjvTMi^VbZN_rgq%B6XXa%LP?m%_4qK z&4+lTAuyAqCMmrpM1MUzeWMN8=aq9XlXKqP=%528akJG4@6G0u-nSiI(P@SAW^66< zX6}FH|ClzxRJ3-=Yy*su#Bx=gn8~t~ZTS1R$Kdl(ZN+o_;r)WO>_BG_{sA~6WGVX) z4123|QG+1Q@>N%tr23=NbzN}mn~k)`NyBh~&NfxDh>vK|ooSB=L;O0P{?WuJbXm*|`v=|0B;Jc$eLj` zcGz^=b%oA-Z%@K=n*w70AH`5t&_p5Of*VpdR;R!Kt6v-u8E2#?P_9ufIuV=e?~z|^vd(J+agG%Vi^ZZ3c~EJ|Q+%#I z7G#yK6C>W+RQ?Pf!+#5?H`sl{%%pJ6YVfK`Bx{hs@U3NukQd342DTf`{~^Ww!yQob8!4;W9;=;(MrvhqlY!!JTFWh2 z!nXAw>`I@NmB>WQ;!)KvJkOmNvBXS)#J;h(n%40zgAb0fm=6LSl-$MpTtD#X^`Dq+ z$O@Wo$P11NL0msid_UHy@+_t+>XP_d|1JFGa>$1HEiI&h;$YQdoM`6C-`0slvL_D! z<$(@^66+k1!Jy)b=METp-_0Acoi#MD6Rh*clww2h`5xAT`8w{{h?+sF~rrSr7MivL@mPf#zHkD8ko(rp!N`o7DSg)5Orx6WF!7lJ)puoL+W@!c^8$XP{G?-GR!n9JC1o%SlYyIYY=1_3;vd_;0 zT8k_I9AZn}tpUlL+d2*?0qz~&{u<6;!{` zz<);PUtD4L9X^W;wrNJ#*=J?DbyIl?`gNWP_;{Ue66E9{gZE#c)P+L^I>{l80 z=M1U7Pw{3^mIdXNgp|rwL`APJb2;{c0=K1So*aBfOAKBW+Qk74GBAG7M&V9-ALzrDr4aLhWs#W9kt$FD0m!=E+Q0%!+SSQJar{O+yzKv*%2C@42+jo;Uef@ zBh3k$kTlX?dl{Cs-0$^HuPT@&N+(u{Hp5lKj&fL$T@(=_lxc{6mKE`~T7SiEroZOM zQ?3vUH2P5E!M2PDGdeh_^v zxKnS5W$g!B*TUogf>jky^?|!+0BTC5mbUtGB6SV3>nRCl5yo~#yR8S0-RGf>%khj! z{O@Uwu0QE5SUAedv& zPq@0T@}@6q?ODRGv0=aR`}x*0E#0ID?t2;q<$A_aRc*h8RF z%wdq%c6H6d=Js0Fl7sxF{^jYiu)Q97^+1fjEcx`UG8bOUA%B{ytIEjisl3Uf?I}yi zHf5tt%i6Ld{#hNsnL;dyaJ3sOpVrEQEUxA-CQ-Oweg0QfeKH-au@+kj%knzb2zgP& zXf8b$tqQEEN@p9J@XnC%z4cFHpgD(~5HGyA4Um;p=q(A5wUjB?0`vJPI3)&4?i^x& z{R7w2gnd=>oV~zP<6g~rt5DS3>_Bzw5u@YG>WKK1n??gywV{F9%A~jVM(|v$1?)7D4vH}BI**q2bm#~R^&FR2)jhjx+D`05i7YkGijoV->)n!3IfXU? z_}^rT7~i-XPS~)a4z;kheHj;)KG6@|drVaBiH=HeS54<7mpKv5jD6hKFAz%rdb1); z#vs0J>E6P>pL5e<_tnGg>A4v6E^G3}S)Hic`CVVvp2-bs8m3u;82VMVa^r!#lS9cp z${B<}npO^^>d;!WX0Uzk5}cAZy-63EPUW52^th zh27m3%i9LmGIO`9TN>)_y!aIJ`I<8^{f&osQP7HYw~cB$!VZswub-qN`qJCVSy7wvkNg;Y zMK0>3T2A0e{NVD6iqMmxBYI`OHQUZ4J;aKo^~a|!Eo9TY(`5xN8O-FI;|BZ!QNmw^ zzTRO@Os1iAtm2JiWhLJf9$q0b`bt$1(al*wVyn-j*v8fnl-`?|OT-Xsbk|jI%yDLW zj8A{5ceVWmZ7fyvcaQsz6OkQdwgq@|w&y4u05iXNP6hRR^wrxZ7As9lV#g{DR5(SNgl=SK_=zgedcl z%qRSbX5GFWQGbtTl~2EKDi57ixW7uUD+vb$w!W1tpgA)||1TFdW2D=u_=q9u09;OMO{8(1D_#XQ@PcR45$r(2IG z#^jCj12_JV80&-DS=FB~qGifD361YS7wOU=7PGTYpM?Nc)$)!qg@DhA>AF3Nl$xP4Z2;z0fzZ6EKN zPAS=pG~zA2R<>J#(iZKW`)K_4JYRNoZ&?!d-U<0`;t&j%8+-NlbZ%{rCO-esOx@WA5GZeBGY zOaF!$$*GE8qQgFs@Ex~|{zPWPngHj_tk9afIG4Lh%`(_h9uc2y>*G~}hbZFl$;>1~ z^Wr>xGRGj1n)*UAVtQh-%djVv*0A=Pq_7>DDr>m{$&?3?-(_umDyP8?PI;Nx#mUvr z>b8?oWBtJ#UH%ufE*q+9G|Xh}93zH5ar{*B?V(SKsinL_O?HwDzT{;6enaY8?oA#XI1fV$V~BL}XiXPf#Twn=^!!TJB(7j|4k%C4_k~tm8i;v4`aEL|WOu znc9yxv>+t0cFV$oQVL=qKZaxPwjBYLd7b#XWA5zmqMakuW^RG>}82vt=|uA zuKDIJcE$A5EbY!7Kh*c$Bdl?WU2c6Z_s&U*wnOcQBoOYmbIT?+PW$-@5p?BACw>p{ zA=Je+8ut91pB6TIP1q)QCyzq||M;uIxbRN7#XPy7$^e^UD4zYJmzk_$4CFhs;beNk z;#_0AI~6@E)}!zUASVl7+WivSwuf=_x)7*a9@gC2NkUx=RTgBe9G!uuH>G#D=?b^v z-&B&PDw52fg?m|g@34F6XMLMt-ICEpa5;H9eT(1W-fMmo#f@Bh@!d(Ay1#GTP=X(} zqEctKSEq^IvMvBOVJKIN9FgC9>G+y3RQ;0toBcT}jx2sEhYz*G zFjQr#o9x5I4D0vgd3#CX>J`@}ld8v70@g$QAJb>H=g)%P5XIyI*xFeNnUq0r zN;bsVyN5zeGkp<+^?X|Y#~>eA`s*aUAG)-a^zJ?O33XE5VL`6XC9F%lv~#uJKDOU` zT>q^Xrz^m8M)gNgGAhx1C&vb52=IYur(-t#dwHLqR8a#b-z|zK-5WdqjW=YVqDMXu zU@l`35H1r^BkAd-B+HAn7T{ns72seh{n`>0OeMo;*hfi@jQE=0J^pnmDn=lmMZ7w& zDnP==n3*6 z_;5>mHuP8{g_nEkbA{m=s^48Z&NOK)$^p2PHEx~i<3rCmJ8u#9ell5;=FaY9(8IjR zWZnAup^F(GwVL904$#TA^b_l^-xQYR>V=!CT}>mpEsw+Nj_PO9cAl9W!dI1aBu6^HT;s>3@Q6DD%W>d>76q=VU{Y9 zc1wAm%x32By1D|K;mm*Zyw_LLbLu-Re!;*|W|M)#_qFHPBKyxK%F){6tqj$dzE5_t zH_S8>YRlIDb%ltzq}HA5b3|vk^;BnW{9cb0f5ZxoN&ThuXL(zbmkj$!{p+ z-hPLwI5mqqPOQ*d?vq;gjCQ|F^lTH!wl*G;pSe3ex-I`h%OjF}jjK}7;c-PY-sP7q-K`-13qlSt!UCoxt;u8d1}kR5{esHb1x8}(EEzVzG!4qp6YiN;L`J6P*;g<7ORmNm4XolF!u?X5AgSM1-k=DQS8NVnHS~lT z!}cnusyRb09Iz{s4nkgM!M<*f>sPWP}&w|yk3CiN-&#dhv@?@v3W|@ zU&Q?YJJoZy@gVo&r5G1hJ4?_3%>?dk`@v?@+%Q#ua@^|qy&D8Ew(XP>q<6bT06W<1 z31-uXFhjk#+vt&d09Y(6ckjP90{Cd!g6g!_Egf(f2n9x@{e|I5*9r7FL~8(ulTOn% z8Hcr_$?Qx6dcGR*MG827_zE-h`xqS7wv*uS%2!Of{d}HMkQW~_+PLp-NDA%kJ_eE? zMza}egzX$&l6Gbud{s~a8z08_hg`5P7bK3;QA@=b*$>+UUaTZP^nF3=Xgcj~h!Ndg zK|pml5G%zv_`&pSe-Gngq#2dKYBG!OiRXsd zyT(7%h3Y~Tmd8*m9jKgEW(_XC2zP}o%_oD56Ur2s zS@Od4017*`CxFk9Ve%oW9jJ$NjRaP>n7W?_Vy&>C673cO@U+ICrcL+i9+pifP#o!s zG1l4C{fGkNQbvr~#v_;tNE;nUt|~_7hAow7PjxvkmQ5&72ttk-dB`nefm{QTa&t9x zN9SV{40i~u^i_ufHYihDD~9sgh^nr;S{kSfrD-ZZ`^H{b40kXbo zP{xj>G;N&t*x0)D4J$+EF>JN`4HxNH`9WqIJTQ9T)%-l=WIDEHiOLBiR=g6yP-3}2 z4=h)XnXnR60*oXE@vu_CI&Vhh*;}0exKxD#DJ-y=T8Pg`@b&`EBb-dNr?91g(hgiW z+{I*SHf$-t0m}xB&xr6o?*(j*rtX(3*oc@=p?a%d06)RSTsk@3*~O!Ybzu;@A%WQL zYEa9L!8C2oFl;Tq=^Ivsz5!{4*b~@9U<2?o{viiU4Ulqa+R9_F$@lGh%>lavj{USJ z0P7Ma#JyZHzQ}km+YxT2?x+onUcP35*dDh}K>jzTwl^4GjlY{wK7jdwfjD!NlV7po zSL2Ppd-nnN@#^@0(PL%dz6*3h5`l9B50GW8fr&_N34#BLE+~5O?y#kv8LV4YR2(b1 zVEXGVb(UDWW4I`7sW?`}w1KCiVN2;U7+c%!_VH;$Wk7}Fi3w<6SC@=<<1gMpAVkC< zL?%Yqf#y_!y>1{a2d{+!yUxLXO40;!^zkV{HG!>dbCmSk6c{H1bptt&L||Pi0y+3C zhFLZ=bOVCYn`AZB)#n4 zBP3^K^?TcA%VuP7<4M?5Vt_`{YVI4~f}#*}4b7Llv}KR$^8U1pw)HV^>FZQI_RLya zePz0Arex-}`JTnbboxqVBr4=yL_~0o^~iCu}Lzm z2bTJDXeArzCGIeA>KhRh4O`AwLAXCcO3=qGzz_Ha;Rmm)wh*tIawL%PPMt^cQkvhm z*(+c&W(L_=bqhO)*A|uw6lgE;U}Shtlk8}7CM~^`*#*K~N5X>5a(3zw+sck;T#tw; zy@v@m_s8mw_#@$L+dm#uVaZ@<@U z_E=1!5E3qE$uQaBe5`U$#Ka)-w9n#ndx!!Cu@gRR5$q;BS#NZ=7Zi-5S@WUVj<}kA z8rr9IcCv=2id;nwRXz*Pl}cU~nSs3s$M{z<0pGn@>q||oBe=eb861Q!g-|t)>p`gY zauR5z}qr5 zv#L84VdBAFp?e3~FMAQ~{gW48-HV897`6JDwDy(FO>g_xPBFs*=k@w(()gJT`|QUm zI@Fx@K0`wp-KGg$ydBU@zRs}-o;&IS=)tM*0+=B**Z!q>Kj+ag&z)@5M&}PcQ!}us z)B|sMpHhWM`1j3Vm?~FD0QFHv2jmdCAwLUW$)SL;PTEHJmck$JFC1H3rzS>LZPULnTGx+a@a>Dg3HmL{2O<-ysvotJb5Q3agb_f@~;zrH;Auf~na^gJ$%*2sgDCQWlN1 zl_L$vN}Q}a_4M$pW`-te)9lf+k-))XiOdfMyWawwZH73+3r|y8zp2UW{tl=Z5)v#` z3C?abRM&Jj7)bl9&y>b>cKJp3&Z(xM<_D`2H+)Gt$>PQ6r5uW#f+VdEj&Yqq`kMRx z#?@r+3B1aTmWCy6=?A{OzreS$(|TRTo>Ncs?4)(cUyNd2{hh9cF7o7u7pDquex7jC zM$t1EcRuw;$OzqP4h13SmFGw*j!md6!H(W>!u4W`aGDRgOUq^!ISs789wi%|z51Qf zdf%-4j#hlCT220rZh(zOnH1tlsT9tW-Hq!_Jl;mlmIH-ew7@?nLb@!0*9@}v)6Ep`hh#92 zdy5{od=3plml+L}gyKUDpH>?=ObFrg&_PUEE|7U&!RgJEJnyV=gfES($m$%I;L+>q*oI7#D<-ML9f|3jsY@C16{xLYP8 zk1AI%C4Z23V1s6XVUxxn$7UrpYPmH*aqK=D3_iia$13oxE)#9}CzWz%#P3}DFsbGu zn7TN+-)Lr-OIcXtkl5#cZEx+LLnTU3 zVt@pAolVa^VllFNyMQ@U}O4S>=1a~0B!1H2i)8OOl5S_aKK=9JP!tv1!uINK1= zf0zflu*N?X(wE*KivVJWj7J&UU@(X~XvxLGO@SKDdCF0DsoM*D;`UVZG4N%KW)T6~ zadQ6&Jizz-r!Nn-Sk{!kd zkl@v3XUVzU-JQC;L3|)X;pfnPmUlY9gOE{swnAs;spJRKF6#UM+*!v-wy7WLbNjxy zh@DsQBq;Vbno{lnrz#r_6hXmiJ!l=fSI(>G5Qqs`hPF^nT8dDnz1@8LD+)daEV7}c zGMFIu#|V1N;S-p%dj1tav@v@EF$3I|qU0@Y@Bn<(VW7pz`7iL`v8$LBT__!|-+y#y zq6mh1-3q~@a`1@X))4QrzR-OD3dM6qEwnjd>mV~zGrL(``{MtGyO~QgH~=q!j9_##EpmpqU~F~Grvu!mu8Yd~)(_{@a2A&8N|dbf1ny&Yf+PUZAaTj-&W zJQ)2FoIY#r+%yF^^#oX$uu_ka$s&ha6xafC=11OPq0I|R0KuFR6Zl|3`W2v8gEyOx z8@OOvz$!ybz05yzZ5w{HQ-c|fuZ)B&LHCgbXu$rF;*qW50!N#)J=3)rO$b(!5~+;6sL@mRvE~4}muf7$pgC zJj?)~BrfR5f<=H30S$K>-r@WsV3Qw>3^lyGl_pR*-Z;}+2-EZU`2NhliV~ByHuJd4 z(rISc02rP;N4cPX1K6SI103cC7J^O+Bj{lK28E5<-*c$!Fe1fwJmdV8lwjGRQuYT%e&%XbaZjg5#qSWhet! zE*zXOsWt&i!@Phu7iIoOLV~_MQA<9x!Z40-5f#iZI>Dhdd*tBxUWqY145 z{s3WeAh5ySh;9ZF-#^{^kN*=`FEE3=R_e9DER6uO)WaQZ{cpyN(}AdBZv+S>ymD4P zVu|fPX@!6(FNxd(Ia;v5=xBlv{F~SPXXQgBhR}zN#S|p)YRsUf|CCmV*!r@w6dwpcLSic>(YW$!ye;7v}KxuuGsK#vvS> zf5qei|LGEV^+htlPJwU{j5=px2TCVy8874-m=4u$?}d3kfR!-A->f^%0T0-!Clr`4 zM2Kk;(Q(V*VS6Tfi(oo>UH!k7$r|1uFzRC!LF&rvJ8*uCp=ndJxQRK$diM>#gCc># zR643PEQKfjp&?WscziTZX&}yx@rF!0kmryal)&DfZaz*dMJMnEk{nn?QN#aB>?xM? zF7P>$9OQ#SR3L>Ea~iJG31mdNf}MlM$<%!b+oj8x7Wf$F0GfG@T5^G#*mG{Z*`s&| zH{gwlP~dtFwnsr9pHc7a1&YB9obUJAF^BmNiDnxQVQs)HFJXZcYJ zpHN_>A+}l2$R(qSJO!E9+wA6J!I*ViMbNl1s|%b?U}~Gfwqh9ihIOGn7*UuVM^Xti zlWeF^-POgwEC#tiQ=D~RyaJbuAu=A=fB?-Zb2Ur`H!P?WR%S8Hs`e;j6Aa~1B>{Rx z7qm6!hQgLM>oA56!vtb`tDAtRJeszo+gKO-1&$LOz5$Z2T;KtQV*JVMQ4IVVa9Thp za6%5-b?}Qf{^X4ZLQ4GMJ>@?w6Ye%?WIQM$VsN&%{)kaX`JSqGRSeUTnu}W6$LM=) zOoiK1{T$4YNE#VYxLnv{4V}O{$hSa{maxFrzd(KVfF8$dcGyFZFR*>>Lo+5hWt$OX3e9f7jaj5kj7E&!1Vs^u4dL-PMx9Pb}tV?GgYT;pAU zkt8NSfNc^namiGA%YoQwVFFyF1KKmC1WYTspc5tD8ugG`m>Ae?LuI|9%L%$O%bok$ z*ft{N|N0wI8CU>AX+|a6>lO=E=vP94aT3^mjb$I70yGn-lLI!*Fkx~`YfL5Ehrl#c zM#2f^vF=g!efZnE3z)zFnm<3Vn1s@Xsi;Ob>c@AvIZu|>;?Obi{$W9QKE-`_Rm=GH$8c~@X zrak~oSIlyX?g0*3P_cGb13~VeF{{67CrzMd-)lCQCooe~4p-8Q_|!uP*ltI)wdz#? zildRHtqju$CN>w=f!+f~MG&GSsP3=&ugcPQ^4@VKL z%Lin{!f~{9;uEwCLs@@%<8>-dz(0DJPK)XD&O$J;&gN|+#3Typwf7`Cs)K(k1@Q`01ej>M{-|O9JL2tm zF5=cFRSlVmh!@^7@8g2~JzyOs66O}5KlMV6P5ay zW)O%zXKGA2-grF7c_li*tNT=r@G$xQ&@{)4g?&~a@#V>VY&`~`t1%?7O(9N?daP@(rgXI9n4)+1kdpmvz)BU*!lXecuLM^ zyHJ2jb!2Q#)Yt?nCHrdY#C}m-#)4hvK`Mpy+%!a-`;Dzxl$IdT-g-i@#`)^d7W#0< z0kwMa7=4(1)L8b=G(*c?yQ!PO@CbH!#x3Nr+QNP5$N9`JaZw>>w@Ib%XwZF7e}S`s z0}8b||0cKhd+$BFBcI)st+Fi-#kV9mu^cZtRS^y=rgE0O_HTm%u>^*Cy3;if`Ci*C zDw2b&(02vv=dU`AWx!1me9nNiDNijomYq#>GWGd+bSB^HxmFwR)+2OBS z&r?O?&XPMphSczd4GUob8Pjg`M~7v$2caHdveeWIkO|%B}4s~&B@4!hHniF+Bp@c7heoZx>zx) z_S?v#>)y=jGuKWQQ|Y*cWVKB477?%K+o#^=7@^3jIHM@NSdTwKuVqRv^^dpU&KmW`)vc}ab@R-4{Rg#cJlQTb%!Gn& z2j`Fz8k&S6`YAovxj~WBFz8Yr$EFapm{iIc-rV4}JeJfqL^dGx5iQHhwk72G6BSmN zo{785;3MPoLh6x-TtAasz5@I9a0Xnc3Syrtwet7eu!GXzKZPgVG}0H03Ny%qm~OA< zKC8`econ`O#JUdRzBTlp5yyl*gy_zd|5Tfs|H=$K3|nosUMV?IYv87priTfEjn_i0Pe90k@$9Cb^~rgE_m ztwC(6SOpV8l?Ij#2J{{~la0wjL{MRQWt$N0pAN4iH-T|69^83-w8a6@Hu{p!wpF5^ zOxN`v2oF0PTc`Zb6$r4J1XzvfbNVb)9uFgEbftu78Bl>Mfe=$CY%BB0ltaTm8BG5- zgA9WQ?-mUE$=w@e%bpiU37qze7SBZ@b$XLDzT2(HZ&v7+SBj&bImH$BMyGJDMRA_7 zDhB&o)pu7L3!!CZI0FT4vmPPkGXLC)w%Ie$sg@lza_+j^a=2R$Q~E}SsLD+}d=7C+ z>L$jNf6gR>dfLH6DKW~bJ-%>ZccOLNWz-nOCJR}~J z#dA;=6rd~u{w)hBP!??1vPjqRCGu%1IdN`7Dywu8qFX_V;eFb^M927zDY=Fqi4;|k zaOzkZ6lCQK#MlYj9;HP=jJMYVQ8KWIxnW*R9qFj~N{+hLM21uhnf)V8{>d_#to zl&(Tl$$AKUWQxbxLSjq1aeXg-x;2(%ESneG4xH}jl@2p7``)UfQXFJB>SpL4sI(Y+ z!t3a(J^7`{!RG+oNw~Dj{&;oa?R^fpmHb>V*Na(P3JYgAnux1*M&}Jws`~M}a`iQN z-+P!jSN3p&6<^s=T+TZ?Q7;|zp$kQi(Vf~?eaWD|+ec`3AKht^s(MUwUNC-zcLF}5 zV>OU!qh4{5u`T2&@}_BobHc$EP5adHYJ(=43H7W;#Drc%?WuK@1mjQ;6gG{jHE!y@ zU7G<*Ou;t6hx{O!3HQK^R6}=84!!YrdI5{19RU-O`8PzikhA_SR0edBnHQ-nQD^Rvr1N&!I7WM&+R?`Uh zjVi0Kq7WO_@ev z_Jv^~X1QaU80Yqe2X;&UEKrvCoBy>l5;dmRR9d(-h?TE!vAd%B^QZi30=G8f@;wLJ3Twf?`>L#+Z`6t>cWQ=9 z&MWGj$|vefYwrd+i5CuS2Hzw%mSwH;6x&iJk|?@Vf&c%d1qc2`8<;J3pGE#k$Pj7F zHpx-Fdn{oJ=nfboHE&!yY!@=1Xti!A2J$ z-$QHtmbeoae64=*e7&)0Elp=#!*}7k<*G+d4!=Lqz~6ao)v0B6x~b}7YB7vE`hkCAZwpQe}YmX4pzJdykh`FLTh@%ko3 zthCeanPJ9HYt5j>PrHh^!+$Qt=$mR>wMP^nd@RG|d4ua_*y7E$EkMIlrMv-V11oR} zZFdqWecj32Vafu*m%w}i8$kn`R;TcQf={*P4P_f7BRxyK&dR=i{Yp~$nw5)y8#(xN zT~&o^)Fitkv96Ob!~5VpxL|`sZ)sR&-?aHt!GGWpaQi5mGmY_EO9cZhLN8b^!($1r z^{BPJwTZ#VUWq^U zVoeSh2$yMwT*3^~QjQFUj?xgRkITjC#o`4?Zk|kWAM@{eT`y&@jM(mS3g_Kc3TKg~ zYW6vy9>ygMf2MG0Hy(9W+y3R|agLo>rdWp&{!zTR%smFoLRCNYe~|KX;X88TAAI#>F?mP+N0@wpmA-X&zsH3?vsKEReI}4PlhNaI zfw)Js4H+L9<=2bFl{@HZ3JBffts_%O+NSU?#$2*j`VWLBPl}LE7?Uy)t z|KQiP?pvaaFp>jt4cq8ORxefWK{UI~Gl{VX=V0ZQD&{5v)AVggiXzH<1KZDiw2{o)&j;jN5g;%WzN~O5~_tbGoLv@J%M%E1B3{jrmZ0)}FWTWtsS5 z-Eiw!^Y~~c^2y7A39|g>V?y0EBlO8X8G1vmcgoTHoC$QSSQRyCH%hkXNVP%+5z(nt z*LDB&m8?3f++JTPY-+5?-a&Eq*{2vC*fO|nOoU3fxQftE3A+DUdlZT*dxLZ+>lamT zH&XWF`~E*JXt&5ezQ;$kXgguad%}5YGbMT-s~A3c(^LkWs)ql5^}dh0Sf`hJo2!uN zudQO88|NY6*-+XGCc|)s{_CbcDhBNz5eXCb|b9j>wMv8IJpfTsp-Y1{WsJH60 z;dEl=z>t_W`&96i+Vh0KcDig~S_#i_KJW#@L5-q8^Ck5Zr?fr>=-|d{v zp0AfsxHe%#7yuEpA|_Z7*HhalO1!QCX2Zlk`@7XJ>NV-vl@G7iKU{MqZk2q7{=`lM z^F9j0x)|g_glCN41HKR^{rPaVZ`?);Ob*|mC2HFv0VXpDcC>7q;0(=I=%=@lOiSDW zmN5kicO#D(Q&b->UQe^|&~LSAqc*zVY}5UgzL4l0%f9EK-U8ytT|9?oIZ53Mrs~z$ zzD-xdx-Xi>d;22q(rcmZ^~`l61_jnAS{5}JQ9H+vxo8~vxQP97C z$@6qt<8+@0Yy8~&S)5yp^T=cVs=hvRVhSg=zs=0u@K26m&~|g&ws21qk@rBC%Xe6f zdF+cfPQe9_JbbKiCs}Z|8Eu9sxA||Kc3#(uh)=7VVieB5V?2{?eWxSgLcfo(V%@=> zX%jJbCOR8x=sE(Cc%+Y{tI!>XsnZ0*p3xO%Eep|e9^5e}-CLOZOC#Uuv(vq7lpV!t z5yfGwpZ<}C$jNQx1w;~uPrYki*_stg`Uy1OQn^TeTns^XQchQXwjpubkPZ-QNJ=(Uav2h>ng;{r-{bwI5b4$U+!%%#`4?W>_YJI zOMqz?MXS3oW%~%SkM<{OLiWy{uLYO3|q;zB2Ubi!yCpBIEqve7~fsFGe9z(h_LHd`2zH8ipoRiSu z&}*o8FF&iXL*@xBWjq$Lc`7>1Ji={=_fCVF=C~ME48Cxg6x;4ck6h~E@|1oE47f4T2GpnS;@6O2ht@if4g(( zEpX_@Xc!`1`zqQrj`&Ja5w`ERz{O`Ucmyo@cp~EW+k1*{|j=G%^(I0c#EwfCD(s_K#u4X8a^x77GbHKDr z>;1Jscc15mIoD@OsZiy_Uc+lLzV)2qVdvihdMMopK0Gs#X7Yg=vz;m2ne%FrHD;D> z(jmG3tCu^TP2;tLgVpDPvCso%a&jp+U*1J9vrONYm8D9F3uWXEBia=SAM&*oFs+_^l=4HntN!xRNc^jlO7?N z$}fu-r_19mhhwlv`ru4>tszVARMUv7;zwHP>u{=`p_d}2%~$Z!NT{eT*RK~JZhsBv zPxxV{D;>R4{)nu+O59s`z75Xon)w{`)Mq*PfhmfY4LLCjtnVJ zwS!7`DFusxy{|}V_kuv)oFuPRnuJ{b!~2G;u}bG`pvKr?e;HTI;t1 zalzW9vqnnp{MhWCA>7}d-n7Tyx{%-@4XK8$Ug}$Hr&|pmgOEzvBf^}Ro%#Uzo!^G z5zG{8$TI)4Us{*FCmrRpoy*0|HrztzsK zI$;*+)K_27_R~%E&%!5ieN}345^?9K4GT4XsG4;jMbgSRDH+?OoKW_^5b@(P{2uZk z)rWCaxr%>ZvC;5H!>{u`YY7%` z-I2ZXLr7b-=QQDm_bn8jfuh0E8-n>veLXbXJDh4axa=6G$wW$yhNYPqp$RiMvX_L9 z^b+0wy|UKy>%yd^vtbMV*hY4les|6R)*o?&So1_!X7UluId*Cfydfw2db4K1mdT7X z^aetMW6SiqUUc4&gU$NT(8;>uL+5MqPF#+~;#p+6^lE{*>pudEM%;_aa0tT!9IQWE z^UqY4-!#nhFjib6?bbilesY@Fu<#@Oo677HM9x;j*N`U!6Iq8r2PF`&g+iN#I(OHCr}4*z8NI~+cs-@hQ+>t$pgH!v8P1uC+Pnn zxg9?;f4hG5+U6O6CQ|!85@9%sqRo=e8o{S}_}rU5WA<&)En4kS5-k6++x`RDr)wDW zpdyMF|M9cWXHPk2i13GI45Gl3R8-Z)kN+6x^SQ2P{cLyE0s|dniU$2yY5@omLee%# zcws@t#t&yBc?y68lD)%WgQ-}kv$9F69gTN>(no|5U- zqDa!_alU4Lf2(ipAc@4jXvn%Uh|3;kXb>1GJtE_|h05 zLPRWSiS^GAh(uwK9EUUQUgH#2O@Rv$S1mP&n9qP?&AB}m#ub4CtWX0jhIZj?U#YOU z)5Fi(#f#U&2YPJ!9TNrri6R7JxIX}rm21LE->^7R#uuXnAm+w&5uzA28Vrc!lU{F* zz77fm?hxMg_id~|f^m_O_YVMo#7kU${l*w;U>>NWpMZ_QGF--^7VC*W@Q&&x(5mK4 zD|@K_%ygX#q+lCRYcVzN-|t8%`VZJ`0k#l;!bG{O3G2C~VnT^Tjg*l;ajlz`l$ z_?&4&La>!inE}}T!mtT-wJh^vL3$Q&gb5?9l{RRwLD85?c0^F*>nQM;3>YJqv^)&` zr#Q`kyjYMXpI8y1CiFkYhfI(XDh!ktaHiF%7Q~(%a6wS*F^Js~(5kSto}mYV>IC${ zjKXE!#$$am#rTG)1t(|PBq8j9VM+EC_uKLnS-=><-?cQV_>XU3qV#BE27^%Ffu#zN zGk|q~0}Ri@Xwi12B_;jGyBxqM3>dW%m+#VG=SiD8Fs2h^*e6AVNI8iTdrXJ{9t&X{ zX%Hcz(0>ooIR(tS4U*Z^a~Dq*2TF0L??iHTn9$67LWpQ_olM80!nK>jFWv61BaZ`I zUp)Wxmn!WwrIcg1pDIuykxH+IH-CgYkhp>Dyxb!i8Xb}5xQj1NKoHhNXX1NFULVi< zQW7tc8SxtlISAj#yDj!Zh-JYNCpl3l;3XX_;C z*ZhwjS#)@p@P}78o~?3P&*Pu}QN0Ss+s6I=Nl)=pGxPS_kk(Hg8?gGtx_e50jwsJk zB#*Dh_$``tlPj72m4}~`pZs>p=RjO2oYRk`dBN3>dMzTX%ibW?l=g>kHjZW=`uhxuqEe0s zR*wY6Q|IwqV8kKMY4+6H&mKc*+6BO&K=gANT6*8}mM^gh-3%Ab+3!l>SK0K*f?n{s zD|h4bqRM>Rli%!c{cc2Z5!pb)>QKHOjiaiu@5)uYi|&$H?p4;Zb|tzBm$}Of{j_O* z1x#uUi2b~sZx)QCO^$f@b`njt3X8k&| zd`gGa+uy4*_KK?Mx5%#H71rx%PI~!2ST_qd3$%SwdQG`+{iU}q+1-Vca4n^vKlz+-jQ9l#6puzuIboNnA?qH=mavpw zqy!75@w8n>OO}0Iyeiq_xvv`|UW^LP^xhrSWr&*z-3~9#rD_LZd&KLeMnO{NB~+`v zg7X9F$mNG0hzVtpIG>n*7tHYzJs@2)_-49!Q}3rX=wPJA=5VLRA>;K{9TlMhLu%K^ zWY|18RIeRzvsjMl=2aeF_vFlptbTDU-Ourf`S4AAXx-qJc5R7Fnt^l;p3|yil+$n3 zm3KE{uRHVoR*C!?EdG{RipZ03-#H{0&7c1IAaeB&Ls8RNBs5y$F6BL;*$PuhLCI<(q%Ud6nz#LA3Wp<`jW{f9<#pTWxBy1#0sD(AL7@>HjN{8g5Qdn#&BzUTa_ zyvS*%tjKkzWYG0V>44+39kEE+C-SOux&Z0x$HvWf$CWDwT$M@-UAf8%oy09>*QYIK zx83_(XG(iqNng3xm&Tb8*_oL{3J7&Be;lv=0D0f{0dixf>Zvm%(7mCHmA{c3uZ8C< z$n?XNd^G>BN5V_fW=!EYqYe}(AIfZ)N>`AeNswv5f&)LQkYKEMrgZe}s`hoRsq^_z z$m7=I`mUvNtHdHiayW#k?KpXl(s+zd5AG(0x*xddMl-o3_-kVK(^j*3+v&}65wzJeyKN}WaFN<9y1!7V#7y|wjK8=IM|Ox zW+3{WHGSqoJKYThKYtzI?-CM^@pAgy+#z8)fmm$_Nhmc{d}LT#FaMc6G<=@=Nh%>| z)2+3#)pf3N^c3fTIP7Ipp)sm)88s~1K=`VuV}pXnK(pTU_ZN;&=e+kKnH|H{L%j68 z#wvQ*BDvZ>clE}sVcQ38@>K?Tqw{COJy&g2 zdRt%4_lw)_Jf3+4bWOX}3A1(y9M&hNLy;dYch7^?df;{;a~G@YoH=h@`*hQ*O4j&S zM^@1cD0Rpv?Rgz&XTtB#EK1dAU8y8|ouD-vX@2$TJjgCfsVMFSB3Dm{Te^+3!Va(f zM%M*WZG&DqnwHa*Y&?IesiS7^g#es!d-^}gZmBXt)4N0fHrZzjQ=*mMI05wcXj0^3kbWBH?X7v`|A|#!e@##? z0g#=6ZHWH}jEn_yP%;n=N-LSg2XIv4zpN)B$Dj3~ZgQ{TW?y8;1DBrS?ro0O%dSC^ zZ+yjZZ=CH_cjKmY52M{JeeqqPadOFpPor(9V*esxp>O?M-o|lcl*l>wR_C7+>Z6~- z5}%lBUCS~TU8Zz&UwE=aUbiiS?$yCW1^@CN=1~`wQSh~8nXX}gKbxatE36RfBlQ~ zuI)|tA^iaE~u~4`_e)GoWQywJ0kC*(2z;T!LMi*X`|?;TrZ8A#mR~& zd|viIFrY^`VR_&d{k6{##ew1MJJQ5cOn1BUi=VN3D7{>++%y{=yG|ct+xPKs#5b>a z`H|tHqBn;3SUoEwREkoZvl+hU8iYIy)yQ%FWh{;N$>-6x7f!K)*1^3UpewvK1o_b> zv;}7y-4lB-jN^1~<RRROlEW1=WFXSro8pTNH`mTA;@o-AB(lJb0ToAeWuBz3nvVf@=?->Jw|%ZK( z<%{P62fu?;>!q?Kb>A=}#KA>SN|T=$j^jGOItw;ZS}NWVrTlwd2+hU}bWCE0geSkW zA&Dt>y)_|1QS@NV)IKw-y)PNBi7C=tV9+uW6m5IyjXl8@ySuEv)!Ao+uh&Y8Z4_ z_jxF0;3Z7(@>1{>tE76AV|=t@!jQ)Mv}li;QIYBJDAR}Fu9DxpRJ80=^^_4!OE}E) zCYUllpe8QBUAB?5lneiW8(dt9)|NF=EY5u3#@Sst>k}zDi?mbtB=DV-s*^`@`%|gX zVc+Xh=TI}kj?&A-;E|ZjSt%B5P07Lpu%I*l{hYL~0 zz*WZh``7gS=(`breX)|bFco~#MgPT0pJeFHC%x}Xhjb)EG99eHZORbs>vQR4XtB&)IB&w`wXINJLuTqD}{5zKh^>= zRJqG1b;O0x>+lmuHFyuBdQ%st=~Fq6Cw!!l?yP15uj6m*>pFjZ=N)#+xdHAWZN|^P zug0gI#sA@%ewYjYWudt9IV8eH5t@=f^FVb=NgJZ6;1wULGKdrDfYaS@=FJMV558&H zL_77X(2?i?@fr^1ev;6M&yxYWZ=P<_N(RjPfPJhB`Ik!yFETXT)}Qw40v>kb!HJBz zw!1813?9QQzP>B}-*t%et{a5l4=1OvWi#EK)o*Qh+5#RnxeDQ4R^gZ{E>{6}O%@ZB<|JuMR z8uUo9_UCQDoyp}Sewk=Gw&C*{vx8dZJ6qnUR|cEqLOZ|*h-a8B|KYRsVKUcy7|<~O zUt&v!^Q%w#ctFHGu!aBYdeSB>ZOJUgG@}1$BNq)aFPXgohy(xQJZrqSJ8gTtUIfI! z!5GA0=uH%+{}72&&keMvnSSx7ZK7E6PV!4^JNl(3GbwF&YoEF-POd=a?d^s%+YRW* zpRKJDSb_al8x{P8P^Ftq+8>rri1hBc(+wruywq?bzS&1{nnpSmFTWRLSzEWwK0|ty zVb^HExhGARUN}A4BuB4OCuOgTTgtMw#Qf({7<=Vt|KBS|HU#Y_o0mil;l8Aaw^O#y zNfQe^d3h;JE3cnHaqajHL_ReP=B&6#rRQ~vvmDKwlS-jQ_3(=5KFRM(O!*ZfYlx0% z)}PChvA`I#VjEakakiuVT%w*@em&6+Jh-~^K|;r~;za40b4|tDONdt@=6kq%dt1tH%=LSlN!=QRracj`b@oylYi-v?|sCh%wv$D09&Kext#D% zvK>F4`aibbJF1CxYagZw0s>N$-UIQ zq^Wc%p(gYeAcO#+=bP}HaE#iOnXKcQwfX4`r<1H+mRn!TWvnMs8Sxk_uOUl4V%d2FNG>~;;x<#=FTc5KLHk;5JwKb9GB#GWc7 z@?nR3{u1;EsP7IM%y3jglw3k?#y~S6XTICacm(`3@Myr`q(edASoCFpVFWgj^v$W8 z;*mB5V7RT61^HZL%ueU@`E!d))_UrNDOQJ_Bi+JXrIV znL#L%{jO$~_y0U=9K<@^4eYZfQ>j)^Zp>RYErP~tU ze(|CV^d@VUr*-2n?j&mTA9R1FQcX9XyOvHsWflElR#|DxykKd$4cU|x~{ zI+hKAu_3j&QjB!JVZeNg70rGkgLNFBknMbRF(OfiBT1xN&W`@L@dUK*8PJgL_C4hr zmo3h5*|xDK91LOt4y-=U8w{>19WGq&XVs^rI1crEd=iYSNVz?7W}EM`wdRv?f{jA) zx}5R~ib**Qu=-Td55cq7?!GK4cm!z$m z7X9%+VB~N`^uUh6TqdI>sD+l~+wj-yu5t}NwYl|hR7d^udQ!IBk3lMi>U#Em$Zvk% zmnZECxdOX0rC`mwUvENmW9<(SD+TW0p2I?}48q3*!qhb_FSFA4m6qZqX8V_swTw9R z#~Pk~Tr@vFaJ@KDc=ve`VIWlgZskVTra`OF+pib_tittid~ps&-kJJxQkC}uaOUj? z79wUp9h#q1m6KM9e)gomHDy>b1xh5nmR(#SV<2gBU|l}bQpwAPn`x&5U!N7h)7*Yw z&;U1{l;WNKW~<(L$z?i`y6~MOHo3D4F8k?Xqb6vXM@wk3mh5@yD9O(!Pj-+ALkcw> zuh9Bf?tnFB?$Nxh9?g5*ZY03Zo|xng)}QTW6_4gEsTank&_5O7z%QpG^G&ryfFC(~ z5Z_M)F-^eq9);fYR(HebSU#yMk&=6D~6B z)&y-FY7Hj4x(x4@V;hvmrUa{h`xotG->i=zXmxizNHQ}!aF-iom{rirGYO=}!6~jY^cx4qzPH3l ze+M0IAL_G=+}95Ma^gC2odmS!?V_rom3)Bu&-IB%74PGgA_T8fQSh_7w4U<=tq`^V z$CnCNMJv~e4eZ!$F|(*MKo;rnK`u16SNAjzNi(cc2E;)k9PGT%d{S>?%%`5N{Bis% zjw~0THV-IQmyw%EE6!WfOQjU|x&14~gy$AP=9}azw^~%)W)G{s_P?E3kr@}d@D-C( z=Tgv3!fKgGt(T;@fK!$i(Il_(xqQ?Z>NFdw8MIltEw$x+hJ1G_-Ad@I8=;3OP_Cuw1e97@)ijy9=EnmbtH6kI`M}$bz@rI4 z$5*GmBFkHq1(zxiKbwI^JVIgxe#NSq5GC9!y3T>Kq@n}i!HC__3CmTr_gNo(6-m`A zWGBCVtwsxYyC7b9i+`Qo%kZy4L-39WOZ+Va6aFSb3jY-G7O#MK^0oJra(?(!`cF1RbNYZZn2w3%E3`OMcuQi12PGmvqKzEh1AChr$3mfkHmh&Sts z|JJ?!lC9uYOd4;ahD5}(@*|lMLfau2FSX)4>wz!n7r$IYSW58tO_FA{{{zGodJO)2 z&>aLn{8&6i$CY}dvJ4OT+{n&ND7$JRcMA?g3&n}HpaZ%`tNXVg<6>LorgfH%&dO`s#k%AtWp?YsV6dlmk{ z4$;SUsy@hffm7|foS35yt&im2%*=LaSz)E_o1V-Nk}bFh;og`;So?x`!i8Qo1Tr zqSdQ(BLq=|!7dN+fP+-2S~&PZh;5W4EzWL095hqE6AX#|nUPBKgo2Tu@58nA&JRi( z?Fl!pu>|Pk(y)l>Q@l(l`d5Yo*P)0xV@zK*rlvK;_UB9K24wlq!a_sep=j}|Ep>W- zK=Yqg171%A@DClznc;9%n@Vnrkq#|#xUd7bvPMJq{*IxSQ`M@`WKl|0>CmHJHXup=LeI@x&xvP$5T3>OpVk(`x{sa1S zN_uY6yG+1CRU`+^#ZpOum`KXH$OpV;4_vVOjG$JGQ*PU?KUk_YI=m4=2kG#yJs=I_ z6{X8V`Dc?lOHD60)EPD5-}BC*{%6?I67JtIrFTL?;Q4E~i<92H;sU~wpR~N<(1hb3 zl26;NVjNb5k!SN%2dDqdJmi`Q%Yyr0n1ReLe>0P|gdcY(ssaI3{sz3XD}CuQMimH1 z`Zr)53UTLI6aEA5EJM{F^P^^Aj@ifUlmV&LCT#jd-*406%{q9 z{Pd+$lO^Lei0P<@J&~x$>ZvC5a)3s+LZVvY_AR414sC3pq*uQ7bZA*dEy_>^(FnzD zP52~KzLI4@DjS8Ly|QeOoZ6KU;`ATz>b~HBR`G2kzi%=(`^ek)&SCaPIl%@Ss|jss zA>or|J_8&=7bG%L(pY*#?iuG$Tr#Ep9&Yo%O4=fU%rB8_Kl&E@itll6`F?;{f{_}5 zq`rikd4(D07vc>YeRZa9QKsrV!qA9rXTQi|f=((JfG9#mx5X^fMyow+jxdwk#v2OJ zijxmanq9n(8t4Lid&}o?Z{%miPHoK_!F*ido=?0!6@Mfk@8E15hDJ@_iy^UZK-nqj z-bO6od>@HXjK~Lq|w7&WPfbe0rJL6g#=S+UkeB8Kmsm6k-_18AyNs<+sjq zBnWwy_&jVSQTLYf&|7YcR7*v00zSqx-kMi0d_5O-saj+dV|;Ai_*+<5_Qjr}JJq2R zg=Nw;4gSXgyqfSDh|BurEVC&W=LU)U@EZN2>RhBz|0x~l@Ehu_{MEfGv3}b9FbKuu z64TUeX@UOwUpp+~;igRmv8Rf6Tb!~%lc!Jbz?`zprdYJR$NX%uQHe#1*mr}Eu9&hG z+T2s!?dm=yL`-4~nC*UEUMyVAAc;h?3~6Y2HtG^?3Se37P# zHL{fb;X6;uEcJzxl_{4P15_R?GyV|z&%F8>F5}K|-QC?Mo$*->$)=hbIZj(eoBNli z^%K(wYQLM7774T$VD*P)uH$`BgPlx2%U|x-m!Q2^afy{?h!xZdS5P-?3j5&d=nO4& zaGRel{e0+G@bt}I@qmL5`kyIB;pficdMCd&_1+QDsVk%1{dY>t@<{ckpWKJ6 zymERlb@r>H(8+eHd{Jg^QKl#T`*cRY(69Pt^W_Fwl6mLWVH@LYC>kh`YOV@F=+uL0gVQzifLt$Bg;X)dGH0 zI?DW;cG8Jpz^8Kk403aQidLDza#SOsye#u$@>%`WhR4I8{YH`v&fJ(!0&iLDX;}8< zrD@{u-xKU7Qo}wMduRM$PnE@P?%o#j5$uDolF*q(Hm{7wD+^m2YPbrPR9>}R7ZXH_ zC0+wHK9X}nTF+Ibr3u)fIWMWhcjo!m8Y^PI#eYE|v4({Ux?lIKJpGR3TRLb9BJDSm z8k4;V-GB0G1H_#Q9a;O(uX+{O3mea(;_Xn?NlCB91I#D6`;PK- z?G)}f8O24~g>u3)9X@;9+SG6F-8D!IA9k@Fym9JtN>CSXs(W$7z4v2H7yTv=)2otD z)`u)SOszm^O{JYCYIFhckZ6;n6lF&T;rdZTDF9-v#3XtsCGN% zx7^9I#^9@>TOVG~uN}ERK}0@uQ~Uyva)MWFG1bVY#6GQ^sJ?EN(%dx1h1;QqYqR9K zImvUc6z1#R1vk_To(%=M8c+WIjN%VQYi>x++_mtQ?{h!%a`~EGdcy|_cK_&4Q;wi) zAtdiT%ENIFa&qpQrux?DaSrIfYk{Z5rUt&V*%>Xb#GGbp)%6*VvMP;y>zl#6QMoT&X@40)3AQSf5FuZQDM|5IN zh8QmKhA5#CQdETNQF-xp=z|e$T*J;bwtP*_)rJuv3M(4a74Yxyp}vE7gkS z^0}br=`s-4DMjo|M@>xp(9$|{OS)Kfp*#q4vV>xy3)cBW-lU7&N;7-%@C*|nZ{glZ(vJHQL6 zO{zk@fA8RRf*m)o*Z|-YpyPXWUd~cSvz%L$azEF=eT#ouvBkh^!{}^ITxil(s>BGE z1OU3nv2e#95P!lMb@?t>1icIXDRs(hsd2y|d$~YF7kL=^IN<3O(o6+$9-4TZ_Y~iR zQT0OeYvG^tU#{mjsc0m5XXeGDub=G?YT^3d65f?#=|8}~f1M|Ux2rrn7QVHYuD8sAoDG7{1#ylq5TZI(1wj! z%lwoy2+ArR23dUXE@(W+dt_Brm&7I!%a&F2jjfzFzX*Ci?j&*_tiN7v0jJ3>_iacT zzcU~R<*-xya&U6vnMsCuDoDBd_DWS$CdgWv5dq?N%YxoF$cNs)b;_&*CcGQhaVk1` z(q3UZz0bldyUZwCmGI?7Iv5$N8kIM|SQf;@J77Gz$LhGiKGvXh;R-0j`FL>`$mezq zzOS~hYcJtu$>UbxlsRTQbH7c7C$!qx>|SRq6(TY2c-!Mh_@!goUs8$0{+HalCWZ2{ zPZ~@=bnT!mEq^Il`WB)WejP6(fm?@*Hxu@HE`E`WhYp=lYbd{2MAZ%@T^Ma;7?G-9 zo_PV(M|f(F%Ck4Jx-fO}z)bO8=K!emfwP&x99At&Y5i==zZA0BKKw~MuJv~>)wHjT>H-1Tu+Puz=Xx|RH zlIu$^SK{#P(8MQ23iTo$lvDX>4E>690A(o-5psCL-(9ufUddmu&y)GXnP%)JHyeFl z=7n2%&_LJ6TZ-%zYFuA9bteP{ny^P3bz9DNH9=t~H24yKj`@dyo>5(EdYv7Sz92!k zjNP#~bV8&k7qCLT?u?0@PWRBM_m5KRV)*}C)9u`0wy7}?bN+a-dM2F`u7YZOhk zDKy407;2Zl%Mc*H+O}$WPuYr);~^f^n=)dbDvj|U{M8&=HO*fFottW=Y(RfoDZ9AG zFNWXNVx@me*cq1l#VyX2gvE=7Qr*@Zu$Y*heMEk@YU9pKPycWQ#!ivrP{C&XxB^m1 z6>jRRG^@B~-CS|Sfx$dI?FN;ObD?h0XT|$ocb<*!b*e&3G>pHaC0f36+1-dcN>g*bTxt~zNHXA|Sg8@%uj$L)GECCf(yZ#d@5)^0?i zufKfvmU6^Nz~^i*THZsIc=b-0ho3-Ae23+{86vQ>OqD(n-6%e=oO)60`I zdFMD~q;P`$yNQ%Zx6zX^ll22P?rVD=68~w??0(1lxJsP>q2xf?{}8VpbTtU%^?SG< zkk!mD^v)o$`HzTnDeE+&Bj@yu)>KZ% z>n3U4jKN$l4Ku$W7DM$gOImJDY%3i_A>J`n|DX)eXTsGMvJTJ$n(GGQD&-P_udq(~ zlA}Z6(usYSlgP< z#TG*#ll>L_&t)afj3O7MX>ZX;GxX9{U+kqfVNYUj5W3SdGz@1`)_o}}=Oa}m^xba^ zyVz4%D#rPXBi;Sc*qHlhrOt3n_+;JyO|(+}16z+nj;s+6Lb7i=Sfw{WYN4q2!OG}G zT^0C))x4*b_YvqLw`LD+^+GRQzVDNs3QrL?+#~0`O!z==OZJy;&e3Eg=cTfnzL10V zcStY2O)E0p65S9sd0}4^vLC8sC#vC}J>pR+UXHFK4OTa4HfyGW|Q{Z{L(dKGR z4Kh1;wPiIWjnihm*ht5NU8q28ruPS{%)#0?sNQL{c#E6Uk|8wutv;%=TrvUT+D8SP zE~1F1i`pF13ym!>??1oOcG9bC!ck0tjgJQ$$R2GOEKJ};d-dz_(QbOEn)$74fAREZ z`h>BVxqIFO56=cm9W^ZQgY1m9dQIMcnw&;;ObT5aRnrW*ig1(Z<7qovIkt&44i^13 zF_C&rxMVM-8+W9}g)Y`mDLOQKtC<&W(`{=H)@=)$oL6pWslNPqu^XlKsEQ73RV*a# zUB!!n3YT2W6+R2(qc89A{_{3w_6itkkZ)PG@A`h1{G_dI+*8@?!!i?jRXGI1!;|TL za^M}ammscA{xl*g?AW`w$l|@^QWqoieR?>io^M7ZwCftI^@r##zsp6A{k>yQE&<)AZfL4N(G!| zl~dLY-O+KCekQ4NLIQo49u7NuQw->4ADN8lMm{ouT6yih&q1u{Tyy65+eTIU9sr&> z8&W5@q;pS0qNgFCd+{sMnej-Ek;rm%T?Als0fJj>&G2@oVi!^3(kHs=15%ho0tfQ$ zxfM0hDiW}&9^O9WJhy5mLW=+j=$^1U*eD|=*nU52|8Vo_nScJyQVBmx^>y=n%0jKE?nvTph3`1+4iaiEBy3 zRwV; zz$_*`9NsHIjK54At7U)=;AGq);T#2+h=LfbG(8*ymOZzkC0YT(=0N4J>)S%2S(z$e zRtbor(3aeAweym~h$V#qCDCq3H7TBxp)UxeG!P67f)8r9XLfNCk$oU`-~%uStOoXM z=fD<;;dh8DQ+7T!RmAYy-++>q)d98xH0T7*!;=C0YXt*k$9ZuedCnVrixKG3EkGw0 zFB^7!U2u-;B@x$409RygIMumhK9LGAz@a!WjbnU74(IHM%^U`>f+y^Ja4P4#CKGv0 z1`-T=ah%~z&+XWWc9MWy&n@Ybeqt~6iM=!+_VQzTxa`sSgq~M^9{{@qc#ij+n-R%2 z;13Kkv;97&eICnz7^@P9B?|BZ+)yL3NZg#2z~&?vDAGkVp7S$6Y4FkQ-M4)T@!e5okf2kYeI-p%^$WKqs`@+xE}L-kyls9`Mxl;-EKn zIX5HHUJTG~=9F&%H99Zu3eijyD9+)Q^uzO=R!tm-YG4I6Za2<)KFwpq(#C*Jz^aGK z5@ij0C)MkQo)Kr{29VUuCf@?Aao&n%Vk?>ft^c3g@T=!AD2eeY0T_E;9A2{L$08Zx z?8*SM>ryscR#bk@r#g{Ob)fq>x#8jGj&F#LZvaOvz|qu_h~JTj-x0u%a?H1&a&b*g zPX!J82{rX?G%)-~^OlBnJH6IdLb{5J$BJXoO4Ua9K&-dCmvKoDYDU zjp^Yf2Ion&iAlAAq}*N{H6wS3o?gV-y@1*=RU^+vi6b&D1{6La25gQV?e^uT=Z-u? zM;^d&#*0HH{d{+9TmjH-TmjHp!xo&jSQlp8L%AlC}1ptPq4u<=U$ncZ}e zZ$9}Q9|BoPw>$eiYj*?ua~`f20|66QP`3$2F;x36HgWHt&3n&5Iec>L zdy-OpUBc><_x`B8Lq0v!8Z-F?|8?}err(VIHKeG3uIClANT}y-DKkB7d3QIi`iV35 zDfwcJmu4DRXp~tlWASb`uE14))@O_%^B_SLe~KtnFpMhQYsq{<*S+`MwX3 zca6o0CG<_j@asJ|3QvaPd2ykB7`RnY_56!-;m4jL)s%I8s@Z%R?ZMZT7y2V z?`(o!Ms+2p@%FV_d$b$Y0s_m5!tv!z-aV?7qI}j0jr&$u}iVbC{Tq)Z#sl)Wr7KJXy^|gV`8E5B`s?@)8Eo z`T`m{d#<4@v%w1Xi0spV?>8EcPUFD!H^&4-VDb}y`4?%Yu0do(-^u_EnU*z529zaq=$ z?>N*NZ}rH+LoQ0{4!ie`0clA#pUtjUgB_{@v&=bT+YD=AKrNx@hlEzxXyqT1_2eSx zES?m|+S#?ndqsm#P@(<5Kbioj;oKCD4*LStTdY63x zE+WW%c~UqZI-(QHe7KjVnuh!*I+htog6_7U-Kx+Kyt#ydXJz!@QzkD`0R6kyK@R_ zt&7dDaFWRlPF~4nM#*`7on8f7Q*}JW3+Y(gu*|lYV(?{qQ zT8a7g|L=~pX(L9XJKm!W9-kKEsYSZLX2Xzv$by?Nl($h)LxbBkqy8 zaa`l%6$V1rL~J;;0ONsFCr@mz#Dmv7r^@58;hMzY?@DY4KS66ZBhWj-SQDKUN4_J*q#O+ zsQ=Z~9qtSIc6v?t|CK9U`yzc4ekU13efS@`1kViWo&;y3Q8f;kiyhH6Kd^3AJZ_4k zdlGLz{oyu0a(RSzKCHBKtfgDdcL4i9VR&;G=DG4mcvgw|mFC?ydJJ(^+|K`J8$FXz zNldc&qf(y&O+!s{QVO9w+w9)c9pYkb9aU}%$pG4BCNEmvj1Qi`9Pc{dhfL)XXjxJ$@I;lqOP zr1!jz?)w4GWk%MjFJEN2vlZ$ivR~6Kh0)mGocewBqVN3xM{R6O_1?j=-B{DoqpT;< z7cR6kH(^oN=5oRqHzs6MUOIHjnyvCT@w>*ze3vSGy!6{#^VO?(2?JBjJv_K{#X+J7 zpG#%esWL>A)&c_x5|5QvIts0ac7C!hoQePOePZ!?1$?$O-YI(~?Vh`i0i6WCJJfeM zRK0^ec((XFT||&@vwq0^hfQ+BeQDB6Ci)0&^rqt83hiR@{r%>0VIkci%mV}Au8f0< ziWbvBsY6rnb`)a&pGJ1wtFNtJ9y*OB#v56C4oN9A&x=us#M8ZgAN%n!!^&)iA~yGK|f7PwTc96XAVQb*vr9%NupHf1e>M^%YNE zl(xdf0M1!0Xo)YJDR84)cU+d{@V_^6letK8t1e zVk%=tDcr+#)LUVEX_3?0RZ(01sEcmKSCFgn-uoXJJSY1%bvStK6D^nH$7OJqx(Qe0 zA{wsK(Ryk4iH*y%&oa;=Q@)69T=HV|6WpZP*Pdi<61H>M#;YHPkjL#)Q3-Pc55+66 z1l(LBDsJ{#tltCUmR%6;jnyYD-)7n#7~=cBZMJ!TuDK9<-HG~4+RkG;=bKg=I8KI= zkX*&jrfJHn3BFA;cEwQ8FU1RQlVVvP(fj*8?C)L?Tlra( zGM6rivQ6&)0o6(Ms@%8v{_OMKJo8lETz9QqY89W8p+{fOCx1iOj_Zt4@V_qp_vQAFSnx-yKfX8I8{E%LiX)EP)@z_Zp*Po za3p8q&mhdY-fVTbgb!U3#}5Y&Pu)KiZbApDr>wQI8O&r%!xL?N#pIjYw+iN1*6Qnxd{sC6Eo?pZrw0=@ zCbH5eBp>)!68{IAos*^OS!C1v46{>gBOdcwtO)vO?6XFpO`n6Sl+@-QgDf=;uZz+4 zF9p7&;s$!NqCvd@Wxw>2$;FEp*AZ2r`@XLVib{n|($PM{!X{SsYUp3gTUbk&Y&j|`f%+KD8Oz$K zU-FSQ%sQ>0dq@u(zvT}{QCKI0XJ ztY^0axv&xAc6YeMZ@wajI@EE5M|me%l59sz64z+xT$v+`&D!r^i2?>g<;Zq2aI@E{ zTVf|*Cm(nije_{t*j!7vF_xYc)H+Z-Y%XWYLKLhnnzg%PV=e>omverbYm*4k?w^)$ z#(C}=fZ+2(J9N(HxhBKc0l+%LA;;rLJU?*x_1uf& zQul{z^uXm~6>N?l8v}?<(4T(;H0f>BFywS9J_bTmrH6|nB~-2gro}Lek3QW1=GgL) z?SDm=e#D(uO$$Vg>%6omD^ghwo_*<$%$RoI@^fKBiY|8Q~%~@bot^x8xSvqAq zHhU1bwCpudymO0pE$gzApmkVxzqOC!7(B z3&zjRpgUQxD*snIGi$e+PY1jSN$05Lh%}_YEDC+{fvZmN|5~%q5^gsSF$UnI{4FmJ zD32BM7QoXjCavU<#sK(+!z>znYyce+TzlSDH=r$&5IV^Y#eem)|5EejkmF61cLH!# zuc=5EzVIjuxcu+km+oc4I0Equ5;%6Ealq0dVD>@wUj>cm`kpA-EjavS#&7{#3!$U!Xap|Kp~2@A5V7blI_Qfa z9|5C4yZPTyC>uwVJ!$$Yqy^jpguoVujBPqm+G9oJjJ$*{No)zXL?g*XYf_M~qyVsrost|xHtNW}n1e10R! zUN-$lO(WV7nFk+pWH4d=Bd7hlGjlAGVRLra+klP*o%}m70|y)lk$83>pf#X5*_^ks z9yZ60y$$S8XxF)22f#DS5l6y@S|SJaf5+g}0S8TIBOqVG2X)%h&nHz0?V!((v;peX z`(HcaTf%KR8~>-No%e0ULH`DF1?ZdJzx#{G!U}|LAQJBjfLXaEy}h3`;UWSkgBQ%& zar2OSKsSB=wr)EcHg^Hr0_+?@$X`6BJJL-e$V4EfS=HY|OHWI9V#o1cQSH3Ic-WjZ zw)9_Bjd*Aw7FfJ5UCe~}kE{k9Lhciryx^cOhLi@HT=cie+fgu!Xdg48)@Jpc-|{?O z32g2PwiFPApq<+7E$2#lSwEueRTCP(g81L@BPxIn-C;x&U;FrNy(|0(hYVKVJp*u$ zZ#aw#BKrX2)N|uUT);8*s#*IRtntTki953 ze6njr2#B}kFfN4L1maC?NI4eS5hc5gZD~hV3_Z}RO+Zn5b1wKRLg*Ab8j1To;vD!- zV3U>gAj)1eH3A^L4ebl;xrj?sh%$|)Mqo(1&-dN=o>d0Ei#k6e06>}g3&kHo=iku? z>|rDaaR-7~!3x@dFL443RDRCHGUftQJ zIDl+C3|+)C&cn_ARodx9j=sJo!XL&g z@H#;VO_(@ls>_QJ+p1UBf5c4oZbr~C2zP9f!|vXSdQ^9rQ1R6BD+ zXtt#5a&(6pMvjWxHtVZkbzaXM^jYHdnXihL9`*}Th=Bt}YA|RF9+Cs?pO*B%DC07L zzk8>rIcINpAs3LR_-vsN+TMr;=@X&dy(5W^tfzjvoRf%5i`aMR6{L3DdlQ-Y1g#Wq z$M&Cm#=;8o;V3W#u7SWqPsI~qKM2LFfg!xFl*aF{%jsX_5)8RTMNLpdu|^KR@>eYH+oEhb$rK(=$)(zhAmVX)q1jK4+$s5Rg%#5!FxRB|( zFpM^%P%W^tsaIyygm*5+?7xEsLI*NQk|x`pk8#TVuuBq1gDb{tyD2!1HHUUztZ}=O z*3+7J>Fq?2_tFQdV@fix3-p+^(Xw^?07d&1<~&O$*AqoYvQNz@Q@+xuzWwGqA2 zm4{wB;#M%i1+MEPYQEfDSKz?{X=BWUwK9Vh5R04;J>daC-I+jJ*LGG}5Sj``wbE%H z3!LFdV$5iL5c^e}`z0i*tB&BSW&e;h$FiMa=lX6$+J zH-e3;JD9Z9tyuCPD$7ii+(exU4{8baPYbW_K2{?&We9Hpv45Fy3xalFzueAj$oF z@r9#RAMm_h;~tNiVsYXZ7=bK?X*NJsQO<9hGRBo-`Qp@Q`oNs~i7rNc<5x3VfMWjX zh*>M$ZA3f0vmucabR^;Zteo6iC-AuUGC6V-T84Q?!uR%wA&FuW#7=30T4(#dWEv4Ea;2*pnnrSK0to4Bf1b9bv<66@ueBTcDqrxU2W)ks+D#`Zd=i}m8nF^3bC za9#P^C5rsL4!zw<1Yu2-GYF>B+IaL^a9oyyBx_htq|CwxV^pGB5)=PU+Iz3UBq#1} z+i-2gqX?@LQvxaG;p^Fp$Fc34b->VwI-0S}?wQy1cZU8kS8NGnFSV0%L3jy~o5;+X z)GxHP1e07$pAPmt;6ZLj2Rm<(A!ib|?sxn*Q`kp9_suIsIb+j0yZ@4BT- z}8-(%f6W9B9{3P&VIbO*Iki|>BYew8V=|0>pBHiqfzCBRs|fp9)vt8fzyLZSC_ z{6m(Ik0UtD2J|CUVR*YwbU-C|g<51Q# zycYB0G^Qa`)XFuX)Ob#+_sUji1G@1JO1T*Zd)LHCVgeH&SZl@5zFF{NwO-g*3x2+cHoot+84LAKlp+ zrQ4-DiZ6v5I^2};{t%vL%5J4m%RPd0%Z|QgE0jCLB9-zE7ZqnzZ0zZ!9t#ph)k|!R7d{@6Eb@GU zO}#F=Qn6PMc#VI7QuT(anJ`5p6;?H<4FwOCqtC=l?)7hy!ENXf@uvqJ+VwVuffR&E zIh6!xtrsJ0`~#9&+Iw4Mk&r0fm#cT2FL#kl&V417B1aI4yn^LBjH91$55VVuC#K%7 z`Lwj>-%VePKGV<73~W%vYlD>YU7T5!?P$X*?hQc~%uFB|yc8;${!2K7MPu-hS0?Dn z!~Ap_4y{I>FKUtpO>=THhf0Al3)jc*Uifx{&H94d14XHEnnIpqrG1xaq4I%L-0tyQ zP1uysZ4cyo^#H6V=CwD*mFa6Bq?KO- z1o+&zf4=_o_-hVBZ&e<{;@vU2u2!t3LwgHm-oLI7L^49=dU%X$fcCeYMMR#E){0)! z^nKh#3B1Da!Zf!hWf}RSuXpO+#NMA1xq21?-v0PHjBjPt!!xG+Yg5@{-V3N1D^JsI zMzp2KI$HUXwa=wtb);bPEz|5o+jP@E^lM9Q|bnq1-VETWB218yLe_ZN*laH#099ajhsAfyim#&{*$utz&Buw~5hd-j#Sp zo_eXDqG4#Q3yaNE-S>V@!#7lZUcygkn;kB-P?T;5K7N~M+!Tw6>gjTGtdU*}ZK9aO zwnz)y4eIA>jEK}jR!)tC!?r@KtA*^jlq8Iq>6a8oAyisILJgpQaNff_J z&#W&gOed6etlaIu%Fu`Jzt-2)R|P zkWX@#k#;%t`o(hRaNuK)C;TaS_?n=&hPX0lRHI5wJO{kCRIlMDzv`@ZRJ6B6Gmi*9mi}r)v-nD&6XwgkeXW}e)%yoFjfr8u6HzQY1q@aO(UDOjU8kl*5x0Zxqz zR-Dy;^ZtQ*Y-wo5ry;T+G(XcP(kGPW$i_xl*(L^`$WGP3qjG=7i4gO^FZ<39A&)<4 z2YT>5%a>gohTs-lTwO9&a-gOXY`@jW)54t;S87rDUk>?Jev$Cpcc zaqZKAr7cz6rT9>&z_#Si9=;OQ2>Ec^{LBYcYI~t*!OKBtYDAaG=Sp|r2t&|j*Zv#{cY!uXz?x^H)|~1B-ze)g^+v!2 zrsD?>oJs5`8YsY}9wGVusHHPDx&G4!sJynN0m^Tr=i3J3pJ-yaBOKktiLF_YSok`b zxQ4mgP;cZ@TVL)|#(;CX;-i15f?n_hvmxu2Qt^QG!V%&@_jL_Ux~FAe)=SfP$`%Q# zyCln54$uR&!;9fy>VJ@a_}#65TWhm9i*y0ART4|26owrYHWT6(_nFY+a!6v8a1NF>bajCH!RWVm!GeKn)r~K z!Y@UGf<(21^`(<|zrzKN=3CQW6P=8J?|bkx2Q+}i6S>EFek}MUlY#q#xSP~btGUbB zrnegl6SY8Vf<8A{;|dvI^KYNA9SJtZ$o03czPC!xipf$OnxQgOJuP0{<`;kF<@7?1 z?)Wn8jyEDN;r=9V$qOqv${K3Ci(Je-Qu7(~l*=D@3ojCm4wU0YUpnUac8@_ly@~CJ zOn7jJ#00|Y@##|QDfM88SKGZBQnm2S8SW|52AG>FrHPNO8oWgD!I4WYt)n5ywuHdF z7H8VXd@#B6I(b^&X@pi@+**{OrSQ)DE@g z^p%xCHQo&^2N(5ts8uPSkvt}`3ZiahF{ivkwM(W?;zxc&Qb5Ad%A`uAPg+bWLqgel z)tst~N{)n!RGY*`)r^F>m8^{PHi=#kXDjzC=_=JWg%9ZwIg;FmJb;9pgeyqAm0_0Q zA_)aq2uWK|aL~P=wjlnXtf0%PBIayCw6ml?Nalhrl4Rt(-}oeVM!3(Gm=S;5!nZ3H zYl)R)w#gsR+>91}&A0of_MiLr5g_s0hBzTP=2e01RDB5Lj9Hh1+k-DOj2otMVhh6b z_I@ccQ-ty!$6n$6Q`^CE)%k4=yBCrZdx5lqSNJwzVv}Pw9L(9x>|&p#r6on~QZ81h z-4!b=Eqxpv9c}myPU$n-`u_n*K(@aDHCnfB9UI9|iZ&$$jTtir1tSVgg`VVjk#x6>1Z9muk8_atS<4t` z#g8-5v=^F8G#ve$`$7XfnM#v|9!t=48x)Gdkv0rkd?ehHXa!I-4s>}x%s|Pmi0=$h zVT1`18=>qMn&g|BM+qtop>FwuM<3sLbPfv2up)^EL&0&`0s-LcodL%U+Z>3uHMx<7 zK{ZZ>c!ch^V96>sc;hRqE9o@wM_0>O3LR7$ZHvZKrE$8~TJf~agsRf~+T8eP^xZbf z5S4}x1wrva#JyHoOY$+h=bR%63E~NHlDJEd@U+ym zm(Fy;l|gc4kdszJ!)|IWs-`qGuMMVI`3fh~i@3+hTa5kB5~L`rGT37h!^7rWIL*&i zN(a4%6(vbXa%c5?Vhy!DVC`mek}jnitKe|MO_q3@F7a-%bEcc;dwBJ7_1J7>am~AT5J;as zDr*gwPhWVBqOs9f(Ofwk?iefXSCa;4SATP-p38#Xwzfs14(mldYQDhwnzs#c&6{-1 zn|!U`EKY$tD>}H$ZDR0sn^iVu<%|oS<|@aEk4$T6R@1mA$j;Vil}(xbDx2wEt87j( zuR6Zq#$Rx8ruQmmSd=q*motQY${Eyh2CbZ7SAt9Mj zhQ;w*=Z6nz0EQCLOHr(l5DQ6SAz3V>h=n#rVxh5EXd;f@A~-a5&~?EBzKS5x5~?gA zqor6#7YnV#LTj;5Xd@Of#6nxK&~B^nYx{DBLy{S#KF+c1eyo)4WHhw!DxB5QB1kaC z25tF~;%;O`8x}KiYx=CA4YBBcY(p$@F4diME|q*gwyAlCgK19k$YC+nA2v0ASqnQp zrdds8v9=gPWA%kd~})@0&iA+KzC45_JE@qpq(@)qUFqijSX zG)q(^h9%*N` zZ?>{Lc#OVj`{>P9R#%T%9{`0-+p!?V!DF@ukJ+()*tXd!#y;>YFL{-XV>!bKYTdb< z(KpQITpPuad+`K!bn;rqp6 z3*QoctecIAt0m(LQ>Q~_PKU0UJ00rv!6BL}!!k)|Hgvm5gw=|6(~Y?j*_X=m${WgG zlv<^wy8Z=uZSNn5vjjoR5F4>!h?HJUIYm5e-awI=DU8aBQ|`8vHMGZzSIbOj;(moT zXBzh!1u1-)4=v4P#>FYl)|3wfGX&BI8ArK%c)9DI##m*tvhM+l{!WK_J00rdbcpJ- zZ|{N1n#QjW{?j|4oDo>g2wIWv5&W-4539kEiQaV|Mi0C*UY)LXQI)&j8zf%sJ%}qX zW(OpZTEDwn(?}4Z@n`NfR>`Texr?~#xwJil5{;{}H$FGo_?UaER!ErMk4;n1qZ%|y zpVBYA>)6w*1D|XAP}vWP-S6e3Zz5txt`*1D4XNXQofMCLvFzVqoPjvT8Mc0O9~YI| zkUGyhX_L!+YCV_Oe&1Z-cHcX!-2RS@ZO}^hdjniv6cXQ@blT`zP7-_{ynnQJT~Se* zPf)?0+eIf&^D}aX)RB^kd$)MkeG=r!9`T}Z|BU@p1=MI4)%g?VMj;Djp8J+x2;r6w zS{{gg4tfy0omxdbLA^q~(<{XZ$)YrmV%25L?aTq@7uj5@X$*BLwO`{)DfOD*uE2U7 z8rrf}-2UhnrjN*y8HB0A*jIL$?@#0H5t3PtED@0RSkAk+tFeW4YZAt}|LY&#S)9XpnTY^x`DxOzGpv?pF#xW(nNGU@h=!}4VXC!{x}cci2o(#GdxD)4+qVW@aVaD%zW_0#m+1wkB30nq6H|7ht ziCo8o{Flu?IVRYa${H43nsROnH}IflHL4gC<=1Bc_glZ|WlQ`wgl?JIyt2M@OQ+9fQ*K^peR4f zi2`A))Hf&JH~EQXW|}Wa5;SyTB?Pha$+!M{txkbK`z?bO`y*fO&%XG`F=i0Xf`ZJ)=(E3 zW8ov`uvoFFPwNR=t%$`s13$`qr@6ywSi)5;Vx%H2)YCy2U_o7UdXe=7Hql8(%B zICRNdUC8{@akk%x==Z4Mp}tf1(o!?`Jsi%zHO#q`JRx=YrDaA@YdS zgcwP);O0CIr8y(fY#5WLGLa+|eI&-W@coeQN;H`>+&mWLSR(N}v`uV}ver}g7_$lx z|LAg(-%8kbY#f>~dIl0MCq-Jq0{PUB(9T2&=@!AyAx%w1>G!4~2cs3lxEZ8$l(Gcn z<)Q2+@a7i{l~pktJtd|SbBO1JI1f!7?M#|E15LGu4+ycQA@eko>0Yz}E71|^6w9mB zU5zF}CQ7wLIiHduJf}J=CU#jy*pkFW@cF5odCN%`9MeakbbFL%N-(V)E-+bEXbw?K zTqG*1Z6{b>B$9@^q~#&;W+qCWjXq)SB1c-G=}%|SGl#<%Pk^EnFo^L)Udxf+<`IZ9 zo3p5YE+;;Rl-)EOh1DVcXRI(ZV%IOMh}A4%9g6>qHDcFVmT*0bKM##;U`6j*&x-qu z6)0zU<)P3%dB_iW=b;CjmmFHa@F3eEUfVc7^iSf7&v0VbJNWNp&O_PHDC3P>ViyoO z_UJl0^A1X9qG&tfM`n}lzXr0_BG!5q>qE8$$J%}nbF@9{35n-U4`I(tq~8um74=K`{CW-M2n%zBq~?8p^C z{$pmun#aV}q3yzf<}tp$KCy#+Vhcs9M3o}zqoQvo`dx~5`I(!F#>F8!KN{0m+qH6#m~XdqX=fVhUTF#--(heZV`7iSI!7H0KawOU*y(v+qlL8J3)UzhyaZh zB#auFb?f^*c5r6UZh3+@wi7Y@-3(MGX z>sgFVrh_-4;%03gme0t4-nsHTWRhw%z+7dylt9EW~+wxF(q3UMU!zy@3BwgXA;Jc@} zj#T_ZF6%!>DOBQ`ASbXk*R3nycDIZM(L; z#$4$^MN5?%mHU(@mAT4dWh^t9iE^36%z9;;(pYV$?ys&E%lPVI>QU-k^-}dl^?>H! z=tFADikT5Dv&EqqaRHx{HLBYiBGhx!KVpT?%HvsS-L(g#XL2o;)N@!*GD)O@yq_}p zvy9okC3`u$dLcLF{E{OjvD9C=r;FBbDye7z=Ub{bXBcNlUHI}3IUxetGEN2O3l1x5 z;5QsH=UT1JsNue2?qno~W_%d-k|U#WUATeV$bhZPYN`MJB(y%zJipfU$A+d^l%ku` zhf*SIKX-)S8uw1gHs)8%ZZTw{a8i&l{JSD2n>hls zSP;pX;Kkz1l@3sk^Kp=tekZ6E43kpE52A`@@Fa`xMn{q}W>YKbW2OkRc*8~GMd_k> zqTzv+`BSI)mxc#y|De*ZHfH)qEu^qq(vJEWb@i2X8~w`sZpEy~r(kc*G?I8py(D*s zo&1z`L~;Rqv@CUyJb8g!BaI#{50Ot7TsIqG#S{KpN>OI-8|9~x8|a=vRWAs{J(+Yj!lT+7pjfovXXO+f-em0q3r&uDRab)^E0teGTlRJhcb*F04E3XUjw z@ioV4{*hDmS>%rTOB3oyM7-SJ?HbK!fI2~aR9#zB(em$I&Bi|`7hK3sCTB#%I@U(M zr_^rGbS%x9;qUIV@QWO!%am)0>D5t6G)0-A+AtH5Nl=WZ0FJ$ zn=V`IkKKKVb>`m7OR40H>}RKWdzF0koSH^zJJsCLhR;U!&VNi|LFIlI#PXH zjWTKisgcwP)QYJ|IhU35d!uFA!#3vXDa;I;zMPj-n$_k6BDSRZuw`{t{QA;S=uGCC zN@fUBhqH8&_vG=_7~J|)wk5sIWck1S{86h`(>^59yhIJPDsp<=EBxt zFc&m=qe_#BFT-#Zeimu1(#(O$?de*W)6arSac&J<2Ljd2Doq-?md!*NRK)2ADZ;7F zNNj=mt&nd& zG#pQw`5_CqaL&A`5e~cGLV;-`6`qh1cFYv1G%(R5v{Y&6Dvgy&19k~*R2qg#W2@5G z-PC~L5b*5ewrrIqP~Fzl40BkdmnsdpVrAc){W7g9Z^`?DtR1cqPP~S8So9#8ntQ1< zii3T)`@oEq&JHj`*l7otA?&b2 zrLq45rckI{vd9KZIqpL`{jCdW@a=P-g`f@t)?lrW( ze55O7n>$}YzHb9d0Z_1EKBTK~^wxpKP0a)@WBBhZBNL_rS#K;SRMCH@Tzi|%B}c&I z@}og2O@t4r4U7@agR;Ie>8@`yrU&(}ZWg&f^)rBTACi{xZx@oOEv$jOyCrV#Y6*B^ zA(%47R$u+rV9JWutN(X9qWd4PB;K7%zK1P=HsJ=AIN814Caj^6-2}WII@TOsS9Kfb zLCWqgnPfWn;~0p?z9A>ha~tw}26>`%d9cRm2$TE*G?AT}c+eDqD+xL^OF=`2N_@4~ zY0zx=jpjLMJYWv})!A)Esx%=#zogvMGN_(?{)(+X%Gz)!;q@{$FUt!d`wGh zdP2)=r6oS2d83S`R+@y$n%)ZWtV}g+YBcJ@h6lwT(aXiXTqJ5*HkCDm?fp4QdO^#2 zk2UoPEoFc$OM+&zT@sC0?Utjx*(oYoW;5-jWx9$MGgIK{;rhT*?99q4ap~ucK2*`X z*?{>MeU|4Mc9NQwF`B)Zy@LITk2i{Yk9BR%6I$>cw^WIXH_91xmnC>Y z8;pF-{H+xZxC$*B0BNHdr8iPm@s()L+M zUaTdRQMXf%P%ltJZc-nbFGVfd7g6APaI2Asw5c#?&xS_{bHqT=jpbJM*Zf zu07uGeKLcP5C(BTP7)A7k&pmttL7vS1S2G^_bQWe*dUr36@vC=meS8KHR4Zl~U$WFqB;|V}Dk~gET6c@w)e)F9s&*&!U!3?u(AQ-FV=l zPP1;2!55WI#?I+d52c-K{Xi7##c2G3^ymu2cu))>1xV~E!3$xQv=EBvp}%{fAis) zh@!u61zM0iZR*h1qb1oT+2*l9lC3{`sp~~#d0yCmwBtc{t35N$bM+G_>WhHs{Ek@z zF%^Z=12h+2@kpwlEj6gt+kbUFIw1#Zu(uRz*6R=LgX`y)wtb@8pkO3`Q5nu_JX+X7aJi1tL41fnb z0XhSdfe;9~wEDcQ0)s+?TqM#`zkPkyC?Jm!>0lYY1AU6~V?uDASjIm~;2>Zx5q*|_ zAbB5=4B{S1u8UQnw+K?O@)416gGf3=EW;lYVvsl`2*2kiPvgpB_YtvY`KvvGEMg83 zSBOqs8HNrwAErAmGWCQxsCPYbg-kU*Q zzd$RRL&Ng{xlS;d2jBB}a6CKIx6W9PdM$|@=QYbDR0+EU<9X0{X?@$%x_Kdeo{bQ0 z5HnwqUcE|`Z}4slYYUUjc_`~N^VoEU&a)8;7EclxrS?~%e7MYg*X!Q15aX_hsUeHu z+u6C6c4)fVy7@HJz(5 zvLN*wy%26CD`CeV1y1{zP|ZN~@rwap8(~u%7;n=Q*A&+vPvB6v+vkx5C$%SYdrQvC(3Q+M;lKqOX!gAQUUOb^=ozxvu|mvZ>p@!7B#xP9{Ze6N(CQRviu5{QkTU>$ra{9T8t;Ex7H^SZ z3i5Sv+9Tq`6=Ii+q_`HPZ>}KITPt=QvXdqrs=iot7F@6XQt$L@rFl?~B-%qZ(=B*0 zP#-6vX3P2yK~ihQP_@GMVD*LLci^15dDg#HQUbvmtDvvyJT}w?h7AcT-wbc?Ia-%= zsSfBT{aQ))jj7=z9U++VXLb66-_>B*{BQ+5q^&05IFUFmX!w`YX1IA6GOQt0@3hj% zK|V#A#Wg{pLwht473i?L6!>m&TaEZ^L(l`_T)h;97Po87Kd1Ol4)Q)g{CMjodXlWn zkZe%Cv`<&*Z&6axTE2^XAu~h%H2V9x6e(JJn>P!wy$X|%M}+b$zfJ4|#>w*Pmo$S* zLP~4-ly-i*m3y;yz0@iwM%kX$zUvS{i_H+5HD5SF0k!S=!QiT=Wz>j==`l5Fm&G|Y z?AaMWV;x^7Ro9#{(CgN8o)+suNP=AC2aMk#U6>HT$dMhks958v}<2J zdecB!c#}DVDXio&uh5yL#D(#p_t}0PLHK>CsrD^2v$wZ%;oFWlbeUG%J6*OhRS7GX zA61qpK@nMyF#qV$&g9`_`PNZ3J;WAP)oB7lvV2V6oopdMUm+p)JQ}dDfbX(%kiu{PNw;> zIpwriqQE0-qOM7umm=S~S!by%$wC_uwhz$xus$n(`-N_^kceK0P@uRV7+d=Lf2Z@S`vay0*FQ%UR2J9{XG9Bl2^Z|Iv+ ztk$c0NJB)&?&CR5sqqD^)@QpTMOSm1MS`$L%QN8Ytr;!}*3}8t8n114Yq@h?f4xs(^#fFVuk(#!95RAZ) zUbL~*zH!llnY)(L;qQH}6eEDdT(&1|n25G74nY7O0Um^g^ETL;$!K#o`q~nsSLk&S zb&>STz+5HuN{f9r=`%Yp(nEmhKXz$DyB)B(S-@vNiTxAJHJ!U+Ps*fb0Wl*8qE|+W zM3YM>)P3khgCR>M0CJxWOfn-=(AsK0k&OHa&xzcl19ArsGQCshC?+$W=>9*2BHRB8 zMO}FiK~V~7*HDa!?nX$IW@MhYZZ!0ogfIsrTzbb!>PLT3eqeo7)z6ZcaTB^(Gu~+v zUEZ>fYq`)hgoLlX)X(xNbyxvbNxA-?mE(c^M!;$0*0D_f4mdCS8UGV-*q$AOoBj?s z@WS5!$JYorT(>&b27yVAD0lZ5-`I$zi4fjk|K=N(x4P?X&nVvfhDICr8+-;3&1kh` zCb9!e0R{0)2||{E{H?Gsr{Az01VYH%W*}kOFlIb+9dkSLdu9!DV*_J5BBGrCcPNGN zH%g)XZz*N3A#7FpH22Gr9R}*Y68numm&RAkC!@3JPf$T5p9wSJ9L5-^1S3-6p@>75 z&=IGMTo(VyDRrZOW#klt=ub{jcl^mIDA@09ByIkSQ^*tqCVz5@kx&T6D59)Fh_Y$| z!jT1tM~Wsf#&G1vMRFcO0i z7>s&>V+00~kr;p=mCxdjd_gjwzlx85p);5t zy_KIFf>WZ=x+~;t!~z%GPE4I;qJ%$l z$GiN+0%b;)h)2W`aKd2}INU5c11R%;^oFzC(a;KfbzeG5INNu&FFwITa?;`LrW@$? zydS+0AJqND2k2#%fAOv%V>t`v8_g|9wx+Z--gEEJ|n{`++{4equ|a! zcRKL2zJ*?BNXMnRQ{5*Cj)*glh)pD0I9oXJl6_JX+;>%{Gq4L))0Qqx(^!G$z{S(W zlK~706x^?)1YTpuJkZR7}aFW>luH z%+E|?y60Hu%>6tsGdQ_Oka1+t{qu`ONjv!q*X6AE!y~P{7h!HZLMTQ+?mu5AZ}-2CQ#Wnj3;RjK4!L} zGk<+CK|$%AoAG=oCn4bL=}Xhl>y@&%UOmb6jX!H{d6Bu( z@*-9-tjhx{7q!31wV=p6fd4~4B_u4cAtn?i^K zv?~@8+9c0V(-UDGcbLRRlU^nP?{c4q9OSN0rsGF-{>^PG*MpB)AG1z! zp9D9Bg!?QNpKQ2#QI`>Su4*k=h#xbETtr@1_=AsHieXgsXvM^ z2UbAr6!A&msNH7rRX+!`=d5MdFma#|2|sJ@UlH*2y&{Z0vi{15BL z2{CH=LxZR>UYe)Aak4&L>;j!o&L6V%;>j0!E%bu$QqQeW2aPuLc?i!pmACMy&Sbwg zobNlr&X0QxJ>+KQfkR7O{UW38cOXcXF$h&N?aA&l4KH$$- zelWI8L^?Pc%O~G|ZBKf(4Cr-ZvHWGG9jRm4zhn8ZyNEQ^-UaOyqL1eC|Fw94e-#fc z|1KUdD%x!{nTmxXsY*7M4nHkHG6>ZTxu|#m2DxZV{eEH+rDLr_|J)x%rzys|K_n?R z)(wr+c(aMGdq+11{KEXo6bVT3`nNsFYPykmUkq5IoEf)|gmQoyne@BRjRm3Ff`Sd3 zu0b26_MxchJ(aZ~shl-Bhd7n>QH88v2@CD`QutI`>|vYiw?D;3hJ7D))YV>O|BboP zuJOgFR4nW(o#efp8ftJA>d|CuI8DK^k zKro&U_It~d4BFUFTC^)i zHK+|&0yPa=g$4;fYUR;r1d#{69@MHvw4H1i+usvK0_k84+FcuK(Bd=@PXf40zc!u; zQiS9L8W%=4|q3wj?*U3;R}( z6{{Fx`%y}VRn*#6zc*=9i%RuVrgCgY03u^ z=(~#dU zAa|e%gdfPSK0c+XCSNzCPQLzJM3nZP^uLQYiy9s7-*&8fCmJ*%(2ji!sFu?$7(kQ7 zfRAyDsy;3p=0VbI7qR7{UKWciaK%|s6rh@qHt^6il&m7S3^Wq@MNU?%4S1Lr*(Nc< z($!sU&thfH#4RK%1!T1#Z~V8mO9hmb0v<)3$J#ar$?{^9MOA$~`68+x9l8Z9b)OC@ zCGgFXVuZxOg~;q5+=mW!9+gMeVMVZlXClUs6YeuNx_c^}M+V#^ zHf28?;YzW(1L&5@sdqg*%stHVtiX|S@^_s&%i&oN@L4=DwDOZ6xH&}k6h^-7NrYu9 zd6PrJyyUYxb&2!o(=aL~kB3PX9fN&3DP^k}y3_JdF$*;SLN`R)+ZNKTs19eQ&Y|w( z!u--{zDezr$Q4&TePbV)W8d;p3dlt;9>$XICzm;m#b=8GV|=Dt%s}@jw5VE0?=eKL zO}2H;*bi6BUI2m92vh49E(aGOd+vhviw*JZO@y{^e{mZD4RD`>=7 z<*L-<>VL3UJ9ohf!lJBqeeh@eN+t`GM1gKlq<4P9Rxo8RFA)XeG-qPB6bGT~OT^k3 z;ZCd-};}fjjx)frT{O#JRs? zkUF;ht@jj>`UGgPd)cK$QmRXP^>Ky`_KOg0ZJiAIk(K(OYp^3(6nX*>+og>mb?R2X zOa`4g;)y}mv&&0lM#_ZGNkQ-={J$iW&i$XX>|w^1eaUDOG}BT}SpxAcZO=?gvUL2; zPThZW?r7L@taFbW>)g+bb?!0$RWHqIHg@iNj9aLqP+>b}nb7|SNSlDqU~*$Y%>40q z9J-b#@wiiXDl6wSQ!bmM2IGRj&sb`}K`TKaJU^ z__r3%Q7Ra%*WX%qjrQwC`{cWI&CGVzTY*Wp2%%F^Z ze=Yul%is1G1=Jr#{WS1j{FC96(LZ6#fvpC#-2Tl#X=|7b%%7OSX!S=9D)T>@a#V~1 zb^0eQZqUX9)R?EDTHFKzk`kbKS@eiDJ{bzSPh8A^>XSB_0n(hoknXLDN9My=dt?FQ zyg|ZMqX&;AL@uA)`B&3`6T!mO8%!Lp%B9qjJ zkS`bdTj#=N2>h)t!`KO8^cKv%jNW_DsiWqiKS!(Z`|#+bW}|zmMeAnY<&*nPtpLp0dm`xUgeG_PhZI$f9wpr+n!(Ipv+t=DJw6a=0V*~ea6Vgv&&^Cct zYt&D7jr!@7Q9qTyO9(>uXQ7`+TZ;|rD0a5K!y_B(+Dp1$kF)LPwN0@|k;uyvDn0WxoK8bg?DD zY|1`|$E-G_N^)z-4ajsoMY}~?xfG;Xaxxcf11E)2i(-#XUF9yL2YdX~xG1`b^}QZG zU7x$x8Y^(nZhXdv$U&_P7)Bd#FgDho#Qt=Zm zgB9@vS{(O)=;Oe7FCj=L_$mTF4g$i6Xca#>f=Dg_al0j(#i~4_L9DFWO(bj~l41ya zFCjh-5`QD`0>8B9l314rB38v;{eg&yA-*B9(V}h?QYG-s+=q_PJRd_1xUt7x#+l)> z1o~jX1mu(C2XBmOFWV)pyw6bq{`rE-T2VC(2jq={$iQM!4I2v;p7Tf<82F-BTW%i#qUEucph1x!!xi_JmEFuv6CRu<0lI2=6Hm zIWDBQwxABY1UkCE?!62#_Ve(BT5>L&TtGWuUCnUmFs?)q&Ee!?K`d4`R%VSTuI$ zm-c^SXVZ~f$l12H@I@+pSl}bP!;R694<%nrZXf=Ln);(Z<{C$`0@orqir@3t3hdwH zlU4c^bYS=vTh6mKwc9gk9H{03RRH%geoFAjJd6ro3gA~lGB`j@6QV4483qI5NE84= zI|Bf5hntdlm3$eNpr6X6`j=TqwVAvau&BjCb724{fYZv|RP|um4-u8|dv~tRIfY$? zcz`S=9`p7fm7((8t`^c2jDRh~uy{NU7NHRJ0X+aV3j7}LZNLJ!SgfGri0ZKgehEK0 z_4apWk^nC0M~46&cAK~A2KgbxtDg^9#x6JsBO@xCk=x_JR_;Ui5P~OyK3$&s#?bJ z4O!=~fphlEu?N$@ea@FSiZLha;)CP%-tiB&A=XxF_xve?xc#OEtEO zJ6q(T<3QkY;)^Riex@CVqz`&z%UFpPvc4Ao$(=2J&yds`cc>jc@#L7g;@xy~@uXv^ zPbN${pE3^@E=GmCwg;E(CX#3LjOdiLn#4=JyA!-v>pTW9=Z5c8q|>Y2qawKCotWml zW9FQVWP z%u(R?fhdwjf_WUJTbk>?Tym$ey)~v4-1}wkhux9ZTVbr^DMcr;SN!wbg43&+^mXxa zY{5xsM5S%H_PO?X8oDXqK1dAyEbFtZvuA39YlAgsZY)h*nmS*0F6C%amsZ3zw}3+- z?~Yjdr021m>py_>{*?U^w6!06!Kf&$FAE92)l&JioKo^_AoaFTA>L#CwEW#`(-}m7 z4DxRLL%LZ#a$l2CZcqn=@NV?x=vS*h;vK58opyUpm0W{b0*jV`CYeI~@{q0k-ll1h zgO&F-0l($d!pO+f@VMU>q;84i-B>d3T1lvbdQp3e`rtDsMdr+n{QSeDTP;I7vCTCE z^~lpBi+D+?4`6CYN<#fr_XVe?q#{8VBE|m)b7un8)Vc2ccV_@ZZ3YIRYRLeKhyp=y zsG6NHD55|@g3_uGMzJ762%uB}5erqB#HngQoRF%F%CS`eky>k&Nky##VpRl(03wQp zeV-kW_T2BRbI-l^eBb(9iv?^F%nl*EzxV(9KT*&7Fnhz=HPIoDGqMugqxW?vu13QK zT~v{Yw;XLbx+k=(&_4BSVcCh6T_y((=%+YYl$*yW3%6`HnW6V~y*l#D0ZcdP_{RCs zr_#`(4cF2Flgf@oN6%6Had?r6v-QZ4Budh+i6M^#ZIOF}%`fIH=IS?Qv&yl>sdFn) zSnZOB#}oxQ>w@%i0?r&$Fi)lJ4?7jPD+aq7dEX#(H)T%<o50_QQfsOIF|J z5Jz6#tL|Tppg+{hJD4?fL#Dqz1>8WF{Sl$7@Pl6 zyRGPi)lH;6u$&9C#1%Tnn~s`MH%F4&irqbnBj*UI>5=FWWc%x<0(5PfNc~ETFlPnj z-$q$^|0c?M)^qtUSS9@1UsPt@MSrTy)6-GxpDMGh&U3BGjFBpHBH@A(U@IaR5izjZ zSDScl#FyiRYr_Kgv>smnMnASK}}MR zW3cFI7B&_($LJJ-*g@`)Wbg5PLC(3^CH>NJi6hm5rvTJy9GZeN1}L zm?vM+D0;ibR#Co1gzo=3^8X)6#cK&~%Xv?A5*ME&j?N$w+X%ORSt|a0@MBp2&!l1q z>p?2s31K~bNGb;Pg^rPNy%8xBi;PeOwgSL{Pj@k{Kq8|mY|aWYwO3QIg7KHooj)aF z&iN6En3_yV#G+3{+R#4Q6t-AReAxpgd*E&D#A9YZjSHY-hCbFR-g#|of2Tp4+sD)c zH*Kpq0^qa-D<`>0D-x@Q(V+FPI7|$A0LYIR@&J%8G2{V!+)o5- zdIcVU{VE*x6g3&MNNxgb^3!?%9(brf9uM546^FBMl^`6qU5$eW;DM_G)9^?y9JUv? ziKQDvF)8?uBE>d5ED2YwS&nnEaM)hFfy+5*3zfIU!CrW98txL;g$FIimAF=T5QlfVI$^f&U53QrTTI`pe0$&~d)R!O4(2eT#R(?Rv6K8o zbZp${VR4x0=k=S`7C0gpM<=(7; zY~s>x_Y_NVGiPTw^Iqu9Ecz*F^#=09UC9t88-t8II3S|ZD0>VXj1KGT?9`vZ08Bu$ zzXrelx*!6l=#i3vTmG;eO!w2;!6b-W<&DD7DD1kxUE(e=5o;tGiHOHJ%00?;l)eHG zVf~hOUP}9&b=BgF`0ZCVPj;CMelRhLHsl9KkB)bW5zUu^AG|?SrrZWUU3V$f|LcH3 zoki@1^51_KUV%oJ3{EyX_=(ps@tMFb@e@E1RRA79dnNw-Fx9khe#to3 zj{JeWZ-2wqm*5*I{vZe+h`)lDl+>2!_zc8v?}+{|!})p1UxfT_yS&9Gb zVqPsibOtlp<8p1)jn9 zQc-`oS6&AGwv2?4Q4M2j+gdK`>UOc?db)k2Lc*m8&uWbl(}5NgV5oIs)k!T&dVJ| zlInq7bR_-IFjy+#73l1%i!CZRrHm1!3cwIPQV?mmO}y{Y8`0<2OV?!KyAB=>edeq@ z+qgj#k%EUCcHvbwoV)OlSK?05PfhZrb$D34cufY*xh$r0&NoLD6<8NK+&VI|A*Z4j zrIsHrKrs&ORC-PS#^eun@bE3G#x^_5a>}n*9gq(^62H9)!`O%axXP1r=X=MPtGFg& z?AWiCm$~b*r@CF)oFKFDT>flUC}|1H@JYwSwNbCcKZ~A=lz2w~)gL^AJEgJ@jh;TZ zyVddLh40HUTbZVXcLln;cusWi42l%4sVB`z&tUzVjV3NSS;PUNf~bFU*PiqYy2N4c zdN?)Zu~z;#=SgXBzdGU54jt;5MPnKBNlEyH^K?TWd_Y%b#9r8ir@MHz{W1-MnMY%- zV)f3Eo&lax&_{X(ehRH;aFG|bad&W5e3sR{ReASTExWXomLWKwJG`&L<(xIl^ico~i6m#lFYDP~ag%)<7%!;7+Y*~emE30=Gmik|<Xd(*BKc*`|2^Mn7+BK zj*F2$20F?!qVBC)k@Bl#JV_&s9jkT(9{I*I4*P5!hWuvxZ;p<%x5zQwJ|!2K#wX-0 zZ*xzhT0O!ncDA%{(Mx?R<~qf{LcW`05|vi%o0z_@64J-Jq`_eyWj^`idyP~VvM$HyelO;E!=xNw@Q^q)2gw`-07>-Qf!iKAm{|% zeLe;qF-1A3lJ#0KueOPq`1D^wh=gfLLyfCdM%3ShUr(eCb*@aIbT!nu`a6g)rT|0) zj|GSTGf@i>d*X>{+di+$$;Qxo5+Y!D`^z-H#Y;Avv(-|B2IPT1<_oEA3y7iDM7xPJ zd~gJI8dJ>Os^DdFNsQ3LVoQ33)LmLR!Q8XijM}1=6S{jI%&iepZ>&JK^#;5!poqN9 z6R9WZQk*Kj+w*UVYW^QXg!w;&h<;N2jU$`^AOcYs(kNds$<)9at@rI>Dq*0c2hakj zz$mK+)fOW zgJlDFz(YX{nZuZmAOA6kA#)hR&qjh6vgdebIEW#8j&q>ss6~g-fDXJ2fqs_ozz{m{ zgoZOlf*2AV&;%#dlVNta1?=!W;S3JOppbx`qZt?p41yqPs05J=5evXX(g&E~D+E=T zp@wq185apBqNG8D$qbPJs$n2CI2%;BD6tDHicEr_sMEI*w70s19_cV3Lj6E*3!#%t zMN#RR3=hPBZY0VgzJZ1$V>3ai*2~%qHAy8>zt>CiKuPHYCCU%_lbCK8>W{#F&cLv! z_4Ifw4qW7~x4?j43`7ZfAZ5^(%GgR!-|8}inLsgb|Cc)QFq{1MRN}+LX9uLS-(2>n zCN$fmTRXoz{(n&=*3yX{9g>jDxUMu6LonljdGT2r;$F9@L(1991rQ;W- zmP(+$2twU{KA5lP#w)P@s)=WL>|4 zL7a0MT<4)iqmF!>Q?yUC563h@+Ihk}O{~X1O{O^`jYbXEPzxq!NiZR~B>5wlU;rkt zu!9DH>uJ7!$T(yF5dVIN=Wt)e5j0Pg_xqQG4X;Ro5MK?2TuTzN2xxUX_Do zA~X!~BzaDwtqDF7Ca`JnGI z3S<(JA1;BW{DqTT#07q+rzu3rDEJ{v2Y&e0FJN$LF3m1iomS-#UW(-#d{=?^`Gb>Z zZU;?yt2pqQ_%g{4Y!^JBS?s-oYM1MiKj7Gi^4WXE*p7UoncKCR@=5$s{_Xr{t^--A zpec`Yrj;0z_+UJ9yPj)J_8Jj>%w=xLz!!Od4*?kR*E90AF9>tN!;j#O2hK68hZ=?u zW)z>sou3zYEb@}|6fD~?STGc3*cTiYG0MHdai*3Z^0?I&rEaHjr1K&MKUe`im(%UM^w zwR&4g{sFqnNj&IWbwjl}Z3*2}lpR*W27WMX7~C$IldV%+SrJ>4t(1#W7j2*G^7;Af z$S84T)osz|&kLrkiNQ;@hyLcQyk4Ua9gYaX!>{2D_0HGukfLVsRZ&ar(j$0Sk$8<& zIL+UyL-tm88e@z^rF3m7qiidm?h0rt*89Jt_G&v9>@<~nw7g|T^89f z%t{4I`P_BVQs#Q=k(%;*(o#Og%}xHqt?ljUFJ)}c-)1e+b`0Sj*(#1|79SHehj z%By=%PF9nN#x-#mtA|s3t1#9H=L{AE&u>fkLvZV}-bEIKPY>XOw9$F`Y@Dqtn?_l9 z4d;C2658m}9Y!Q-thT=0Pj(Eg4h(6^E5&4>0h)4H^CqzocS2g|!LT2K&#lO-S@n2X z@lsm2;O0iiW_Ll;a5nR7v`BbWlPOzKNODRyHanYY)PQ@O85;aDsiQ~*A(`!ePJj27%d0)78HE-G5F()_akP^JIO|3C*i^a~(1um%xqN-rD$=xx*+PzjZ-_uZ) zAc`2nT|~9_L1;bn3O4~FL`EVoq#HuBaA15hIB#(j6lBN1p%TK zPynn5U~vywLq9u8!@LpD#SHCcTX!+nK~$9#+VrckGBhcGx>6n;X=}zM&XDDG>03fNw8Z{SGehoMkS(LLEdT5kwP_o{kaZ`aU@wQHb=cO$1e~n?!6TsPPEa_^`;&Aawin zvH%{`U})<^J(n?7(6A_XDy5%sQb?!7BS$Leu$360fu-$VW}^IO(@QdJdV#(Lvmy@% z_NikHXnNFuQ7BXjvq~pY-u8ke9c)G^9_S8vr&f%nfB_czV{cEyJ2m{Y-mByP(exC2 z5;^(&_sit;6faG0wFyx(G(M$<_&KEU`~1s7&K)DF@Z;S{rs~aiYMDPNp6t zOu*a}gMUgBZ-%RhBQ&A-bO<9LFBvtZ3L7;o8B6(ez@!?(eWzrw?`X@4)tKRC>&1uv z5nkNnQ%SsN2fP?6EB2I9M#_p-8xdJnyv;%{psYA*ADLA=)v+hLbzZ`qP_7%{jOUlM zrcQpCEK-q@E~DQuB^)t64Ed`|gjYa<%- zK9VC|dXrX|+3;kP9LP8HA>crv5v9Ym!=mO$+t88PA>;t$nqC8I`YV`75F>#us8DRK zFjq{MwsKp!!R$lE!LX*6lf}aU%P+PfCAp^eaPc6Q^k&*M{X_J<(;m_EU|7=A4vUnP zaF6)Jz>@x8z~H_ZT4Bs4g-YZQ4wGZoRiM12!D*9=l%IGtiUZlwv65Y|q|d+ujHMS< z)a1gLOG)!xqmxn-#h6Z((Pu?UNCe`0@L5@lvOb;WGk}yGAHH-}Wqp%X1xxxOrJk!@ z@|x^4{DsSjtShmwqW{g-f2yAMq2w^|cslW;DI3V<;ZX5V?lOQougLbu^pXW;YnDZ3 z4=v~y9ZD7@=X#amDLD`bOtHz$-9i^2Fwn~18lIvI;jI~Qv?h&Q_q}($1bDQMIO0mV!iIUHyE3(&|#yP2> zOqtT9bkSi^L=hg&_QFp&v%MrC#!{BVxol}C9`;-;UsH;6)MCzp@+iAx+fy;;i&zVm zMfajHxem!cp_udKLkoJE1tbE08CK&($EM4*F!|`M&!TzgN#CK6Lm>rn5w=5k&au=U z{aWhaWL2xNaJ&}o;Mt&PK+1-+OIPhC)r(+8(NmbK_KoX#i)8z=4cD%f&RF~fi}K*Q z1&RrVd5?T#RV#F1-UxK$KCpk_@?hzmk0=7+gL@v#BRdG@jzsax2Qe3_3YdsZgEgpoxeKB-Y0Wh{LmGLS6$4&Q{Gk23KH z%$B8<%01WP?hfS(H|4sxmrs#4wB3Iwjm&ln%&yILLNKu8UWMc#+*}b_sOazzMRia* zw`ytPgnb0~QDNnrN<30_xG=6vVV4|kUl~@^_ITZiB1&P5Yb}Kuch?I>mcYc4dq5NW zHljQY&_t{EiC(JJxr3jaIm$S5lvx-<7ntf^;?)n+#61f>nMM##gf2QPf=~R-fmrZ{ zPSONh8djXx!*R=v{RZbmW(Vi4RVN($TYB%JETX2z-`!AdD4V_>|5{hJi;}XC?N#D( ztF)xMg?Oy7I{xPE3rHjOYDUEOaUwtST@Pk*-#`Tmo4$mJLKUpDv6@kq{%C@GxDSJ~i zyo#nfb)4(6R>|V_H)TG?l>?R!?Tka9xELxH}iOnqMybfcW`$8VHx29l_gCU;CW7CS$r+qXySsMbj^Dv}3S z{2r#SVmI7xSs}OFFRFEXDZ`Y!Z=)(9KBV?d#_UHFYpJ#+8VfF54q;)lBP zVib)>oobf1VCQ14iLshN)A6-*!#%jUoc`v5PDRCKaZq!O39m=gYE;aMUsPF-AljB~$SEHSa@aa!w%#ywc;N5u^H`2FzZXSL^iWWm>DmKM@GUMrgE z4K4JWEq2jpeDs8-pL2RkU3LGCLEexIGDja61nOSekRtDUB6P>Xl+Rs8807v_g_$S! zy+5!0ogQpVktxN8Uxd_ha0bxhVF>B%zBiGwOM!kuiNg%?2l4YnDmwt7kogLoyTBj` zr0moWB}!A@zUxnkTHIWcokew1gYxs_qUFx@YiQ{w{UDH@XZl%1d)f%gV`) z2yTrFWv*?Kkh)BO(D&YyL04=HG+>s_M(@$qcpVv7TP3et5&AA(Cw9KDpZZ$5d(_!F zA+^`Y&x`JgZG|)aVb52wWcLv;jcx_SI9Qf;sYlUh@R#kM{_A5u>oI!t_JY5n8gBW2 z`S0E%vU31eP;G#f${o`$9B4>G=)?7%BratT=DWLv+pS;d5~ns8;4$CUuQc15$iy*d z<*4UUjY2IE)E9VGjFpTi#+Z$a_IHHPk}*T~JfjgyN`?EBf+lvUHF}TUvavB#3PP{c zqbMu}pW(n*!0=^!#mHXI$YLB|JbpuY{N@w-#rK&0E435MRbEb-Au+Hf3LU%)2o-@i z$dzoLg#%hC2RmSle*&6?9ASZU3oUt$0`F3kC-0*W6x)G(o+D-Pa};?Cc`}(HG&Txl;r!GerHTyACV_OEFV4rP3XrHAY6w} zK%@M40!tnLJb@L;KTkle{L2aW1&^G-3eKM=aBum@39MMwiR8%RI`X419mty>4mbbC zMwp)1rS|AjZ`E<~q~0YudNtjeK6oe*v^~ZYK?H;{zA$l^OTBMQ*)lK{)!OKCMAXG= zjv`cT16~O^krdHr9vp&VB)8CKXg9i*XjndJZ3uVyrx=eU>buA#Y&RSZ!Ziz&d@%Ag zLfq&t<58u?3|6Qa+NNE3j%H<<4eAorR7Cq49T~%#{H-pFT(au3&l+Uw>J*(Ze%XE2 zK<|w4=rhJ+3eOmiJ!5>9b=H7+#@L|vjIrq%Jb^w18 zH-Nv4M_XwVHDxh-3~Q_|i^0Nr*~R=p7Aof3a*O$M;LRD{&az^QfkE~@g=dVMF>F)0 zK!-X{Ei{^^KP%C67uG$0#fX~y@UQZt(AznNPYMIBry2x3bG^ko8ij*7ty znBCc3qi5LJoxM`SM-&}QhwbV_?Wz`5&TFWj1^w6ta`I*CtW)!q@(UWf$L}4fMh2ey zCm`L!gn;(T7`Wy_4c~S6#kp<^+oYaBuA7WD8J!eRMj^TGA!A0SxQc1wso~pmIFp5E zJ@xeJJ=;A;V@v~fD9zA-^$2UD6@BW*8mC>LPaVUS;S5$ky_1(I$`oy7j|!9h8pN*b zwqz{y4xAyz(*}FgSSN3-WUEoym$u9DmIuLmShX&V)H6h*S(~|Sv`#2mzLFDA=FoP? zHDoL^Pf;klFK$eHWJbWF$bz8YF@~GDM(Ou-qaJ*i zkZL~0&48t+!ZJmjEQrisvwpPDV36S(Xy^(5|1)>G_dH+z}gxUn)@?x$VqIb8Q> zD`ze||C>F14O(SnG@8oPWx0#$<6m2}#*SvSC!!#u)>s4hzyRK>FgS3L-Wq!o4%}q5 zBxH)ORyzFjIeA(TSu*?n)EVFA#I2hfYcn~i6h`hu& zd26gKw>{Aou2KSDKqc^%IdEVO9B?NOxWfTwIN%His>uV@aG(x8s8hAZZsxYf&-h$o zU}TdnLb5G61}tX-mM)8B%eCc>X0hgQo#${3SS)9*Gu&;gy6B5_(VZ+7*(7<*V)5Yj z`nR${7K`7dzFl^f709yaQa>r1z-3K=XQ$G5gRnq{&;vOrQ7&6);JZMB=ZXiLtDhRBALhV2atopo83J770gwiYvB zL3A{(*@%So2U{w&hl{Q(yWg!7A(~D^%4OE@@3ubD#9dHRd~W zh#%k8wG0SxTjJGJOPbePAx@NOeM^13edYCM7LUib`L)~@N{T;>V(e(4?E8Jwo>_MI z;Thv1cHUcKufn$EU~f0(9Ie%x#H|X#ba?^(n2~LM@S*7RwU!3|LDQGVC6)c}Ul#Wb z+{)4bOG|SCT++shi`%s0MwymeT+=K-rOfIhxMgZ8ZZ)H&xK&PN;#RgOn3^qPV(M6# zf|}V>h_+~p{H`;mlf+8ez%p0NESA{}4HLG_qx zU<1gr>V}n^S-{hN9oC}8`gh-2OH_?D0j**3+kCLR)>5s;`Z}rh${LLtYt0&K?HX$x z!y0Sd8tdw{`Uk(Lo3iHCF=u^enX_7-tWa~-fAnjkr4Dmn9GwTg&(&D|?hDjdVvseK zE08)y8m7Pd>KGbhkUEBr_hhB{8G4hO-XzHtOFCAgR&U9zFC1N_E}^89lji#s=i%xS zRlpe?%z6yrv+4rLOeI@o{`BeGQ{Doi8={^xzQOoSmRLwpGilo~{e$muBNhpSsDO~R zc6i4tkocGlX7R?S!Nn)_Nzgecsw)?Y0dzQd%sFP_%TrXWBMf*T9Y0oxAWRTK$3+^V zkKmGU$bCpiXSazr2a4xHli_jD(O^?Rj8ubUdPQa(I4X8fhE#{>nB6A+aS&6V9rr7{ zHI^B!&khAnd|Rn8qeWavWEw>ykg$!EcafPp(Q199p?1MaKQ82RA{Sc2>0hohx-#G@ z=ouk`;@&~WnElIjM^{eomlEAD8|HoVAOp)HGmkx(G{OgFlx{4;t01tEFPs9Wv5waq@lV&6Vr3!*1E5eSR+2f-vPR zPRHRpA4fjVIFRmW(UoIgO39>^dRc~2ZWorJ?bu_|c16j?r!+tZp$aODdhZ{H=yUk# z3z`+>40I~v)Z)`D!wXlMeM6i_hty!;rJh)~bM|8Fmz;sN`qkLBLD}G4`Sdx?gx1Mc?E&49$gbF zWvQz>hoF17HL;&qpAsG(`<-Z*v?eKJSr7M~EC$dI2(_eDPF3dAC;x_a_DmF4x5 z1NUTS)eoGW$^WToPprMJL6eL-vXn#dx&WPiytrLuZi{bA8Kb({*^mJ4M{J?J8?AiBGO>&!hXlq@fd~8Q(YKqJm5Z`HO@MfK z&+XB=)(O{o&4J(A_O}6t+d5vZq*~Br0{k=Ak$W<=v2#d8qt{sPyN+q)CMy11n)I6M zh~TXMRbOW1bRWXx!~-i|8>NksBX>|bD0!OFpVZZZmt{9Qv(qhn8)Ga3aI=7aTcI8J zP|mB9Z^sNxJ`!^#2W4U9UNgwfhvVlu^ar`0VOmBc#CwFhx`ZFt7TZFt7Rk{DnJ65xKAfqGso@INR|g5Z*_ z@#_>UppIx)3{I$RLH#I3g&+Wh6e>^s*ngS?+K;wOl?h*TyHUYKnL6r`*n+LprJofT4V6@; zdMvm!y+uV+W#0m0R2PfVRTqBb3r{;8a_#t*mPSK^p1>Y}x)a!L3o_P_j1WYKRCFX5 zJY2_SsFN7f$l4c{ajSqsfnXeAETnJ)NW+Hxs=fgtIglgF_X4-c+CX%I2P8Yq_ul$I zd6hul{^8w!Wl%puk0A zSla4cs!rJ3bv3wYKMM$_v0XOSr_(ObYH4?Af6;(3+AIytFl7+-7omQ9x6OW6OBZG;1HS*KH-`7q$w#~{i(X3T8*W!Ob7sk)D`pfshe-4Nf82Z zZof5?k3#Ji6Dp9d#lPlj!#m;fEHD3fXjR`bv#h@=4OVAEX!JRURAt}lCqZM_VvD)^ z4O-~?Ehg35RtxpZ2PNhL@mcX~o}^aNpIs=hNJ~ScrX!4P^Z&_5O%rjefUDx+L(8mYu?wZ< zU{>R3P~B3QmTa4!mJCQL(vqK4Y^-moT&Va~EUp9=DxOq`WG$5hk!?OfB&h%hq9+v) zJg^-e*bWb9Zx=awkV_lhHX~Y;BRSxs+|;&@XDy5DDsqR?!M8sJ>Av)pGcz;5PcvQR zQhxB1_v3s0QT$SV@SCg!&JQ#?+kAFDo~frmV@$q?t?ji988bGT5XpIT(y3QB6HWrS zustMm7t9bGhk9p?QqU)QvwD$m9$>q_)4L@$ewZD50MJddunokjL3+ZT-d+qp_$&v` z12FqL{Yiin;KvboL`3)jxSUh%g!)SjlhL)K@8e?XH)4c_!XDZv`K58PcG+V;UoGB= z)yX4|bpCl9pb1n*1Osu7$dO07|2&4l$0(M!ArK2E0K%TL9@_vxU+C>v2}d_=eyRs~s&NhqgF`JZYuH-}tOUSWxu3vKaAx+Um{L!v z&o|ii#n!>*p4NKgYLID|Xv||3HAsAV)Y{CDsp4MCgkcGL5sR5#Z!*AkX*KgeC^=rN(G@Oz_)ORblUuT@f^stURcFYVbW-R`>Xldu}8YXdZ!zA7p zi!sp4*JLT+ZRcfnzH!cqxp#+S!eCMY*yMZ+VM6-Mymwa~e{!Y@4pXOAHOw&3&$R^qMvSW|* zG@PX^U#K)H%G@7J*Ich=t1fBG;svKPUA*}^38)QPOek-9bG$F8Kfy6~J_y~PBx&Sa zz*JHx^$sYiVY!uHk42za?g=dRciQr>c3N&;BR{vg@U*jQ83LuohRDhv<=3l; z8~~dfWSMcv%d}e8lv}(@8D-$#8AEB;FO@gLRe7b`HaBi|6A*<0cP=K!aauV7-apG#=V<31N|#a92W zy1#Nc=w%r_tx9iL3v*L>-Kr&;>NUk{KIwDfz2Lg>Hp9kqf30ZhZ)?514xo~eFOggY z1aS|rA@mX6HMih z=A9%uGAr~{W*}H~EpzDQde?cIb{i1M{)kAf`q(cJd1tzE({ z{y*K9nl239Ee1Zz>LXq6G5Q*Jb?B&$?9PE6a#KG<(LN|7P5p6yMp&!|8(1%%BAjAK>QEG)CNr?GGW_IXVh}Rl0Mh+^U9f~ z2u>K3!NmZn?z&)UDL=Ab{+w^IQILtkXAGW|WFk+%2YREx8BzX6 ze_d?J&}X=>o-wFVn=z=FF{qs}sFN|M3!n5d2K8?aI^{P?KT94qN>4}{rCP0np6Muu z9j$|oSZwy-S-HlO;end>)!){#js ziDeAn-fYRTjhV5Ze`9IwuGOx1K6wp^SU;oV_XyA2Is?nH9REl0a~zFUnX3LppA(bb zRrvU8cv*Pw7!f--9u^A+8rz9U|K2g?225NuzM60_d;fwyvC{v!7xxJoZM6 z)Pt%G>=r!4W3$T8Yxt>+bVqI229jpAgUODKv{JOW@gfUPsL&d z+;RJ_aPi(ZAR9)UzPjazeK%jbBST2Yg9Z13t=*Ui-o)Qy6-_%YV9G0mkp4s2QSb1X z3#h+jE{l93dHC;w54*@o!l{4_V97#EiEd8$pFk?h_|e`QK2L z?yZIf6aq!?J=$W7I#4RV;`zC-9qA^eD8O3_rvkv*#+jZTqu#ExpQWr2d9+2qGsH&0bwb7f=F4WUBSUExyH{;+uNIVX z%F8&x`ECL?L3Ms(&;jIToB=1d(88VXXL9%e-4oF7<1P}^-2yCqPu$0N5=s#v0=Q% zD>)3dJE*xV>(RHWl za_Y+KM0GO{>IUoH)_pEaznuMC^^~CtdPV8{`n9f`jJZjI3!qeC_QMpfS8SI$bNw^p zEonXNY5nDczq+;gw?(uCUHJI9aJ7m%cjodFZ4gx1|9|dG1x^oJ5kAf89nFX5td;tP z+z4$!^L0GL#RE`cG9FZ0+?$U$P^M~$Onckp*2`P}prFj7cdyuv9@05cisDTar#wJk zF6^!8z10iy*Q0xTDak8T#WNkpYI5C{4bxvS1_~t7i)|v z%Hb9bDwvJ^ig3fqhj34Qv4*a(SfjaEqrF(8vsh!IyI7;QSfg*<{4vCC9I|dkRego*waue@Mu8`)*DBs9(!kij+Q7wNhXHWF0Cp@j$Tz4mXf}9g@WKFi zZvcCn;w*8FxbM9IxM&=33YUX>iWA|2RD-y;xNkVXmAIQoA`Yqii4nvEVkQxIO1wez zGYB`ZGWbH&r1(*IqS39Cmj)jUstwX97o6`eR@zG_;H81+CXK-BgAbfqDNiV`DKnJv zPMk5#n&v{=vFl!>$pwII60zzOEoZkPY6*m8SOE&=3)*|yA`Qc^WH>Us7(f6cnsJJe z!zgEn7!MeO4B#!}8$*}1ibZ0%vHV#XEFgiE$tq>tV70TPtO?l98PrT#kz|*&HOV_^ zeL;Jq38>9TIc>LBl2(P`R znS+{5J$^3tTp9TnfvQ;WABn31KVPXAlDOH#T)H;g(ZQwb;?nhS z>H54@`q~uRhCkEy#9o72t<-F)l8VZ5lO<<`$dVnBN75ZfxS65P8`O$l9YYm4uq({7 zsiuOEZ0fQxL4+^Xy836h&9Mo^SK1O|yOwLgz8m1HC10D6SRnnwVtbNphj+DR^8}^W zryW7>jqF`QQozMt4Vt)jp?9+PK%Lg;%2DLhu-d1WSL;Zlv7`Q@5u?D*y3EniQDPfx zX+JtK`ehW*RIE_gDYh!S6(NdvMY#KLgAj8w^ z5Q`es7dwkp=PzIE?5}GTfva^5Rj1y3EM@#y92t+l~D^;Ewmo@f$(11;S=Bonra&@eAHn% zqg{VmstNvfaM}O*HDV7gJJqL_cXQi(4KwHuT14s+v8ZE=Ud8PxIB({tofe2?k8mSQ zB>L;(VPa8ig%;pO9gaNo5Fu*qT3$aQBFF3*Mh-s-+0>D=_7E`>AlX0UJmmCPHu^OB zJa#iA1BT=VH$I2Y8Hp|7lyGSIz^Jf+`k0C)u83Y1MYKtjp-oBMRKxdcM94dwI~7n++kIRJdX#;HEaW>YKiwWBF{o^DA2V6Se<^h-qF2p90dKqFl3l~H3+ z`HDXVpE2efvZ)}h?~vMcyY)w6w1_son^z;VsV4p&BBZmxS-^~?3IM7g%J(|cD5B1@ z!R?URNbGPU=B*$W@Q)3HmB=Nrh)(9!nLchcmB}@$mr(FtBTkaIL+;aF|A(czXmKv>B2BsbomHq|%H3sW zTt5t5XNuHrhl9(_pRweu>&zEBV^&QsPXcU{)RzC2lwiV4iaT|L5ZXD-Hg#7F(B8Gf zFqQ~Vf$f-Q4DI%h96Hgf{fNi2!|!e~jN5BH`y$_o;uhG4z-Mv3KfFVXpJ9bz3v726 zNg@F(O%ol1ze7TfMIO5QnJlEzh zQBRSi_XB{KI!dL#PVS_zBfbU8*X(W^g25c!S4%Ubangb1ve2avXjW(5&WUH2n|ikW?M zp9j@48lj{}GlH4Vk#s2j2oi|XF_#vKRsRujzrYTu>M3HFh}&hCX>8o6q*yfG&RfPs z9pzAwNN)8Q#AQBffzUjDJGi)yiu6HQGzT=$2p2JL|H_S5?Pb~2mx;epzJsNDO@H^6 zzxExi(1VFSy+#D^bY+%=8&Ttfdj@fv!X@5`18i^+hEm4OZ4YK_UP;(1oJ#TUTbyB_ zMfV01EypGr1*rFJi}xX4WGO+F4=*nHZSAHJE=OqsWZc-SyB$Qh(~cnj<(WG1_rz+= z8nq8Y^=_zA!VkkOk{^cePPkP)N;qRa4r3|J9XD4v#B-2>nfT*ElVgZd2TZUChEfvm zBZNfHxWHyzed*V}W&LtB7?9yAk0D$J;dh;6vlM|YC4BAM(O-((IkW}t)74!DHCzTY zT?VyX2I)F3gSsw*dM<*M_7k_P$ypq0x!0L-e3yy<461hY|8-7oy(n zwse(39aAlJ`5>hc(s!rQ2$5N{^p&GaOr9B+v&y`8iOEZq9RsK*la`n~n8?eU3~KX1 zmdsEF+Sfdv)6w=?ogC9RAFNc&*UsF%uQ1SFTF*OQ&fK$>2UB^|3R74oL=|kTLc&y@ zeA4^XY-c=*7h7&Ap5rNz>N_EfeA55!3yItDF53wpuWzvRx<&7-vUNfH;F>JPfHe=AOe8|Xl!FB^bG87&HqQ0{Ol~tuWG(sA=kVX*1 zjoU9iNaid7DiHL~8PhC6W`f9wg5W12))Jo5X|LG%6aPzj1QycYs5}}vQ;hO|BHOsg zj}#2+v{wRT#S)&{YnsO!uh0>nycB{rxgab*Er#d@4!C_NUX&(y=r@g&N@pfqz9Pi= znQ@GhCbo(2CNVZx?REgdVD94rR0puJmSHBblz4zxt0OMB#MHu@@NBSKLN;Jc?h@syyl<86w+zemC^$;) z_d^!e;?jvLo{w_liR+rca&AY8j8X@Sm2ba8>b>dIhrI37=G-bth%Aa`4krx6fn}lp zqaF)0qh+7B7Wb%KU}EnVj1^4?A_dsmunWHs?-zi!>zYXA-14pXRm_bc)uFM>>hR55 z3ZTwwRnug@S;}LNwnKF)gbEV>N!TZN*k`b7{#(J12Rdx zPh^ob%O#4!-NkYVCq%ggOq6{oQ@c>8c40MUwx|=m=w>a3moQ0|^QgOTGMkd;9<=3f zD*wT1?JJ&7e=+Hg;(72ls)Aqqi=dvOkN%mLa0#(ZQWbVX^6TsMP1r(M@Q79E9%k{b?M_@ zbj>+_>U`7xqDyO{%OqU~&6eQGrs7U3MJ-z=#k4d_hM88U6ieGF zxEiM;VA?n(zlY9w-`^jMFZ{vtz=!9)?(4el>pLr{`+F92Q(7rUX1$eUB}!X8T-V1& zS+k(gq@>|?e9=r)?%k(6JHZ#LE@YqHU1(6||NW;_NAV%pL6%)^*Wmh1H(WP-m!ZeJ z-mr~s1jewy)kO`jPc1O~^vo+y|fD{YnCM>HJ5Q3O?wOEz;Y~|V_>;zGtyE5s*$vmnZ-2r7uW1Bv z2R%mdSM1VXJLsW(ETimMrgNWlPJYL_oNZZtK=Oz9oY9fN`eyV6U!lwJIiSU%hg|9M z1MS>biB5U{ng)FKeV6)os(wx?I<)LCI)nZ{e;*1bMkgK=uW?+TMhI7K10s5?D4gL| zUJ6JdU8Y~A=Td@_-^7^*x&(rOoM8%(7#u{}Vn+!|6Q_+p`N=}~q>X{ZrzdC^X&1>^ zRLKJ>d7&aj$JYiIc@T*p-XCbbf797OD1zu@FhLyS54sE8g~hpkbiee;w2KZ!Ft2Og z*}{5q?8W*B45j!9P;GqQcjbleO1~@M~FFaf7 zZugaNn0xq~Nl;~WJkVaXCFGiSY?F+M%ND|}Ho$?5J>ws#KB$bK);K8ovjxy@aF|T1 z#|vYg!hl8+yXgTS!sa(kON|n%6=nkgQ9nGMOF1+L{3QmZeHas0%+Y3Q$r}E4UDWi=DM{Ag<@54 zlW_ZSCvbI;u=Cf38@QJrq3q1X=eQ3zwGV}k>**OyXE~#$PC=Et`jmHPIcF=$&OWG9 z5!G?5WjM`=t)5#wQ~SQ|8s{qul%*mVzixkT2B*gNIPei&R(Gy04c1-vutMh{wgDKe z+uDK@eW=Lna7iD1x}?R(q9wW7e*fqj>F+HAS10jJwjv3*$u78{&pQRA=>ogG0Bar` z&$|UPf^n^@jB@2pa*?KvYl$=KWIjQhPjV#YliVngRpMI_)%n3HDTFgD0Jg1d;)&K@ z=X2Y;R=?&;K<(e2_|)Ld?ZU!O?dtoov#%ney7Zt!{@vY!C^wD6qB(wyd{t(Jk3Kz5 zh-FUlGw%AJ-ksPu{$*$Bj!LC-t5vR+8H2-yL;Hoa2l=3OOMFm+Zi58mtD=Z%^Wa?D z?Ri_Ct8FkPg^E=|1F7Z}%r%Xc$lX73bWExAsZtlK4UAw55=HqILg|u~q$?4?U0(|! z_w^(ED;S2elE*2K*G5$Thx3kG^k4Q3{OfqIQpH_>V7R?fHGudW2X4E&UV0DbHMw=% zd!h^1MU1EoqCrTQ!-85hObLX9zX9N4!-g0HVfx^N59&s0)mSp(j%~!vmdA6e@}dtPXCG6VyqMc zR~YbDu$9B`E9q*RKl`AX$wgVDhpbKM7Q&_OMlj5BX1;o2n0Kz-{n-^w&$W8hhaR%D z;Bt7FQAeI5SEU@>cWjnr+=a!WHpJ*=L~L)Ru0rig&zaWyp$K_|*FZ>VT#G{mu!DuG zVK4^`goB3KD;P+t_d@jLuG92WtcGhiXlPz?(9m+w&~ebvbuPCs6ow7QPhCIHe7(~TUl9Q8;r`~>#csZ z@}}QlgT|p%Kv+lLju_LH z5#6?oq%GVZG)xSz!6%GV$Z%tU@8owm2HDH}y#QKOtoUIJYMMKhpA$gS# zv2_I|DK_r<52WW`BC08QmD6V4t{tsO+uLGeI)5PF^TY+HPR?0VXy4%*1e`8F5?`?5?p`2=XDLODLx;5z)F_E#R5x?dM?PlN~frqx9_Q^?>ItTdfW7oSy z;Emn|=ArWs<4=*wJSdwf+7w$^UZ;a1!1u#AQ120eH@=iW2|Dh|+|e3GY)w%MZ++pr zeuB_J>8Bi~*vKo&Hqx{Md|CZ8DV>Tz&QSDm-A;|(6NI&?ME}&AtIK}niBF#_@||w# zNbs2=gieACTY`jwQz77K>fp<_4^OwF_l_@-MFEjWjpnrb1 ze3S%+bB-HZ9q@Tr-Q}NcNy}pm$@9c{VjoeGJV`#JXvdy;Yq&Y@$rA#2k>Mk9+|BMN z$U5d)SdkEl)-5b|RL#x{WR9)?DG3_aTwkGk?*Qne4bnP9ZCLNC9oN;lmfnc!QIQaxMn8)5* za+W7{CUuC98%s>d;C;5L$FE(9_~h8zk(C{BPm79ri${uWJI~s7hKeJ(mP$x6 z=#_LrR@x7$Nah<4a3xPhck!P*!z*B>_~kqW&^cwg({^hDaWP!Oz}3Bl4@2!}L0NNv5~%!l2~m>mpM^JoH;6D|0@rr?XY(j@-f&?}6ApN*0CSpa-?>qw3p7HK4WT_ED|vqdMD1 zb)kjc_EG)qqXxorFu{2+^zj44(CF^rF@&iv!o*Jt%1K1Pr`=8QhCH1K7inv0n~T&+ z>LPVt9t|@$F~u*fZZpOIQhogfEouI{TA%A(`$lo1`|=-S<^xMB{Lckl)Rwvo)J+U4 zlZk`Hre*WD51%zfDFwg;Vc@4^Eb4^t-)=@0a3VQTn>(dYs7Wn`f<;3 zB_D7Z+*tJGioT1M6BME)Jv_PG;j^p~=Q)=u9e z)9XZjr7V8Ygpg$?a<8Gi?xgf%r^k-NODt9rPUDWD&)A1Z^Q0Nl1m3tpFpKdsc!Y+! zi7a+|ejm4%3v}{$?c-CP*)9buFDls50+Q@QFPfuWgMA$Ns_cbscr8Bpz9wwc|NYcS9b2y^lP0t$*4~Aot&DYl@xGP7)ezbcu@E^%9<* zofabwLi<M=3; z$ z{w*F&pf+=NOXwxbj?$LU^S`}oudn8OMi1Uh?Bi!w>>Vf#U$bVXpA#SD=GQitx<(_- z69DAG-CKA1XJdO05?(lLx_>PZSSjuy7~Js&4Lf?7R_%2pH~t2`YoOaT9`5sX>UCGL zsi+T+WAL?^$N6XZtzEmbR}$(-=91>!Nfsl$2a5&{auWY)g-2>{`+tCw2t$2++BV-P#9@Lmu_IN~Y0!^DNB`(5lPkPM>4cs~g|I-UdE9 zdO3IM^mzIh?{e9j``brKZdR{7_;Je!IIwz(k)Nhij0|+ngyjomL(d|Z6C=1c6_b-V zt)rC&vwCjy@5CN_Ey>&loN83EDapH&=I`yIodP<|;@oEa#m{hFGxq!akA$9{f+DaN z5X4-Vx)KIkmU~Om%Vg)3y&0R8e=zEt>WUwj`ta&)lu|J})}U4!+`j-bo9kCTFS{kt zW*T|_Eq~smO#Qwkb5aTIOJk@)!_^^cNm&!s9H5jQK`+h8LcqF}q+PT`ruBeCvx7dE zHwbi|1v)|4qBbm7NOfJNcUOr6$A1U#q#n|K7Q2M^b-O7v<{=S+wvn^tE3 zMP?;tS98=y*3%TEXWRpJwO@eFHla4`9=YF1Q>iK#^$CJF+|}QVLC~>sWC1a;fV;g! zKD2F5E<V?2G%NH6q{$sJd1lk%Big$IR!SuG4XnopZkJy4zBiQbu zHQ%hRquI7{@|2{YM<6Trms!cR$H58IrZ?9T_hJ}(Su*chG9+K z*o4eOcZe7EYA@{7U)Ym1Uf65Cu-AHFuLCV~U)bxtu-AWKZ$MLr!KfNiTPk+mgo^!a zL&c)Bd+>E6jA<#>{e>OI6tEcPVx8C+)0_Db)4Pc^K`6_MM0PcF6;yH{F@WzAqM z9yfT-U~fXpn^-p!Vy<})9>G@Zm2N28MU$T%+S`O2S}KL?N;8(lA08oVhio`o0-;=J z*`sCqy~p)uo;WO&^6p|4w?0;%^B4f6_zh%a@paSs|?>64|Pv z19Zm-_7Q=7d9FlO$Al}%WzFZZ42*i*SGYB-m8hIT{- zAz}>0J6P?OKV=6+g@~QV#G_1NMk6uaiwM#-1v?o~xscD35m8S$&)LrViIAPhAznn< zRU9=PNMjNi&BPS6iY2RQT>oK0!KZQNa(1*|!Dpmwu1Z zy%iO1Xq~{LraLtgGk%ZKyA>7Dl8PrruSKa4G9$ugHPJtY7W}H(CZP`_vU6_9j=TKp0G_EJW&+g5PdY z`G<=OZpsHleB=nT{PwKfnfDMp{M^nKuDFlKCtcruJ*Tahqis?@4a-u?c3aza!;-V% zyc*YbEne++!uq<(fT+5h>z6XCzh}W`ifUHdhJ?g46ZamWo<6jM$eJ=EW+4{QR4#-U zPt%Vid$CT^_BPiW(QhWiZ2iUUoKXYxj|S6Ih*xi`#avP`t!r3G)^53^-?8VHS457; z?%imuQOE8p6ZF+Rtz+?8#qv66R-U}9Wdr%hDVw0wmaas=Ca9*R{~*|sc1v)sed_2Z zAP?nHx4BN)GF|?Fomp2@2mJp0eBFEge2Zq!9gI02(E_;h9a_9vc>J9$F?@DQSqtDW zcH`>Hk)xjkY$^W}pFIdnmpe&p2R#NW9D@dn$1(?jYhy(G*}>L9(cqK8>A^39fX~wjN$^EfcuYICmgB^}#zztxPI$D=SPWK|BZ^Xo2 zktJ-*^^J!yXs5!(c!zzE5&+rwok|joiJQF~; z#MUMgm5I`_*@W7J8f;U)sP5=xYef%%=$0^+RX}|@@$1G(N@kD&C`4{bjbfT{bU=d_&Dib4Dx!ano#RF^cvnB*Q z0YBLGn){lYrYO0Cp?XN{Wy9??)h-0!b;z51XYfa=H4MhqwGEye*@u}$TC)SJ{bX%+ zmDmmLJ)Zv^BsqR(q{@Cw&N04@dW!=%msDDHHB@-AcDne8K=@47Q{ z84N#+0#F%f-?%cZ-ng=Q{-XW_6%SZcMfNuK19mv;A5gK5qyiOnev_XeQ1Q)IrTQAx z5sZw^dPk;#Qe65|0ek7uH3TpPaw?nb!^lQ-{tj@}33r~&kEBbD8)PL?W3!Ku%!71s zv!m2BL=&Qw-Z!St2?!~qGnK%8%87_sB$skLap$^u z-kFeSTZw7MkSPpEwDta$TsqiswHOj@#|f*n8n9tfgW{^)iy~1?dT&X7ix=UqR2|n@suhjN{tKl6zlI9J6Tgu!g#iJLA~Y^uB;HeHN{wW(^|Qy zViZTbXcxIsC^N5?ji4)zogB}HK!(6CvMzlN>H(bQkD-Ja)*ko@3$7Xd2vdHl+3|*( zM*i7pTtU^2)fXJJxcduOPus^&tZvzOxzH^K974dIs?Q?|v9RhE*kGF$SFL5e$JvGS zmQ5{XUq)N-6?bGU@LOB3OU|M$a$o==#79*Atn3X>Cf+YklY;~3{d1IKXYIBY#E_E| zj@Gwx26LJnf019bn?zr#Ig8}kH5X3A@u9et5afB#QK8B(fjy4sK~tz51W zs39T6S>2EM1fqs~h9jynKBpVOX@nnU@o|_3EYvd(29u-ACm!=oHy)TqtbEK{ zd~Eqhqh=abBQc*<>z!rFn^#tk7(2-N-Moy0$^@{T@+*v{h(x!p=X(3|Qf#%=QXGD( zz_BB(OAE2)Ud9hG3U?ER_n)~)x`h`~K9Q&x8BSCn2yqK)a}yc!eT1yf@VEuCdfb9W z+=6D@f)=#UiCfT(ThNPJ(2rYS8ysIyOrD=FQLq&y3hjZ)gDZ@qLSu0C=b^J~X_CNvg2m7&w4;TUys|WWH)DODB-vzYDdI(2M zZnPTiRfF~qvVw2~S=SRutQKWt3K(|<>mKwur3fJuameh7)vZ_fEkYH~=7|gm$rtd2 z>Ei-gz99at;1>u(OsvpUSgE0p^cpP9g)qb+GiS8H>c^rAodYX^YXsR+(aq($Jp(Hs zmJLX_ZJq9zDQNB&ndl9yi0DSY2778jNN%PY9y0UsIW0&*#ny=Wgb(^W8yFCXIAr!~ zwP4p>K@x#)on&Zzs@L4>1igR~K0kv@$2y822w}nh2SPYMhliNYCHHMREs8&4wWx!1 zs`m)X6eQtX69*o0jne8pMy+1qAC@Ahdi5UUpgRKQT|wMw(JtuVRpX)_ROpyb&>xn` zR#iQ1t(;%zQZ<8ykd%WvsD9_;oJ5BWT;}bdncJ+$ThSL!-a*?D4{R*9tJ+zdT70Fr zzVdXjS_P0filK;4WWG@pTSp(Jc+?Ec(V!*S&g}|kZWg$x_ zWWSt$vl{BEw7e)GDQ!_{E6b&LBk|Mr$@WxP_r1@Z0R1jMZSS~mfbm#26V}lQ2 zUOk|=4fd!*uEfk(PAtblf#l}{j~ceix66@jArf$^1#Tp!I+Qwa){cDI*TDJ2u4cu`gj8=ZJNG$j7rN7K7-)Zzv2xe@6dp%`6P&KKzT+Xww*R z>|8L(lM(sz5L2(=&i%0bZN}Tk9~sHiu%_FG`hwfjExt-;3nbI2>IjiSy)o$ zMeg4f8CfhE+4~EX2JHT59cB$=ZYCsc24haykgY#hGjEQk|ANi<1w6UTLkHNhJ0k(} zS_0FAy37wgCnr+qL9iJiDCNBzoaujiBf+D!B59_xzE7ByFYS8cn|q?15IJlPklLG86Lc!N&_#(cVY+idpc^$DXRq}*^ehe~MVaD$2MC{Qy%=-lIiFO8BPiw=0I)cbLGwPe$2kSACR)JL`!2< z=H~_ML9~8T65%bXwlW)_tx)ACX1&D)BGh1krhz}lI3ylKBs^nI_Kv}2q#>M~RXt_e zs;yyx4A>0NQFHMnF{yP6lY632X^WLl_jQMEg}+p9XdX5aAU% z4gtZB#QT)O+du z{5CUqynEoH(KRYrCm=p-PL`CwO7ztq-v$Q6v!Qe7ZG&ooQ$T#sQ6h6A5N8J8#Wvt< zfr>#uye_3H;5Vj!PK9&T2g0542~6BYRz>_yAhw;Ax)XRjl@8o&RpSNoO6XMtj5i{luKtuwxwgzF*&7e#z32K!Sqpy zwCxV}4)=_SCl~PK_M6a+>BiEASo|5|VBXpb#g;t}iXpweuQ8YhGbt&LY&&Os&bXwl znpb^Ihg*MfY_C^e;~L?^iU&;q_U^-q=(>Fwy}W+pPUD*K?*VqKpB3-NA;c`sc`DE1 zsN^9{%9V0UNT*YONY4$P2H%0>WO_6Q-D1B5(TZ|+|qMr-yWJ=r47(YE1e!kzN zT`>^(^l`{@XafF<3G9mm{7cr2lygfu`s5QVKg_u=S4`U*J+7-d7b*gh<@tJrl@ct^ zd1}*5mh)6FKMH$98ox%)m3D+Z$>g^fZ4_V`zt{?xzi%VAGOft1te7EiQ$(Sv9bvDf zjj^;rJ<-%S7{Rao#gYTN0bR?T#M%>bZa;F}16TOg0eYHyl)NS87$OR@cnV~UWanJ& zl?z7;T&|Jbr-A>Y>dd2(+SmWTH;4lcfCFV&h*N0;qSmuUMn=S;glho+F&6PHfZwQbngA#_50_u_h+$|Zd`l2 zp8bAa@AqRYTd!#BRF^$$$5^>2rld`0UYHLoldY6BcAAa*#6l}CJltFJ#bZ^X%*aP^ zjHJ;-4a;TYW&?5{m^z}ktYa}^tt=!=%d9nki^fZ{MH8V()to{GfmCUL7R?jQsOGB% zi*v^<$H6!t02hWs<^kgV#Qiy1hr5rPeStyD(^{-Z1H+|bK<2%8tz9i_#k?FJO{o%s zS0nEdqA-^($U#TG9Mj+pU0VY#6f81Rmr+-e@V;|{so}1{F6h+-rq$<2MwO(yB*3+Y zG(`GL(zV71Q;ltdsdH?{7usB}DU{9;n%s{|DUWxx%C4hgt692PG03L`}VlPK)mADLPtrEaLUWxM=eP(oFp5mAYc*Xz3 zM`j8L?Sv~YZshLd0x{e)E)qh{y>(=}!}e3Jxkvk&P(0WgKd~*RIS>0gu{h<>hGpK? zmG-Eew*KMaFU|lK>-qG98ytX~gB2KI665IhtY&WCZ^x)War-LHnMXS~S;BL|O5t50 z@JKi))E8nBdU>%01AGPlcThMZtiY_hqY^w^RNy)h&KK1+0^bEQtw zb<$s@A=3CR;DaDtdPWLx>!tthWH?00fOZ*5w)&B;Lx40)8Zh9(2hK?=r7>fxyCo?y zsq*1vHk@t$OWeJQ@NgE*jGg#=0$3pL4qq_NAHD#(kGLzUF95{*9|~IQZYnQ^A2~C| z&Sb!v_r+n218VgP`fmv@u@OF~;eh18YIztbnAwyTl)nHpj2~;E>eVE6T|s@T z;STB?PkWR-gy6xURXi{?!D|C8d&p=WDvNE49&$2;>s98(Ub+dB8_c|PbuNJZ!Dbi0 zaO522rK{_u%hdDI)%ViHdg&T^=~@_h=^A_KnndY#gbtXcMd`9pO0#5SgRxE4U4d$+ zq3@uM^ERQKOt+$(Om(u61#NBGj&dTcBUzimVwBdQ#Is)@4?wt03UJwBvwsz(h4O?l zO8H9J0s&SKl>$RdN*Gkns)jy8z*Fcg)I~9(FQiXXJm^8l%M(3?j%3)-Z_=CSkLhpd z@DyF2HIKD4;Dk7Uop8r2XfFACPmwPR6U^Kl7Vwiepd-kwCygkK3o$uLj)@5vq^>4c z9$n6B6u+Q1mF6mc5(k&G#DNcW*{-YrHn87wqbIFYnGk|IOfO);rIr=6Hpr)HGgn{} z;r)bNyb0bnDFyI z^8lWWOhR)qBv%mR00>j|Gmi6~fDeQp=GnFLbHIf{+acEi2) zZprPs$lTux z3JIg8Jh+7X&?Ssk@e^>?jQLgE7#^Dac7L{2`xaid_e}&e(7lC_2Iap8^>*wx@33nD zPu}S~En>getU-haBh+S9y47taAlQjb>~C%3hANjaNQCFHEDr zpvX)#AhZxI&A*m8ap*E!axYNWE_qfz17@9@nXCmc(m4;m-3yR@7A}{<(k7u!n6&mv zSc7U(j{So!sF48QdoB%DNe8N->ap8qwO<=iTX+$tGn{EjwBXvtjH?|$mD1TeIVp$d z6nBYNrF^b@Ty1fotg|J2`q4=7UQJWj&kof;UI#=<^0}2a{0@qHGXbT(d4ZbU4`!*Z zE9=Ty!b}Ri{5<&18=^bgBWK1DZK1w|)@L|e6%2g5q3{WE1V3OAYpGnn}&y=T>w-jHB5ws9# z=u)eZmA7PWyMMCeRUwy@aL6A<1@ znhmgc>-K>T56yY&wvf_Bo`}1MH+t)4^_8`JF;Y0cbt|WASyH)$cbxWi=j{~>&bM4- zLwD#8eXbo_m@x!3reOxHs}v7b&eC7@xYlm+nAm<9e6tC&_h;p)hiEM$K4yR6m5#;c zAm9`iX7jJo&?8Q9PRYB<*Vg&#tD{7XBUvJ5$rT@HJ|GsAV^RjkS)Y@1V-Ame-U?s~ zUhekb=&N6{pm~nPo|$QGqDaYhQ7tQ@^#Q9;?4$XQ)&k*)oZ1`2gV6_KbAR_ch1v}q z;4{kqj3zQ3#D92C}hYalL z8XodoO+JtV59ERX?U4JDp}o{gJace$6Spa5n2Xfng$d>$d^HuXyrsTd@>eNbRY6Gs z*Ayl&l_Qx(??$qd`A@@u{WM%=Qp1Sj*(mxZ;^VYu4G(3E_VzCrsPv{ zYWg9jd-|?8=aG=~v-c34>cgq&q6!I~k2oOQ>44DnSa2B^>cmz;&GiWVq; zlCv?&e3cL(XD1$a3+l>ZCSRRh3eTBLn;lBUf9&rTIEIIjr(=Dddobsy#^op=^$J4H zsu8hen<(#TF8g5dMka8qawGGc=)n+f@~d9AKwr(+nt1u}$Q;%BK-2himA0#(&PyVx z^U}_EI9u#Pn-}rcfnQ?b3`R9P2wxKMx0*9v{^3D`$4-mly9Iw@xObd$>w&!tSpGi? ztm|*w+yBTd3%UBvT<4DH197xBRNnkRPCEQR{&xeFCwO)t*jIVJ;<-^mX=uy~D0gq} zUO)ApKm_}CppaV9VMS1%zGuDBL0+%!8o6q;I>gN^+ zQcef8u6;g4%TKD+kX?HwRg#y^@%LQB(DNw(SP@XnVK6^WwnKkSwe;G)%UK7kFT`$j zf7W--+Uh&+sTgIF^DX_nT9yP5-=kawfN#iL661CY{Send~yB)2SKa&I&HN0Y2Agdf|U5?OT93X|8Y-)GV^y&HZplQn)%V zb$cvqKYQN>d`OYmqdwZcv$1);6pe=1Rmu`nJCA5eKq*VttZM1K`e*%J-qxm_$4Wz0 zAt04ima*}i@5O}s%oV|xn`&EnTSc+CTbq#L(h;5wOzTB$MS$G2XA^sM!E(kU-f5)3 zROj90r6!cbIT$Hio{GP^4h1zY*wK{;p_3i-rgQ7J-j^({Cu24u`O<{em*PUDgd45LFK_@ zPmRY?4~@ra7mWv6?E(Dhp`jC4YL6_BWh{u*(yPo$Xj^!?7Nux17Xoxds(8UQ$dudL!87nn-$x<)}9FlDi zo#-Z>4cLd-4<6Lz%-y3y;!rt1fm{vKKX_=jTp7PJT^Yy&QQEK%4KrxYAbV$8!nRnV zd{_9+G(;OpKcFYzn3r;tfh+parW+!=IX4bCS%zZ04+Jh4Jan(>x%G~TAgA{(A;udb zw<&tc_A&<(<`1n;HS#;WJ!J=%U8SaJ)u9cM6<&dZ#<XL!7jTm0MP!Ld-TqZr(7s zZ)aM0(7T4iExnmfp9}H=U1tBD{Er*$@-_b>UoelV8mo7Ym9SSKW;Ao>5g{3;!jY;Umc&^~uQR z1J*#1n;(x*xlI^gKbVvj5*9cZqi;F*AhSxDe??d?OcCa#m*qbY8?4Wi_ZBS@BP{L< zp@wr~f2n7Gx|7I%o#^_3%$%0qi+%Op7oPMNLG~fOcJK?89O7tE+~-A7=+R~4-lt^} zi0-JUEfi#`^B#-S+vZD-Pj_|C&2bId_60KyY71lVImJt52#X&bsyoe9 zN1M&n>yi`?`WtpimLuuOlhDIji7pp;<~I>K1$zib8HBs~^A_ATSl6)7OVvW<%lUGD zm-Jw2Ftx>{7JQELQt5V>d%zc}UD9_oe;kSI&U8-cjP&Z9#u<~k=bq{8o(retx#{4m zTM!x-N%gQecDD@MJz0q1>6ScrYS7d%kNAZdw0STkWx-$|=SzULNPeFvkD*T7i3>mY zCE#a~ynZn9P|2|Y%TR5RJj{sZ7Oja(Nq>C_#4i+FMXs?gkQt|(wV2!W_O^iw@8d}J z^lPL@z7-_~PPBev!mj;r1>kFUB=F?>Ps}BY(tsWBeF?MFNkWj-@xZeqaU>vpen3!+q7t#;XADu2QRLyvqjSRIy23i;U$#%&&vQk;T3@DS`mUYRlS-9|y zGd_einE@E3T|+SSIMYh)*?g7o-f{-Dtgh@I$wy-b!;x?PCPZp_1|c79qY2VBnqdEx zwpTFAWFkxhB-svPj`66A=ULQUHva**x`4A(BW3jD;{Y_;NDZRq5_RU7=1{>|)2&p` zW)>8;0-vhPwyB_AwQ#-VitXxgEq?@AsXFlUZWUY2Qi-dLO=qdQ$&k#6!8NaC@%?in*bY%8gN%}%@oPbG*?&sIb3F@n{mcjR=Gb2TxZ>5^{|Fm zpIJ9Gb2vbFn6vBz;xF5p!9X6r^$2nb`Yn;D0A#^!M#W{^kQs6pr*K#*=SzKhU z47Y%rc9q+}?dA?}6MQmYSKBNUt!fzfEeSOg;NhTk2Kn0<%uR{P!Y<>3s?fQ#-#E8Q+Q-|9B+tYW+r@arUcae_Nwl?3K2YS7O@=EPll0 zsDale`4Y3%iCV z_M2YYynwnCXpJVFtQN;$KjP^~ksXEh%Tx zv%SgP)W1E#bXV79)0mE>FtFM58LD(*r^T_ZRAp>cpTpP9h?3jq@INKD;ualIa^1=h zCD*MiP=Ydzw!yF3)tsZ&D!Kmn_3Kda^=4Wn_adU?UaU&n;SaliO8%+j&Xc2&uAEUz zDu5`t>*hpC4|nNDSn#FA?Q!hH9A#K2jJ8G*@P+tqMTZiU=l%4T*Q7Nq_8*fy5`s_SZK92-bXV3vmnjKUezagk+lb% zZiAXX^)c-YqK?%QQ0SzUf%uT5=Rk#FsT{u}@%{R8aI+&=q6=MMx=wZ%p*NC6| zFh$g{`Fq!)5OeF-4|wEuc^+M7JS%2zB2g2w1an$ln{<3jO1$`v3uAXo}Jg z&4a!{n>ick*>vCl{Rll5DyG-ao1ka(cXVKyZpFLf>F<#WbrGem2 zZEVjLqyng+E!%axg$+;wH|jGYKtvmZSxy{88;fDI>1;{b#f3tbF(cy;ZEP(Ae~A?i zMKW3h`QKQ-8*+9B9}PN&by>!II00NMa$CzFIB^0h;Ut@7Ly@u0%;I~2Ywbc0amr6} z{5UnV{Nv3A%b01W^ch2lN_LH-fC~Rr%JZ}fo#B{pFRo46)j*a2V{aPB2Gq`^ZS99I>oPVfIZ6Xif57|ivPNl-#$~kQ%sLf8-Dhgu$3(p-alb5?~9KOWSZ?|Blx=X zi=d76)?MST3DqQO8pw}gA86o|h+m!YBHRx+`TjncfeCkSF}fCc`Erug!j4;9Vq=4m ztMdawo*~&7ubRx@RJH%MC+HAa{A*iuT2J#bgX(9VI3{i%u7SKn=P0hhX5NjbR9m}I zQTllU@c0$oZO+xWHr!LgZ+f5ff#BvJ20hKjX4glXACr+4)ahxtGYTPR%Z37xm8o}q zRR8)Y_WG#d^-&9>>!ZfkM@^oLUar1jmiA;+{J7cdHL~eP))n}LL$;HC$S(pH4lSEJ ztpPmA<(gCZ36xCAACwBp9c^}&jH0BVp|#K=C>7@i0lOd$;&=7umO-Cz0O=(Je1v|c z71Q158|d5V2k5{NI-jn6O55q$r*xVQ{QpnsNfz+)DP{GsMp$21t2y(Lcw^`w#NcRQ zi+av^jvNA1Pz|Il4cxiANsin|I((S!N{>5OAID8x)j_5gG0*DL(`9N_f`;{WHrYUpYHulrxPNw`}WD@+%j z5o&92;NQYm!cRg#WGb=~trYo+fE}VJ(NQGjtwdBS>JU8_0q;dKA`^+V#6{vI;YlJS zK&s@c*Xi~Pw-2%_ByNcZ*+7TH9RY7=Bqma8sf*N0I=)33(d{z>^k@AE%JLg3RZw#W z{2cnA4Zl>KzyI|NZTOn>FR4^2ms*4GzdqE&=l$kCcgGKC+UEz*@A`}JwL0|FumiB; z@tHn3?{xp!5>&Db6o^Vi!F>Yxl{3RvQ9UB`u;_y9#^ZzRTQA&hH$9NOmQBd4!5BGK z0RX@R!L{bP>gp}8>czuXZ>{=-S@X*%I#3a=IQa46nBXlSkQco>$gUdp?C`1{N7nKc z)sK*au4jjyXNP{JX9w1^!_c$C$g{&3<=J6!aL=zf?h%k=^Dt9w3alD1GKl{W%?BbpDre~lG^FOGhcT`ROZI*$4=~FMf45P^jiu( zd3R*JG`g(EvSck`0jaE0tV^saRtxJ1Yn0KE1-{C%|82Q3hZOycLgPR}q>wtuKEOG` z;d6>PH5{Ow^NjP4L!ZQ@ay_{KldFyTKFKZQinvG@kqeA)E%^rg`TS*kh|l2f;R8qz z1s_S$=D+1jk(Vd8e}O9STq4*aFu(X`ej@0^PNNF;2`)jN`Q5=S1!d|meCO&!dKP_X z+ohpx<^n_Zz>}Fg(X*NY>&uH|?|w;r3{kuQ0G`WrN^XJS>O`=KI=TNWfTfiw-zz)A zTvH++-xQRo(>~Zo(e?={3p)z=Vng;SjdAJRqthe=!W0Y~_E=Ctgf;M|pRN(ZXjnIK z7v$X#QO>k!GkqjYrfZfm0(*bu*;yBw;&N@w92z|)5DQfr&6AUK{oO%J$aTs zvcbx;4CPry@+@QI%p^V>jNAL}*g)%^v-sI`WosgcrJ;jD&!6^;$DTj!T5xtne0X7g z^XcTXfEYR4Jw4qza@I2**Ee!@*$O%jZIuWTe~Cx_7ORRkB}9<7*3~7+le1q4qmZWl zb6HYBgHH63iM2Uxes+cbQq#CWzcFa(>>AA*a% zozRc3kbG$lr!J~8O6ZR!HPmZK#e{xWsr-(x;PLC%Gx)5Wak7CL)LT7c-5lLY%bMUpmw2P-*l4pVHmz-GU=Ntz?4kDOIvPo+53!Y?3* zFU%_g7*-p6rK~E?f)g0rvI@g)y9_$BYb#3$d&gLOSW@dIR&bvkBXU?LN8ZEm3mDRy zrpp-7VL)2C`aaa5`GPN|pFl@m7(pNsYB4zgF)D*(`a0Z`gXs~D5L+{#jWy~ta#v(6 z%#Ob;e^ZlT+eX?)AQoQkp6|#>T=vN^@lDv|->Hfd@Rostqzu3q%{99KFC2p1f=`eu zMwT~%cw!C>g{vGMt@pZJqqu>)eg#rIuR6+MpJ(#iW|@;)9KIWM4UVy0%|^uq{D$x! zoy?;NU6CUKxtqhrR9}1v{0PEouwqM+(_v|$Dk{OHf5_&%WF}foE+%-mZA+jwT<$o?j(zn4j%DfSR{^ZEuz`vZF&B z)$O=|+D0CBD@7Xa3G5y(5=#9m_@{$Gb_t}8Z2pOU8SBs9Cxi+nbZ@lhxjY>F2zVsx z2dOeR-;fWC>~ z`r;K;R{6dY7njVDZf5PBkj!yLHtj^EYi+91y=IusQ@3`e{Dup{P0ZCr(MjzVA{I+Y z6i6og03L2#$Sk8equm*pyI2heDj%yV2;v%>;q^79ZsKeJTr9}%#%cJ&WxBll1#%~X zu(-~4mJP56*BTWx>HD}_>&N2h0#^$#?$H2(BGj|!J6A*F-xpuQ2|m*t&Gr|^Yd

7Qd*OX4`8Yi_S-l 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⪼6~~|D)oePzQwMR^V6+U`76?@y;6>98xTf0_*ctjN5*!Qm zs+b*53DV7T_)FP72wP#|^Jbpbl`5fSTB6C8(q`qCBdgQ-#KLTO>kkj)xNmU>Q2slX z=LRkfPalG^Ru7qZwN`jy zuysvhL}|n|5N|*&`X`K-FxYyD;;5hpk`}v0pzR^rDKW>2gUO{`V596l+GY%8(0vSR z$jFeSo*4%3I-iZOD%(eCxd*rVAylccXXfO$Q1W&Vf~qzmY8sZQgE@de@XL~mm>w~d z?SNR+Hn(+3J<;rJPUFMFSiw@k0^w2LJoGm1ZgL@>vNT1)3tuQ?wCDKhmJSdwtA&0q z6!CUC*}xFhX|rc>RwdHD&)mNH&s>x|;g%BK%l9|)Qh085{??q2RUXHyy2S94^82mrzM72?8%j(S*dYaK?=nmoxS9q&&@K_Sakx-43>VEvhfcyb0_~AYJpywg@R*Pq1y9^%M z0S6l>2uy#SgA95gs-XhXz#UHh!HOg_FO*TFo8S-qiWTWi1;};O+Z+zKBY1L?*}yaL zbZoq&wfOp}eQDk%wiq)iu{&h=*B!yb%}A(64)l@?1SERmNJ`v&cvL$?oxjMQEn6UJ zEz;k+{u&onM_tEbKSQu;B;oJ%P9}VRA!lHV`_N4#eUpC$M8!O zg^Fm?U=VND2H^9Kjjox~-r4iwvNt;#$aiUvixhdtT|Umx6p|r-7B@f@dLX;bwjXs3 zO7qx$_Mj8kwy;+^rjnx!u|)|qpIb;;r&yukeLpa?0Bpuu7P(aFNW8kYdF)ZGG@X$z z`KVM0ha}A0cyJY4OlMyOKBH$aM0$B+9K5?jap4$(5+w-dl2zmFOhI+5Qz$Ye^}+*G z%UiVqR@w*6h8yNk`1}r<^Qc=>!kKZYOH@YZgV)t_f{!Mpf87E>d z0oV9ti`L(s8gEkvIx+UD1>+}n_nHBrG)PEPjJr>?OI51j7)&+nP0jL&rxnXe!P4_k zl@wTG$(N*v-pvO+M9^K!DOT<;%_q4oRv&~%hd@_Qa*CcQ^?83D$NPr#>yV3uG}mh> z9Lzs-Ol-GuXPZT7rBqkFf#5baIr(VEV;KqEqCXKIWz3^u{a3u&-ASo`erOcp8`bas z*ilX8gKmI3+kso(YNOZ(o}=szte2$>y(mY?OuF7o%I|z4+&L}Wc`e+z4IF-*WuD7B zXA3{u5!urkv+>Ky+^&PW%PK!}m4P}-DIcr*F$%64%dY$3?udTQVeR2CLU|*1p67-lpYVGLJ0OFo@Lf1dwo+Rb{el7*{1!G8))epqJsMW_3%*r<2dHTlAzu zCIX_DVc6Ohz6up7x<=he_Yuaz9b0CxW^f)p`=@6{*fv?K_xC`FMc2JUk zqWhfj!#Hp54ez4U(CxH;GyJ9=fvRmLl%X;9R<~$Q7Rsv=rwHG^#J}nooG`3OFyYJ5 z%edZ%KZo<*!+F@-wun{kIvS=F-~x0ijM#v-4v~ACcjAhkpeN5x=U>TD$j}ynI5Pm6 zJN1T}3?UU(Suw@7JQjGJ(3hPz23EsvpI00B-8Vogegua>FjJo4tjv_Pw$Zh>ReFqB zMA$*H3e>83mwb{ia^iQyK4X6ZFuCxl5l%FNdPBkmGmwAusfO{|gc6g3wzt*Z$U1feiALLNtY9lh%2qUPRS7wYi(QZab!Zi!ZL&TikS?5n9^q zQ=M`6ArONJxLi_N+U20yy)vm2`4~27$d@a1z?K z$ZrnimLc692Ee4≫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
    r1!4H4fBo4)!t2FCz9VzO&n zCfTDpto22>FBz1$7N?GNlggspfk-E4Kt~9E6hViYOQQS3vr;up=;oBx?&xOS$xoRs zp~B{4lauxiHQkrDwEf8N0Sgiw=hBD!d)_rzxT5yx6xhGDIdD%O(F5Z)^pu453=c1U zJ);sP>8hGFUn<4>xSD87lq6MC{f_+oEFB1V0}KF8m}vM>YkAYKJdcis1O&o+z=ALZ zH!20u5jdrh!M%9oPGbxTeR72fgf(El->F0ig}xty;{gFauio$9ZE6HLWq^OFss;;L zgIEf|@R+^!7X#b-@SQ-&^y<}GmkOZbK(_%N*gZe=s%VaERb@_VYqM?IMrDZXw747ECN2qkXHLA!@@#gpC!` z1SyJXt^M8Nef@5BcX)Kh!1GYfA2Y7#=(v|z{Ln@1q074A^Q?cZ)mXXj6nw}B94OBU z00;+L%IBExRxo<8%;9HxJSjc>lnBgRMuvx_<>l>!{7HoQ;@Y(!W_4l>Q)s#Z?_=a$ye@u%MPfCR z*hw$KRqdhsQl9Bih||5LoI}(Flcc%AD4{t zpuvp<*hH_$DLW_wgH*s-#thmOhNW=g%-iBGyDv7bQm~*PcT_!E<(=DaTN|O^iZI3~ z3`$&{iK<}BRK0SG?9?;qJK5MwEG;W~N3Xjv;N?*iS5=i=9gTfGn!^ z#`%YC(XtRi;#hW{Q6BQGH1%|v@6DmI8UK3?ad8_bv9+k+7@z-o@*M`*ptA-9WB{RI zd4WmiDIJ|6_eD2!il)JsF@M-omK5-%Dzdq~edw`1p1NA7(FmSF#Ht@B7s|C&4&@d+ zgIrkyKi^Ixq1&&o-@0K#I{Z7-?{3(>UCi*69~Lv=1Uog|l|%9;Pu@bp@6b3d%-Dn} ztc*~Zn9DZ3!cmJgWyzKJwYO2bB!mW&U}S}7K6)fubXB&j1~N65zLXs6f&szVOu_F5 zt%ajIxkQlV{wTu+X8@?v;a)&-KE3uAEq4Ju19j&#pRlmTLA@Gx>_&J(@R`ZO@B+~) zf$xCpJP6-dWvEvjK^l&Yo8+VR1YFRdl@SUXA0ITFp`5Pi)5#~(2*LUt&9Mfe09s-F zu5X+q--7p#H%}A?L}+2SP+EMv3HV*`1TuzG4h9?epxQ?hYGG9|2ea;g)4%@us|O8^ zP`PQX2X&2ktMSy0hPZ zl!L&^Aq+mD)l zKhElQNkN$liu7TE0N=SvBwS~*Dj(8QtukF{WsMzWeW#0UAuw_=u{mhK1J|KG0ZuZJ@+P<-of0_YXzCc)V32MNLV*|JgbEQ(GPwD=Hg9uIh^l;fP6qWPxJbDMrCu_# zjw^${AG8*ZO9$qIzf6J{9YMQ!bF7QnFeYw*za#2s=;+ubwGUIUh*v)EJi3T8j==z$ z(5}tMih#jJ_x=6BL)c0}7Eosr5L1 z=of(KWnX4E5S_#kJ;$z*VRUVj554|UvQ!^r&Q(sGvP@y{LIA=KtiOdf*n}u@QBmp@ zI$l8C00To%8d1ohh^YwMSCa=?f9835A*`_RWw6Rrf8A-9*UDP!XkoiQq)Dk%d(IA6fXO1ox zBsx?K5mD%T0|PUmHpX=i3=d^KhA!Amg_DgyKSxm_Kud-7mMt(5rq>4>e|v2y7%kzd znO9xyMa^J~d_F9gXV0R-z;)Zr9Ujr@zm6Dqpt=K#Bxrpl3h8J#J(U(CF5p?Csb|@j zD>To0yKd781to>`MQ>z8lXWGjc>eXT@|URSzi;yK=6)a$2!TuD1fDVKY25#KU=`|* zrs(ZAC=B4%dIFjx9`JzYti@i7!ss0KoRWBtk21sn4WKn?)9C@`SA9-QVKD5OduX7( z@G$A&LmyvXc+vsEMBXY~a%Mqm?XVFGh7l|b3urfN;J^5pI2||=7^sAcAw~do9i#`; z6co~miq_oz zY=Ec${z4(Z$$YrK-z`fCzC-E$?unPHW*&@cboS>9m6in0d5_GTwY>j*&punBBf{Bt zuqC#Z-|XF16qu+p@5b{B3J7f6y0yNh24*`$)*9;ch)isR*BO@lB(d^sPaT*R)ylRn zm|c06=k#;6O0>pLRj^j%;WovNccV8AfveTkrXh=~Ue|X$&3QHA#Lu(^%e&201ES%T z=ZBmMw@?ss3OOIZ+&C53=%@t1pHpwjVrW$um9A#U3>PvGt z`>Ph!U6Ockj_!J;qC`W%4ZJ;?nZ8#1g+~1XxFKS*{h18~TN-J9e=JD%PR!voOK!oTL`tAEq-hX*_{+4OAfCkYPtyyl(JD5y9U~98EvTPx^LZ1_! z+D<~mZf6sGGj8u7iA=lS%=bG8vD8K>T;~rKpSgBOn^ofVk6H`oZ5cjTu{wlH1JhBU zg_nyM2w*|}&ucLM!4q=q+4I^WJ0p;IeQTq+U!PmSM`o!~`&O{wuZy&XWsxpE|K-WA zyiH&J?K3X?9|emQ{`?6d`O)P4sCgXHe>h5CVfR~p8^l|Q=OcRT<;R`pcb0Gu;wybh z!+-w5m2>@w_(LPM_~wmI!Agj?oV+kKm>nuv#P_SNH=mAzaew9+uCkq5eP1FbxazYk z(_5Uu_*ydj_{K5KZr=YXE>w4>bG^GGDj6&~gmm5sbock72h7=n72lSQ7PQX~MmZ0L z0Sf(diY_L_JT40EFAy7m+m71>t7!$wBkr9b`k_M5{PjpD*; zgPLv@ypS@vxvAHZ#eJy-?@RSbNl7IM0S&s&R*f0Pzy~2f27`ERwtX?x_9f>h8!FGU zHpHja)>{H|v<(5*Yvfo*!txD8cZSQfEg%%UF6`aLpmq%v_#jV5FaopF5V7cjHWp8a z2h{ArY`3v1|F3w1ln;7flux>ajw2YmmyKZ#UmP221PL7)Pt4zCm6QPK&6n#fd`y1E z6Ous=&FIG-2|mn`BakyQ_#HO{{T&Ugdh(ghnQh#*-Dt&#TmX9dvNvxYSF54$Hf}C) zFQJjLmIsXr>mT+a5Njfc#7#4VCnP7MK`ksJjtnpjJJ8p_WCJq_vIKtjg*m|AgfAk` zMC-A?5QuP=&aT;O|AIgmZuiQUox!<&V%uGY`U$QGlH>1B15Z*tUzpkaPJ=+-o(36t zhT|sshU5*f`Ts8n1iKOja_DeAl@tNaQqH&Sf%f_T9S-q!7u3&4H@FT@!>-#Wg2;n%9zA$2m=pak#MIxQ2;pvIr#Kb4p={!K*?n|26SF89qGXl!#tJCtnxh1V zGPFd|q7JEJ#mM2ts1eoG!^x)Lq@>BB;^MZ~uM-Liw89(_AxO8+9nME8{P@~2}QF&%2rgfB*;O$zY__DHswIaMxRL$>~S@rbi z2ZYaEq-y{5uZ7}2P*UqrTHrOB*%rZd7UH&DJ~ZfdPsoBd27a7HHmae@JNz*zDV4>^ zwmm=&;3LFc1X$TYMJ33EW8Xd`Z8sTQ7{7+#b6NPW!U>Aq*v<~x)EqEVg=-|unfgi+ z9AILOkVVA2#6=hh(NdvPFYD9IwYiVH6pbXJlS>0L9g>Cc7a+OEg%=bgJyJ_%IJXpC8pkWwQ-z? z{85w*E#5{4!;kt6raAY^E_L%H*-_^HW2a1U#?_h{hZ!GkIhGd>j`?B^yp`(=ACMc+ z_#wamgM|eb$Q}fNK@KGWT^V>U^T0-f=LILX`o<+Cak8_^h{(&ziXh^=Fk4z%JEC$> zga<6hvC&ZrOUs~j==;UQ#E_BRTDgmRx6+bUq68}q7y>S!=s~DHi~PnW@D~W@D~~%c z+&r>gJhtsICnu}N<1<`nG6~#+jIn>$Z|lYQ%r7_-@-{9mm#I!~)5^QuYR_;)aRU)n z{2*{PWdKIy)`H*a{-XSsXN8@{082iaPXyRkRi(I%cjo^KRv`eVr2YHt095Qzikj;R zR02yp&Y=<)vmC%_H!#!*b9D(ZvE(-5xX*ACBxZT>hS_khMDM>aNnE*Wsi{#7pNdaD zlP*PpvWwd)9phwA8ko^6aeZ01xGaG#Dl1;@Q6vxx(FaS21x)((FruHsk2UIP&ijkA z97Qk_IH8zebH~AdMo>sdJukO8SPbYtj=QL+mRk|95aWGVN$u??u!DKhpxy*=7ev~? zo8hwT!EQ2Z^9OQnrqgX5-!d=g;_BLc|4Dw~1HFKVi2lAl1|}w+#obb^vFhsNS>nPS zZ?zPxju1X=ygf(`pd1r#0zwfPvhGtG)URbLH>E=9nQl>LJ zGIBelQ*`a6ajio@BbbqR`udU62}|oznZA;@lCOukcL2coez$+CEpkJ!cUm!NX`Vi9 zC=dqDzZyQJ2dowmwE!*sVy@BK0D#0`N}~RJ{rPP=I_!x9<$dwrFpS||z-;2}Mu8w} zeuY~C>~S;BaA95q2Fyh8!!Lw8aehGoS_0T{;sGuRhMKU%kP|M&sF^VRg_G0-k|#|~ zhoD=-wpHa-{!+PW2CaTi5 zp?-3SM#`%&*?bU*fbeDWrREEhAAN4mauiA~bc>P3Po}94g92ky{9qBIXAngp2AA?7 zc5}Qg9za_$9mXOAWcc~zhe_?f{s)G^n4U*n*GEtffK6-wWi-up2*61wbn+1VMs z;3)Pnaf9+F0js*=UcpVFGS2?evw7u59Iyxq*USuE>KmnW$ZX^q+LyYUtvRM7Dd`-{ z4*2+NAcMydg_s&zUU*Dd& zVrXamcP@abzXJMzw0$NOCyO`KyRRR@=Vnxc+kpU-Zqx5lw#)}Uu_sjss;j42jeLBG zZnkW*xq=hIZOb0H;BDhQJ3NDh=;zif_mZv*&yZycX~55GHfrO8!Cbh@_!z1Kt!3r^l!BW2wxgA)<0UcEVY#^V>am*!mgd&#?8 zMs{c-%qDDp8kg*F@^qLrsrZqse@2;C?8y5l2P%WatO(Y#q#K4{Ba#A3!M6k8N zYL@c`Sd3;_y}r=AHXb%)FdQSW36QLi6LC>U378Z-g@fErdU<-*H8iYcfhR9~;8E!W zPb2K=UUB|hne1C=+x~%30IVe$05yh-Z16E$tW>K?;d(-T{2abgfPM7R2AW#)XMj@S z_i$0im7;V+coM;fhr6JTnp?CJdiC9oOcfo4!(rM zFq}Ey8chx0P-&^CWZ85|CH51j&}o1eq~DGW5FiG#634%S7+lqo3nTtuO3V1`2jgaf zKN+gNdVtM10U#5?Bn$frYCPOlFc3fp#6^2#i=q^cjZ>Kk{;!zE=?c8xB=xjGSX?VA zP9T3gOrE!J_|L4o!XseEVg&+5I=V@(L}7whF`*f?-cOH12M;RLKIq%wmZc4K6F}$1 zD<2V43A_NNwW!unhX{*va-tzK#Rdc45R|&;L9x{PZsoT9P>4g3s+nD;&$pYEHB3Gp zdYw)qhV7Y+E>PTGj*g~g5QOJAVtrq~ctHi7*OxElT2jJmFL{$u6yrT%P*wKj6s957 zcMp^soB$QKV^~lnFSVk#i*C)&_(n?fIu{2%v+pf!lLC_=#v%%Ga)G+A?FR6QaT*>F zBut0J;ljaF!^{o{6OJ=ZsB(VgJ9Hqd2M?Zc5=apcKXBj@h#(W8YKzWFd+n{)fGIxtZz=xn5vUb#8q(u+o`hqgL>l_SFOGwnxTKl3{0lkWLf z8|y$$PX1&QsQCKcVXbdK23Bf#KY4h1!hLOOcD6vPKKQ;Ue8>^ifCW>>y@k_S5L+4Q zKlhG5R;M}~iGPe@S^jOO|0>#uq!Zs+0!x!8THc%uM&C~)J^uvKx-OsrawwUNELf>S zmk;Cks`B!_9KgoGPX-H?SHVkynTvjPTYlb=mk0zM^vyT}pli;}DK#8BaUzKr!jmx- zorQ@bj`N^vM-zUJ$`dV1U%^!TR=H+YY?yvmXJ>#Zy!JwL-Fx3xb>y|%o(zJ$);1^=JGBE*jqzc4>;P5jT5 zz9R{>IzwzNxz<(B&?7b!tigA4H!fpB*1GkaNY37hL@X>EFr$Qc!m3&D>a&xos;rfp z5rEx3r(pXGLr-`op@D+28KZbC#zfN(u;4moUqF&C zf&(Wr-%BRn&KPJf(W79=iG{dq^&JGvdiU1r9 zGv3S0Fe+6LVZ6G^>MxX!p5H!2yHdLC!fQrc^5{DPPwOHJ3o`?>E0_pj@! zF#>?Z7Ucsl7g+Q6pqWS5aEi zzpljZcVaGlJRX*m=!K2G+2xPcSW(jk?-X;B5Yq>qG!88nPGCbgbm(btHbQFQqy+RQ zU-eN|*89@Z7z{ZnPHAa5gT+12oKv7|Q};*})i^p^(*2ib%|TJAs8IRLjy({$x>ciV zS(qF<{s1xyz`wCU7~?LW{pb&K>sC597+J>UEhJeIS6#93@{Mbwg(?M24*JI|K;VFT zR4DiX7I`x{Nf!nEJp5+HGjp1~!n^xxW}c^NQxzeMsuPmgDYVs3FknG52?u#~O7M(9 z`a2*fDC-Rk0uvJxY{_g_`M$Kp^bsVI*$hx9P*SW*f;|gL1H$4&tLS9Dmtna!=uuCD zN|zU$oOytPeDpT}%kXk?uEjuY&6?@7#Tj^q?~J_RP113JuX zURdKa)z*G`tZ7~|j|ilQkCs%Cd2EK9hN%F)^(|_YqJUwqSkcdg7&v4)O8MXxLEjIT z<_L`b0Ag;G!u^O#^Fo{8Jt(;Oy1-j5f)s#Vi_|xcQ%)*%GsbT?6)gZ>fNCa3;TcLbNLCLfpT7H1 zeK7qK-e{PeW%o7bZ8-(TC0MbpuzM`yxr4&k3o&K{mUBL@dn?Ne0H}ac;SZk+UW&}7 zc~A+~ZsmH+d+_^!R51K)59H9ZQ&ZA`l=o7R!Pk-M-i(#@*k>tr$Y5CGR4s zuLWXd9gNjxa$-V|{ss<-Q;`G<%i%mlcQ{G`3kHv4V$(eFr&gbI8%Sv=q|L=xt6see zlX+d==)XpVuYo}5RUa=4B_?U9ynwPG3z}mSkz|WWxp^Z}3ov5Ag;35;q-sD^P?+fY zQ)Pd(axNQP*DxY0fbMKO&Z5fK$d=UZ4*ga|5Sq(`Z# zu^B_SxE-gLJ=^H*MwX+vuaJg;=uK3y2=^m?4#L$fTe88uVb?l!ss?IvsAQo55Em1Z zXRAfz3u37HllgyC#DF*Nj@93WKLzd<43*%P`ytvDbJrWk4Y8Ij&lNFz!9X4KBDmcW zY?JQWUS?;{K7c<+e*O$D6hYNQzx(?FZw>?-=n!|+4S&gomRIe$KNl4ZWvVy3+!3^h zE*A-%UD!-;LJ^olNRL%gO6Nwiix+14Fq5Ob@d{Vn%GIl(k-#Ji%)S)cDxo&Vn8Lz2 z5Mxlvf@g~ooS0&^dy22@9@UX(f#-*u5A5+|{y0l4-Ck6$})6j?6;N>Gym_Xl~h;`}msve8t1RGLun z!D0Xwb)fNRhNae$qZ~i330H$M1YPCZG}RBA=U|9zMIXbMcRN+6T1Rc0wl6`c?r2(` zsyxl2uqV)jA3T|RYM+egSylYzkWI-dWJ}`D5)4Y}qM2wM2@)QF7SYE(`K64oFL`c}p zfh_2jO!=L@wzPNKr?`agnnobh0nEmWigcWeQoCThgZ>lNpd}!PUJ}v4zym=yaQWG3 zI)y~ZdeG3z{2hjt>Q>d+esZxzun&l$;bWje3wUp`_++nq^+GC z(Y;MdZ20MKkoTY`3|yz4qFMLu9RS*$jEIrL+`6Jd-gtxh=yp+iIDPH{%msK8YZfGf z!3uJKZK2B2F`vK+0(An2pN8(TO&oi6?vz5730H_7gi$%|C<$`f7y9%Tn;P9D%EbS~ zS&DD5Btn4l0k4>VE8FfmSv37QoWqzv#E8KYQG{TZwHxa>#R8sy2PYw#f9mj!{+nf- ze&!~V_}zejv+f)R4rFI$o_4}mxu?6k?!$+@j8C$%;Ig`#jg8}LK>&h^FhbY^y0WUa9Z7 zX7Tf|^~H#+0ThvK+j7pnypEKq*9KJxQ4kjrg8OPVwr_AUaX_Vf;PIWqgHr#>5Yuuw zZk7a^FQ6{u`z;V+e1uVtX{I&6*}uOzM@ggwLNo+X>!zuHc3`c>{)3AGB^i#=;P9}G zaAtqa31;jHh?S=U6DMl~O{|p9AAkH3EQWW9Pejljm|cdS5!OMyy)sFvPFSOXF}W># zjc&(P1;!p)Ny5`AvbzPe9|Syxv&w}KR-dn7io0@YgsZ^k@p3eX?w@D@ImFQ|9$e=UKH0o4* z3kqqVo2VvX+o67b4ntSw&71d=Ypun_iqm~8NN*>>i(Vq}rELG5#p9X2&6%>#IcrJB z!j?w51U+WO3Nvfaw19A9bXxWT*LML3OTeNP!vw7~VT(X8Z^bWT>od^{c8bD)l8~cp zLGcpX=+1!E9zjMBfAAZ$^e3d{1w$em^|q|e35CX@Cq02XhgNc;nVi) z$&>GZ$91n_mUJt`z{y|)4ASZ8-=%zDzVmFU@H?|Ks_)Pmp8DhuxB^55U|W!@0&IXY z58z^aiA&>T7^paZl+V3%hS7XJ%f+ zE%o=UvP$zKx*oxBjEpcA)zyv4Id?2Sztx5-I1kV&O^!FC2E4!WQ7U#b7# z0`Q3Y_mv+V=zMrSY)TuXj7&^$^h7F3&}5?W1h&Pilb?l`zyc==scojWH*w#fGWlE` zt*4?g7QHwfz3$u;NO~A45IiER+Bg@uo`K&k)kTL)vo+Hk7~*LoZyvt-l+K?-ibJ^q?JW+?WA`b!6m19vWdE)D|vNNFYZ+ z-U2lrT<5T+%wzwkJ6A7kyOJ#BL&O<^F*Ols8$!@vwdt5%5qDq5DuQ_cDI0()fXzx2 z>8K1L)I&LQgyIzTTzp{XNo$rD;Nk+Cb|3N8Tjm&}Sw$K_B6^uote&8|GmAOC1HTxY zF|3x*9K_2K`*)e(8~@%*LPenXp=$%oDfs;j@JE?<2r~Wt%Rjc*mZ@FS1gv!X1QV>w zBC@0w!E{Dxjuso7rD*`t;7tx!?5n0=(Z#lchR_{K2i~GFkblASF@s^s`)q%S88ci^ zSY%PrLo_tBxNsh7XZRJVTBr$jEG`T!GF|SvP0;4?NU=j@i8cTo?)B@G-8{}hR0?#4**%LT)P#l(Fn228Bd;os;d@f5{I4uiwL^mri#x60a1~Wj7xzn=T0YN z67f(S7R!ym6^8c#SkJjMb`~w5`at!ZkG7;58VA$|(Rc1pP*B`bL?kJwxER4#gbP&{ zZ!{O0!>hqT5W|}i&;vLQaIS@sGXi^3wDU;u&t+;+OyvPSE^?lXI(R`U?3o7PN@)}P zZOQRM_#{G!UJ@6Vj}L&BH7wh$ZJ@`CSC+x*@zx0ZXbljaWh;q%XPDXm`fh%|&wS=5 zda&^-Q^K?IX`SIxxDzgG=vP4Kr(Sin#;gz-9&kbe>6MIg2 zTH+WkzFt~MaSUNa7#tB%2sJj$V$D}GT}wzX#Q+!<&#={J_kh;<#`WuWC0z4esZBC3 z!*B=hha@tC`kRtv%&92zE-Tt8?8pG})o&G}a=g5D0e}f6#LG$$7LVn##<47O>R1I+ z0GPrA!DXwZg=-Hin*gD6{-9N2HNrE2Jz{$Xg5*EFy-xsxz_Jq;u{_pTSYo%B5Cm8B z)OMIgD_Et*&Q4Fit)2?D-=z6i{|~z!E=GLDT-jwHBlj?nU#j)%(=Z$k`%qU02+3i7 zG_(X+5jc%BQbaPpBk{P^afAz-NaCY$Abw310s9rf2@MP)QzAsIU}w z2NApmj1ko)8ft4Vg6RYdtT-WnXmetEtywYcFT^vtVd#u_1~SL$XC@z*o%{JCcM-vy zamn?a&HK$6V1x)qTP3&AK(yoDrmTVo3MZP*mF198G8b?*Tna7Ck(p*{rO>8Jj7tq$JoZ04TH;{Ians8SQo!>u!i$7 zAx8eZms2x{?zrtPW7)*2!Co8fzA%k#4*Mep@k}Cid+|#`LX*7i)8(;|t)NaJL@7)j zlN(Tf&g9!A+TJCcwEj!eMz%zK3Rw=ydk#i7wC~uBQIA8D6&5s#>@eW7K+5tz6v*W1 zz6H1jL;#Q`P$+94HRBb%S9kP#6%`h?pqs1w3?HqvEES6(fq}cWU6>M7Xj+xo*wWTk z3_2C|34mF%nF7X*poNI+*>l1z9D8_lK)@)>?w`GsE3gLqfzo1~k_Ok-@Xe+1s#$0m zV9hFIUb=Ku@}xgk_(tyS;e+D@fHjeYb-h zp4LF@1f(-Syj9fI)z4U@u{Cg8#xVzUj<9^Smmz`kij6G4ADuJ6X0x z9Y<1~6MWcNj-o3IvK9z~->vHckZiyRm!;Gcp?C=TLZrnpLL(4e2B2xr>);evnW0I? zu2Oci`^AI(F-|b$#jb&BvYYG4GkxT;s;VL9!V{Hxa8y$Re7;~<4-WtCB5)QjfY9Tb zNX);F7-eg^!%NM`*jOeFT*OlVLxY1^qhYCoEOQ5l&lJZBl;2_?h#?(tvVjtXygv^= zezdNj^qO1nTxyPijm^ol201-WV?vB zA*+YuWUB+NZBTmPPK;%NQ7{JEEk-PR_ewLlY?HLIq>qXEC0F+E1nM7pwP9+svMAgC zn_NvW46R;$vc_o*4Y&lP$>*Hm!b$-4JqgieBzUTJR~|z5cQ-tIfEPKonOIBVtg&8l z?wvt%Y<4r+N3`Kkj==EYmJ+Bg#-^r{WABc@=3{QGR>_kF)recqeeae5w;%04*Vb}8 zFN|dRzYfIp9T1hqKu5WwRMOHLI_Y;YxhTTvZWB_HbCbw=f{L0 z7Ylw`KgZ|}X>X3w!CM8>1CdCSf&C_MlPFOCofOGdvI+{>l5sBK+9UskD^?ouUv+I3 zYHe)j4FSHlLIjG5jwEu$(eER?v~w=xLWqR>!W?ST%YET!&(vpn`s39~3|i@vK;TCO zd8hL838u@tIXTNakI)mSz#-0rEcvU=IO)G@B(Q-<&bQDE)b)1KmpwioNCD@>-G23 z;|oMT@_JCLTZd6ObQ`MVMAv!HM1apo`9S6xA#zFfV3Yq#I9gVk;8r4M@Annw<9kM7a~P>V9J4+u*jwoTFzmAGnibfgR(7ft>}v+JrU-^;L&OROsxz!6a&D zGqrl$+1JOp+OLe6ulIZ{AuX9rvRnj920d@LC28B1b>(=&){Pm*6oaCKS$I=(OfQCG zH7+aqMlLHbet(`-23ipexB*D-VdM#`R2V2z4Lb70G8s3G|D{-26}Ri1e2yv-R{aeB ze(4is^OP4pK=|t$_3z)qx*ZF*xsp{Qwv2L|$nx?5PT0~sRtgFgtBw>^zf0}#@H>`L z#x@Vw8X<>ZZz9DDj~l+e&=AeQ-K?7m$b~!VUS#Pt*473_Mi$|Yz^<%RucNh8FoRLC zOcERLIr|Bo4M4$2eaiwLVnPBRZRi4V!vQeX!Yu)$|E&?GDI})>8RsusgJl5-5o}e! z=NcN*M8aiRZ|Lg7xqSVCEtR|=a3PtJctD_c?i?{$EOs5$2y4;9#ONxlO08p84JOi+vrSQkgOy-Z{YKWV?BwRh`cF`Q#CqapRDM8MX>Y%%Rl zR?-xXB<4<)8P*v8mI<~Ca^6G{!qyri34Y|XAE6`x-~%ifm2+Mq##h)O(Aq)7SA7Q)P!w(%C1)9Bb^I);WJfPOcnGN@%e&+{0tzda#a9$cZ`3hOP@cSB{@NNoxj2-trR3vb@NW5-jo{bk+&NCLc?8o6U^IWZ#U z)-60JA<99;KZkCIZsCBU5wSB30fQUrTwrtSe5JoONl}2C zxM$VMmEa7Vv7P`Y22#82TM5Y{7{}}5Rx2LVUbJ=(cf5QV(^!u6adl%=)^w(1fa0nU zfx)E!Xx&i3kiCb0=0#v?W}K zTg}QE1I-ilC^|<15bp0sX$Fi@!nR8qhm+7Kx(+Q(;i7<@4-R7dgjll|V1LJ+{voTw zKncDtbpMdnb<=}y&B?)m3aQXs27E`|w4t6Jn-42y+t{@p$P;|Iz9UAZ?d>H{<6&k1 zh-MmZ&c*mDANg_f`%l(xTYe1gNMB6`R-c%2cCl=W$I1@2Is$S)T5RkO-@WFaK;pjt zJ0Njcoj3n#L9p?$!4d4*ShFE3L?MTk2l`^WvPSMtd_^!*HZw!e(BWxqg7QEfd0FKp z*B!5xXE2Z_p~j=Um_?wyE94c!nJHaDAs-|9S$0E9>@R|gd;6Cqc|f5hJ~L3zr}14%O2LQvI&9~6BGo-7~V6c?yzP{%F0BaA|OBlU2ykq zJ9~RdmhBQ^^_^B3=&tVEp+!Uw;&`H?(^_nCunm{_YCDvh-+SW-+uL879Ta8Yybz}~ z`B11r!|?sS73$aiPLKrxdNH)BcTUp7M*2G&D)4MSbV*uRsw>%(>O_7B`08iQ8CUjR zu8I<8U}SWio4NqGxkKM-Z3nRXP`<;OpaUi~cRSi;|H4(jai}hC1HAgQvIqTJb~Hv| zJ$52M_^?F15uMh)2nYvDLdB?ij!d<4ZZXkfnoKWU5<+W=X)iFevn`RI?RUvP|MjWr zM?C-alD`Sq2;x@DOAJOkOc3!DlVK9=E(`wFRVvL-YvqUw>*UA9PHV%_Uzdt4DBxI+ z?nvDjy=;T=cMcHIvkaa^;C-$Pw?@Vbi)>s0UzdG%@GR<{pe^Jkc6W81NvU6Al6}h> z(`G@kx}cljuLSA>z2ND=t|PyH>U;Whb zuMwXHe1!i$e0!E(`t*lIp&FFF)0pVE8yUT59Yp|>cq!1Vd0@BrzD$yceg9&*!{Xsn z?G6i1+mk7N7wXIJpk&yg_58y26YQsC*BDIMdhE+RvWwqiSH%4nwjLtu8q?p4L?i?$ zKQ|KlBuvE`lo=9uIxM6*j&GxW9^DAvM=}vy?xwQF zG&$Fk%lSR!s9YTr4b9VYbBJ4lb)6H7L&*k4aaARe>}yd6C-YCO&tA>@>P->FzG;63 z>wQeFV>K975Oj%0PrgJ2YEG-`m|gfXh}?IgqJ%rp*8+{%GKoWR!)~m(pSqXos})xg z7M|3&BP9~aG#H7s7?h|Ejbhl&(8;3kZ5hMF zwdlcvvrsy(^NvB4r=1Fpnv_o;1K?9mv)D(#jxn*$V+Tu! zl8Op8>a7_uWhNb49~kk7Rq`5JSd>}kTs)1mU?}>^WVLP>9anNBU5hFgI4X1`ZYy=- z^EeXGZ2<&by?QlqUb;i|itPvJwcrn#)Th?(9~&Z|R4~zjJSrgVCu6z_m<^B4WRiJ2 z!kqZo7B3uW2A|&%sAMjpur6Hh=WI{{AviUEslFNNa)*W46Dl zsw%&A(8q_u_a(ehKH26W%i)Q2YZ(GW`7lzz+psSnH1_CT!Cu@S8FHwuz8-ZC5WDco ztxF!Wa>T@W^Zj`o?lF{M0Fv^5f za@M7yj_ndjCbC>v#2Qn6uC2cBAF!zAn$7h0Cu5X=h5g`mq?h5hcI~?QIrJKJSX@PI zs8kl?5nws1Hl{Uvk z(2RA{U_=SmR@4YMSRqRI6!>2W=ZWOfPB7sPIu7snB*T^0I*5@E;KX+F9~&G_NXQ#g zswfxpsTfu5^0Yd0xcrx(BYuB0(HPznd_nt=ntzqW5x>jV`KV5Va}^$5&R0Q%#u=g1 zU#KA4_1cMe8KmkK$x;|N^fuakuHS&o)g;H&pIMS=)27mez3^yAO;tQIkFpcAelSI# z-$C8FhQ;n&>3}_wB+!;29#Ac*dBB904ep2**`(jd2mAnwQI!IO^rV4tibC^65J8b0 zh9!Q@kX&Qdl4-i0Q8lsVbM_yT-84{32nq}5^*_v@bM&-XeKPB+ z@^qX9D42FglB9-X!C~tKXzRfaLOi#9qdp&o4>kpO8<^N;Xe6?e4mB ziR&F|l;{$bSZfS|D8;&&lX0{63`ydS)l3mYWI3?c59|gH-$a~{?Fe-{$#9nHy%+6o z*(|RPS^4ne%Zk$;26r%~B{F8*%+0SE+(Ai$BZ7Tlf`oKJknu2M6ojo2vMdI-Sd4i# z57e9O$INML;KPSIh>46_N+>!tvGbrBmN^)A;7I835c4@Z5yk>zSWp&Yn??742bLPA zw^~?kaTdh|ckh1D+&l}UfvOb!9XMe58iy!kq@~TyokOLD3Uhp9XkT$%FG0vSY;k3aubvL+rs2C0$*$aAX`{)l=7k8B>Y;p?McQt0>wk5>VdD9N~bcJC$tZALCa~o zvXIsu)7>Eg)5h0D)zHM*7r5Hl?H3Yiz#Jd;L4Y7QxVh`h_V?Sczs0rsAWdDYRhfl@ zE9CY~t*|Xeibovwy}IK}Z<4dg&~GfF%)P~?c^_8juA9jUbBb~-W2Jz*8- z&%hwJDQN8%6lcAQuc}(#VO_s>V`Og#oO|SVFWf#gW~gYP(w*QXSt?`}7y1VV>d1DOX}wyct`#}~5gps^-S0}| zF1vSw<3LIpBKLv)W^D?yeVid&L@elZkk%LBKo?^ZQ<9&5w-|7T1dPD3zPt7z{iWgE z8t21b5UlAhK8I~J%VlEYOLR#hkCbC7&s}|70`eKS?4RbPr>8FJl{=iYi_tqH2RA)q zW7g(E$g_0gFkgUNCPuOqTDl7t_#GS^Q@Qz(r z?aa*znb!frp|JGSOE_)ZGf zD_XK}@M3OfHWUv)MXy)B;%2&%dp6eHba-z>tUzro!Ov-LkEYqkz#zwaJyh0|7E>HH z?Cyd);E+r6T(?7Mjp4PN8ZbetQyHG?u9f^8dtBAc!ZEx2_clt2GkM*a4aaeZtyMSN z%B!-s6PL}K_rKbl*ztWW`@Xb^9i#Oc`TEt6mmwA#DK=Dx{tp|NnXCEam!=%xk(J|4 z1k)Gi%y})N{fo=n;%iDaA_-ESpa5XM`r3;WC|nxG?GWG6NMYhm_O$Kaa&PQfBI*SE zCQ<`|VBxrcc?9Ddq!bz4!72wt@`-qVd%oX`1&LXyJAn)H7S5Ik2zcfQ09Ui+VUuOV5{e>q_}B)WB>3XC2(< zoe{1!H49s}Y{3Fx)ta9TKlG|!xuY3X^Dkp%U^&qATyS{dQFTRy(HC_$m1BAoYlC|4 z^&BsG9D)yQaPR`>z~ErLMK%t@Sg|;sxP{-}$ESnI4Pz~Oo#(fMWP^G=96vSu9I12ZsA=T9I z+j8m#;u><{Zb^q_;TEjtqJ}nJD ze$qvb#S5iY)qt;%(Fg*H1E<>i-)PkR#)hbvJOfoe-@d&;3YJ1u5M1N3ffE+_q;%Xq zs(l!cLi0$06OIAs&UWp*YU$SjC)CG$-R@k!$+1iHK;cHCU(c^(PJTeWm3mc3kJ9BY zx22}yn19{}iEHQUW&>KUBGLe``xeGUWRT5xW7joGD>0;vFDi;GO5zgzIQD%1M75lg zp60}ZOQGegg+q^?>31yra(SX(L+TCQT2K8xXMgAXarv~Wa+nWkrho^C>H>Hu{SB|S zJtuNMRXB5&e5xppb9cwC3YCLqObz4|l)mCFQ;*e>;@qP%uc0B@_3IeVQ(SAPy9-OY ztOOa(A2OQQMCXM-HDKolZ91;BT8HL$L{8d+-HXK^KZo82E?Hl!(jLcf>}wM6#AUF1 z&z^F>uNj}Jol|13j%N3aJ6RvBk;Wv_mV@!{M?*l?Q2Dv^Sg~V z9&^Sj5+-}hJJLBUHo(xcTRPINC1Ui8fa~LDa9G`w49~oP)|lIx#QKqF=jeD4H3Ei- zt!-OwQu)7EW@|rC6VNR*vvk@Yq@6d-r@Kb8MKJib&)?3w`JGm*9i)r0Mv~SZ1L@5J ztF9hCQ>?hO?L+g*BeFbJU!9$7O0@jM)rHu`| zc=5aI9KAXwA?RUd>#cJ(NudoDv}%gQ65Af=K{I3X1c;)PG&Tzqxd5GPZAS?%i9i@! z8&JBVvwa)+wG_NV^mF*<_Doa%;RN_5AbUAB)+77_iIhPUU2jOHjT@xENkVo5C=I#O zh!^iEvJRd?79FOW2sI@pb&_Bllz%QkE`^f&OfA&d5bh5^noZaz#Bi6IWP-WiIiMGkz_@t}BO}=4mBrn~@fh%+BE5(%6w(CDL}3o;HH%Tt3yHd0 z1_WOe)ltpuAbQp0Owo0Y_6Nd6{Bd)u(3}f?Nn`3<}Go5?#A$77dgZfdCEYu~574V7?qQ5cb zz#{c#Y%B{#x)#~WWRF_}5flbW3wRR%^3P>9K4D>ctpA-0VBIQ9af(R}TysoV=2Gvxf@v#NY1fx8wOZ*oWpK{(`LqZF{E;S|zxoW#ljb z*VrBv9u65ZtTLGC=n!&&%D?~6wTZLl=IofKT4d*Ir=o^|M!KuZNYf3QRjW0EVet0h zb1=3S-P)Ga8Z%H)dg4L}cX|c65JuI(wbm?_59C)L`|4XyYHJ%D8iMdy2v4`vDy?A| zvo2`~8=ahllZ0LPRZ)1`bdRlx9CFi)hM%+ep1|#X#}Z(#Jz~IM!boZ%n{2$7+uCB zPw0wWML}=h^K9pwnGsCunY6n*_{L7o^P$=4xQ}WkFK^j~8v5lW5PjJz>1v`c%MnL( zDkML$QKqviUToPlD|+=r=kDNX97GgLxLL3gVA%jMNWv8*k~yO zAA*DX_0*6Fdo~@iQl!mA3!JEhiT~|ex9-)Fv4SV7aZW~MwtQR%&dA1%Qp|$o3ee-h zzGtgi`-cy-jEpI@WC%cr+#AUq=#Ns=k_d1>UM(rux&11!q^-+C(OJkiA(~r*`ba|~ z?3w<((9w~FPf@yOWi~;vfreU&IqVHRBO`0XiRJ_Q_s1qAAebOhaT_x;UgHe|<+Ro$ z2uOD-QE7+XzReG!;@!Izg5kz9%@{Mo%@0=4t4c9R1I%JJjj9QA14!>s$woy-C!CPE zA(%FdDX3=0+#KRscjkWT>=5tnV1OnN$|cm2(TFNWiX7Xt<&`o3C8*kl8n-AHeJ&233A!Cd zue*lwH-E0lXJzwtCPocMnA((#t744b{(ITm{gST&SSy(Li2Wo8pn?ZtF@xkMX(8|X zTmxPS2m;zpac<_pAb`xU$mAB)NNPCmKC6X1PuK~Oa=! zcm0>i-#=Ph%Bz+v37Vs%v=RLY$|82uC=!hnXg)Cgz}Q*!Q4AapEwUx}3g)2P1N8hT zG|Rd5skaI^a)^HfZDEqgT*Jr@a*-XAx^0v1DCxcS{<;iHq_2MJI{S=rdAXHxpFL}Y zP6w`V>FG7K15<#)MU%|`t8#Gf7ay>2WtE32ry z;6t=+P0^CD|Jy%{#SSymFm0O8*)SOC!WU~3KAa}=H}vseUM>o;H4du=yOy#0rKg$v zy_j}{wpiiYc_HAUe|)I#Uy6AyD__37x*EUb4^;xbm3;QY55q%zdFJKgAMp+N^6_

    I$tKlHbh9*4H_`{OBx*Nq=`0ho=eQZdYb|2O=dL@W5iR}o+SU%l{pPZSA+Z60dA zC?=@FSfjC_btWc6<-5)2zweZ4iC*>l@5s%uU9X|7O+`VWpUGZPx`l>jcpgMr1nE+S zA9fzm1M`;f1cT+*%m+jNB2;5wwCaV>-95iqj#v7D=nUm-XR za;R@%oHVjkf2U!8uPgKdaqOII7tOA$yTugYDY*ns+SkYOlBpFAC zV6z3R1lT?RtS!Ljace8z|1z10djvDRORd*uYtbARv{osgu7^r3>a)Q)Fp|LWd;!mA zd;2HPO|Z;>#DUHj6%=?N4Rv)Wdf-4zs4$cx&#vAL3 zdbS?PE$EG~6J7u<8)Vqqw?{x!Yl&%NuXtjqgXe)FAk`(|XnG9j)ThM>4%s(3E3 zr-QedBhf(H-eJm~EmANU2Det2LVSQ?k5Hr}>$@2BFAbHX=T#gZTyvAW02(u1{XFa% zK={RYigK3Qr-z+AZ~-D2#C3`vJm?6O5^o7qz2_Rb77DhY1Qbz1CcAt zhubP2|ma%tm;N=MFu<|g9r%ipSXByCz5tq~Hz%C_Ys_NP@=DPd5sZPE88}oC*sDJdCZv-ds=Ng?dZ$mv)RHkq zFu&eBAV^CE2aXm67uL&;+42esP|IYB`i)jX^P)fdG9QM6IB4%#RF;Tyn|RX`6R(N$ z!D$4o`}5zh5Rv`%k|Up6%Jw2K686zqSwUK(l!7ymo+FIny;9!Q63Zmom8B0Kt1>A# zflCL}#e*nQFzFJwR3olEal*bp98{I0I)IdTkvBPC@s`o9iA3^na}R)t=|MBCFpR@wN2uel!=E*EO=RkbSgEx!hB}NUXoClt`g;hv4*?K7t=X z-Gg+h{H6g2evXd0&-77xubyX8wAe|(g3A&>*u8sKDqj_4B;ayDb_jPKc+MgsnjiFu zAZD<0VPXK*HURni_n%n`qIH5@Wvv*-O`vhgBftX`=T>VW(RIp!1(vsb?A0FalzIcw zBQ64n2vO9?$*ooB(s}iQaZ}iX+%FX8>D(zKIXiiN8m)b1_X~YZW3;r@4Y2s7f17ML z{XE%lx;6->2Zz-*XV3oGddA2bQNri;-^CPi#@^CWKBnd!iPnoSZp1qExYt-{2IE}V z1ZZh7C?Erqf{JSU_U&EP>g;bzQ@Vi_p`|56gCsv7Mp6{BtlqZxOwG+&pAX$NFf)^$ zib4O8FZ3wZK{kUu88gz{?CiSc=7N%vXzs?C8*Vwxtqlz*rmNSbRdjHg*JYGGj8*mX z4&LL$@s)GvpI$FXRk);(`R)ME1jk3%pP? zbU@o9MIA_-BXNo{iFTpoFXu^~tJb&ng!cOM*s_#twn^u#CXoU#f-7)1k0A@9C#$Oo z_2L|DG16bLHzI2rv2b`+=q62Yy78pA2zWw$!*95D+KC*Xr=D$R!tH@?K3}y-3WX+y zo zR1ba^wvPV(>*tUEv2D18|2F$|=l`n{j?JJ2S?>z>CvP`cWcR1Yfn^M+5SMqFcAnIE zJH<)e#?E}(ZpulM%~*mwXeR81Ff#zL?D?Z>wEu^>Hvz|Tecwi{MwKFzQj`WI8IpNi zNl2y;B||br=6MLULZhJ&5;7+tA;W7ZDl;LOr)0{QWFGeUytUS9t>5q4|GmFsAN%;; zV;yUe7O&^IpZmV9^E!u7BCrqxpm5m7tD?AsKD4s6NcH}Wk_+5cmT&jgQ@Lm#9kbvs zieF#5(r~oe8h(X|RGh&TaADRP3p7yGVJPOtA%*tD&RD%$T0#l4*_oN_4@%9iHR_%k z-Z<@?6sVMYrI;|-vA;FSHP)7s4kWD#+kJJ1nv4_FEqh#L4twhjEWU5HY$Wz!oD74P zG4yaamfBd~?wqKqvZNLVKpN*?v(^1EO3NH&74f$zqLVaJ5wbXGA-%bm+H#5ag)_!5 zk1&4_5n<=s?CDR~wT0Mz!+`|;J$L7o;@9q{U!S1VV;>nB(oYA~KJ5f1a8pkg;FdI( z%E9yZJ=y2lF2;04&)8Xik1G8%O$QHWA;pR|@qcuz5k-W-L)U8o41!#DUUGBGuOCEa z`(^YqgbObQ2^*-Wh@=a00%&TZEp?9bxA^CuF>{;S1M9}6^H-H+WJ*etowj3#g$vF% zGzbW}f0>yH;u7VCbNtljD*z3{%moxj#1kjSZim;!k15mz+q%fQ_TRT-55Z&CGz6=z zyW(#J4jwE8{9$46O{?Has7Rii^zY(f6SqA1|hrif*(AF%S#`w=m#Wg2ps8 zIQxO+;C8KJK?l_am)}2!40jY0AZ6WMmk_&UVr^0N#+dm|VPcX@HQNrku}Gw0m}NE^qyI>^zSh zKj0FdJbBU?{G1c%C#0m_GoZ8aq$sf1_=D$>Yg`IqC%i&6{^tWWpO`Ux^};zjbD_O+Q5zUKB$@Y(h-^%Z zwPRv>P=Cd;@wP(EY0x51d5+{@jxz%KwXA~g92PE6oa>}|APMbbiZ+JH?aj@z)XU@4 zdHN`&0`A`zW&CZ{tbAyXr|8m54;njsdm!i&ZU$va(I0;9!o*Q4Yz~G>N$2unXZkJN zmvdHDR=8w#b{X<CMTw)3#|K{PDK-@Sp3#fR&#VuN2 z`p`_kmFRp@14cK5lZ8sczV@38VrLK?7YXWL{h%5D4i2q&;^bXWc{Rk-`Wg-wNmvg6 zC{O}mACHawj71Ur^da;9%vj~NTf05S3o7W#K}S(iBErjIa}3*t13^C3cSLm}@K}YG zY4gh(2(v%CS@2j_^6(uIR+SUhWrur+27qE(f*jaMEe-^HOlr&~2Otsp=}W@-BP-jR zXKVf3Cn2T-g^5TQ;}0`OACpJ)_W^Tsi3DF*kB5ms)KB7=U)1;zhb(wKUvdZn}+h(3ow|W zLTmC4m+%l57M_z>>XE?o2`m_H2~zT~O-_>(AZ)jb<5-h8;?#U5lU7e9w_6;boli!P z1;+L4hY!bEVg}M?Auz9s5oB%yq{e<;rP6&=uwej+hxA9uS1C2_G;xi zhGhKbI@ggSX@!N$prtCDJc)IO@*friU;+taFa#Y0TBvm_sP!;>g6s$&JCe!-?Y{&* ze}uCc)<+1*RzE49dczEw3{UAyyh_#1&VWLw(W*nkE0rN3WhESW{_By{Pi zph6H~J@8d~QRM{HD@I44fM5`cox{l37~~{m*5nTxro-;c#MBhtRa_h#Fp=B|Dnv>O zuYhd>?^u@SnTHON9KY(6O8V%S4MaH9_5Lqx36mg^Pu2V1{-o{G? zXQpW0okif{+lx`D;fe`wFT!e2I_93ZTW~yvfuDPO;hY3}0z9N?B@^C5Xd`ik;spf0 zZ4%Nc`hMR}zq$Bt=#M&(AS{563y&&H z^>b>jZ!tHwTZ^1`>T6xTv`J)%udS-$zp(NnMJfrg-1$$Q$ORMbP0QdgKx{n$t+OUId~qO|tVt|8L%T0JJm{&co^ehy{noeV-|h0QkxM)y zX;gbvgi?P4NPvIAe0kfnO1fFNxTqMPYydsbl~Nxw78X&_JlFvNU5H>#GROw=bt?md z06DIZRL8%fje&3x!$ZD2y}ZPXd96!PkP$xBkdUsA1M~;MZ?p+MPdeB(S1z2uPa&13I zeA^q0ODl`?XRBj8=i7j78Kij6Z5{{@8Z{~Fbi2njuT{@$yyA0r~V@SQtdA;S! z>u!W|-A~wz_#1n&5qTrgULF25jqr1&7~lQ+PtY=QfqBktV)&fdM{)t>^(T5+bKwSI zgg`OM?zD}I_<({!myFtyRrps`bh7E+g2#pjnc*Mkh4K!cBcZO7dslSx>oNURioX}%4?-%P&k+E{G}o-c{`-}q zcrMyj2B#{#|MN2!-{`~U^*{L&zr4F2bc&S!?_l3y%N>hIM)dfSn1Dh>RIH<-;*>a4 z#YL)0V)pQ-56Vz{mP;ni%L;icf?aDU>(M4+^9Dk?6w=h}lTy@jhk)%`oW zWGR+14*nTPeIrGk@5dJczty=2=h8^$j#CY8bAt((2Db%*qyBJYnDD_uS?+*G5zREv zKo3aX3~p;W?0Hc2IQAYp=PG8K=zDuJ1)pt=KIPNGSAICG%}8`^AO?K*c{nbeF|S$d zdcA>TR8$=0CV>^gQ^8%}a>*WI@!(}8@+(zdcWNz>28>C3aY6onA;RmOi*`ma20hRj zB+41L5)q2mUq64Lk0P)GV&qvWl>az}exbqtLG#H<5ZSxvHi4ZIKsBu-_E>H7uDzz_ z=KDRf3r@q~{Dt(>L+Ezw>;m0fp^gEI0OIq_lI~ER(=#w2VG9l~pMd)qrGsDH17DgP zwbK=fZ*CjkZY^yMwa8xPIDB~3s#Q-;zmWetUN96Lc-Zc6;>Kx=WGvtriEad1Gnd{V zje?m^8)pBPbb0%qbb0ZG@nV3|Fr>i?f`JVXG9+H&SijbPf1z336j(D6!uH5@;RM04 ze&UQxq~`+}>-_<t7ID zcn+NKFJC^0XD}>w^dZe+`JkIk27Wo_eXjm`go&uU3*wAgUMjwy}cCkLzNQ6)9xPik27rzyhmU0w6{NXGFv( z5YhA88e#7dwhF8Ku* z`orK2AS8l5h@ks_!_;>VSob=RKqx`6>2Y9tNyeu4{J7%ekwQnEtiZ{h%X* z)dReq-voq9c%;J$SO)p?4@XxYrLu)G0If$MQ|fN&Vgzmqp^V$pV7v6vIIDE<4tV+q zj6ro}T*I8zT2)aa=1*huFPeK>Zufs7xEnsKMY;GFwcQAT+7QpRO`&RP8ga0=Z50zq zJV5A@(9wXt3tvSTFyL@T83bHco?)9eJP0s)=iWvIz*S7l4R#CeSK2JH8cg|669j;S zZ&Tu9zH;m`v$r0qCe{N7wtL?~I0#~EtRBJwxS6th>szK=Abv=eN129+I*!q9`LfB= zf~8);{hPy8XAJ`yBY=$gx@ElwAy5uUzjO&&%c^l>ADgVusO zu}2WD*1IARD2fCPn2zHGaL1~|=jH2Oo3C?-3%CdP$@o1)L%^Av5`i<1YKRm?!%r6q z4sc*_4=}92Zy+Tw=jHY&EG%F<-6(wp{T@{j%RT=$C~Z@I6buORb)d8FY-~hDn4h1| zwCTox)=gHq@3QgtqWRVvA3Hf8^!fBzrYxP>jpzKz@2xk|OQR~5^@)=ITp>^Zh#QO} zq-LYR!g(Pa?n~NHdjH%TJU%L_s@uI2$xUHsWMn_Hpo9dtN6kn$=zREZ$T~i5eXyKk zj#isx`+&gl3X945sCWe=(ZZiQUSqN%wdQc5P>?Qv&PXV76%HR(v)TS#`zCwe5+#S< zCpp%1h!KDpqN67%DBX&Od%LZ`Bo47l#iF;9(1Fw4T6X(-Nle$_At=UgqMobh2t{L6 zJ^5d*s=Li*qhG#6kD&uWhX$ZMXMV3nidOehCS?6GlsPWn4;62>4i%*;#)uPRt~+X6 z`L#7VDNP?g#y1W*&pMM{4Hs^B?*f$Bgay}BID8Z-aWo%8@DTX>zjD`p{Qz?Flc{GC zQenfGv+-rK89I9`4o?hi{1JlL;S~ur1W**5NJ>h(#9ZtyT(}x960XRfaEW2S|HX7A zdVO)*zPk%Ekg850&Chq!Xm%|><&At;T;fLD9ggs==tZ9#zy>8iGO%X_j7aF)2NH#H;i}br_}aRjT62@835|4p_9nwnJbUw2hp&I2fH78s4h*x)iPEXMn9G#%gO| zhVDsbuLkR(E$#l_pX^M$uyt#NY$O}cJ+96fLL|{idt02xGwXbLDd$CWa2QyE9Rp_B zBs*scFzHE59QF1(uyR9pfNG7Ad$;%UcsVbSr3feubWQHckqMXV}4nmZG z1L?sf-iKK1Y0cSh|GwRaj*58!4#3J^M+_(?qn#4%y!C#?|L=!~D^TijjVE|ozdg?n zI#e^CRFhlp(Cmx)H%Z#8o4kT1$~TM6cOBcWHAgXe_#Xf_CQ1Zl)E|PJIpx=c9|q(s znVCWJYC4jou$J?hhfeBL`8P1@>NZdXfd~`Lh2sJyMLE<|^m4MYkGWtJxY+`cU`Tss z-oAY^Gadwxm(QL*U!foh8b4MlEMpK|2j8T(z=5GRD_r`XYUYg+Xc5+^1qir>=mV`C zq%}am^UZYe11MQQX7GS522PaaZxYMj2wnoJyw9X@uoBQXqqP$QXbZ!bIoPwpmcxy| z(CUgfB%4@txIqu0#x7+NXju~lq@v|MXi@ONa5=Cxf`F)u`DM580iJ*G;9UVm1Y43% zHOb5#IeqqKQOi0O@VF*dx6``x7G9 zm!LLco_#WY$?!3(gHfO~WdU20dj7}e<`ZV94uQ!7{sS`%<=X~<;=e%k!B)gzjRH)G zi!;1%;V~xB3H7xHoK9`wEVO~bwE&1JCY@k!j|&Cx#-%AZ4zUQnB^KhH>a<`}saVu7L%MQ(>LV)ecT)jEn#uIld-U8TEWW zHF?|p{j>6ZhZVaQAPh?I!~!U2S#UWi9j(=e*!G$so=VZYShyo zmW;lRYQWvEToIjzqU;5O_fe|)jt<2!8_qM?@^O%l;wc8;hUt70TkVn#3Xc3t=pj%{ zdisN0GMkbX+ZR~M8CEofU-SCw-7S)}I#1{|Di=3vGQSN{Giup4<*|C8680mf;?gq_ z1&129yIXJ9u3ZlD^zY6>ow($ zQyvMGw{s+5?BVZGuvGW-hej5nPx!^Wd-LY`^5!usL2Ne|I8-c(Xo(}hdX?M3XqxuM z-JZbvEQH&SM4d3nYymV}Tim-iena94guIy8fn>RNA@NUOTTc~&9|x#4y4@w+em|P0J76$?mm3Lt&>GQil`m#f!PEh>j2CYG2%UGu+=Cz$ zW_cd$o-u35IGNN?m%l}l(rr`JLN*$fJ8z2$kmn56Z=uuIJpwg9fOePK-wY6`1Fm|y zWln0ZvoNdUONY~}0k_<)?kna7VI3e@v@OfSgAIE_rEh<9645?;Y;7;~X0elEhh)S< zoIl50T+MzQdNb|!2TARUZ&Hkd&%GfUUR)yqc<0*N=PypR4zv7)w;QO!bqc5RG)KPl z`KMNiljw|j@I&_QjUkcdF+u5g;TEgKsR6^)qM{XUrz|Z$A*kM9I?$X|DIOZ+O?EmN z_;>%ep3L~R9m`ex%IWzmF%b+;Xsi_^)Nro@>uTU>iwIYCAW4~HzVv$l3K z1A~kpg9hmTEh7%lOK;t(uBlnB-e0?Ak+&B}uC*d7(arx=EaUB)M9BH`N3FY`ShD5?rj6U&TK!Uq~{w*(I43*5~%ofxaVO2<) zQdd#Ib*_4_x8Vb%iJ+3g^&Y*Zw>Rt&k!?B_>oKmj^jGI z50;X2h4yFOL?S5WWRR5tip6;}^{#W$m2Xs`lKK~BJy|0p4;cPRcl0364b9}2xQ^Ga zi@OBU)S)P+y|B&5#RcB!xKLE5_!n>5IO#kP$6{{mpKGpP)0rx5WqceQzloZ9 z3_4w(EW5Rs`vo2(`g;hxxyqB)qarH3K%&Kq%HxD?H+OfvLzJTuz zHq&9p3qLoQL}|H(>_2`SDh~!u=Kf(LRU(%`oGEm(Dor}br@;_?$SxOm2yJq0>K_NY z_o%C?($UjP9k>kfg19(g*fc4F$%dUx&cDY1?z$@M^^TD+E5qM zGNvY^5-V=^A!YitH#^r)LiL}|)35w$meN?Xf%0%@m}=6e)*D&RX14Dll|^JFt3B@2 zyp;__(1l+?^k2Wn-!#FlsgvfDB&`&Ou-2>yE8koV7D zoZ=M|L0rDNRtrD4m>UnnbS}%EUwgcM%(We#C~wZ!sL8h=M<5YjdqSxJ-n3|lRVwq( zzk2n?Dgs1zqUd(!`}s!{)YL!689)Bu|9AfMpYP-U(GMPP!hAmxmSbLCtNnaYb>FXf z4!6q>s!H00?%H3*34@yuClH>eM*d}T^XFEmdk`KdSpd~yfg@u&SompNTyMK$XOPKRY`hrU1KxCX6%oLLqzm`= zrhM0|;_ge9mNg(TaB?p7a(U!v$pj-pyFQkUYHSD9 zn%Z4(A)8Qq5HXLZkBEoWEA~dh6OrOZco$y*s0Xn{8F(dNCJ@6CTtHotgHLj> zkM!30nEz(zllvm2eN*D*A4}w_$S)*k^LOz746MC`^2ksXHPNJt*!gFzBh0WAuc+ub z^TrL%y*udX4Pe2@e_mNx+1#8%Au>E1b{8m-qpK88or1Gq+tYP~ugq{Orr0Qd5dDGy zx|QF?4I2QZb;Tnp3HNU30rp)a%Ag&0_+Fj8`1r^Vd{WeXWZtIwSWJRKIoiZe>+fX6pzz zcJQvRDlfm!rN!$8*0uo;pb-%`&lKN-!`8if$G)9!_T z5qDn@bOS{hu=utqnIDLFbQM&FKS;!3r54BPv|CUC!TSQNmeGi8#RPb9ety7Dc5Uf( z&Hck?3Dpja8f^vlHvJYnNbhz;Obqz}prmrmE#A0qgaN`k1D>ypyM>kSzL73mV2KtT ziI=|~=TdU{X}g7ztSrzRFdjh^Gbk5wUqCb;n+Seq-?rKbBCRSU+e0z%PLV7cq7am@~Q2lXehs2h2qSydXNy zp*AgAswDJ3aDDdAsAg66KIfTvw(4(plRx)&QLppU7~mQM8AbcpoCQ=3d^s>t%*qQF zTMG$eD@esu_Cxf68VYG#wON?gpfVa3I}W68*nu=aWW@nM!(e6+QiH<_CggGuk0u`4 zhmn!6c+&UCfMozwdBzdWeMm3D{Lhb)g>XaH(yG)3dR zcdtGGjpSq^Vw?T)c`dCr1Tr*>%vVqa25#9|w6{}Xb`ASi4B9YYAw7TozS{~EB0ypV z%S-bW%-=gfOv7)1Z3Z|mL4i7WaJT1S4i4*YvR*^*|3%!&V6u-dC?@a(MyWYbt_!h4 zj;%4k92h+}o4NP+2yklWPQqvyX0!O-W%Qgu%urS#S!pW%EV$QlYx-L|m!>eYfOa|U z`Ex7G1yMx;APH?TynTPWF-SI0DF;_%0%`~Sr6YYOED2A@{5&N_@46xf{LA%YKZe6u z+c7)Lfx4goj3fl9qMlrmz9M-W>!CdRJYdVW(?3cTg+U}SsNJ{NlF4t zp|u^#e1}32_ivam-x%!%H5o0!;lp=n0G=Tf4*ZZ_S2=pE+L{1}u^}7Bs?PqP9k1%? z4}S)5Ju%Y+p{z7ZJ-!)*t*1Z1`c`*;ER{MCEFl#r(;jH~Tx~4-%zP zfg?x0f-YmW$4z{dYrg1yx|CnBOu#s2PoZRjON-lxm0*)#?a=p0o-2t(y)~Onfp35s zjYe#w_C;aeUvQ?(s{NVVS-v?R1nDH3Jl;h0QeM}!Tcu7F8T6kzt&jvOBKE?`=*pEx z;%_H$k|ZM%-Q2uaJV@gfh6L;Bnk$~5{szorxG6O;ar@4l&ytgSSz*mRif0ZFCz1H& z^z|ajJBY{;yQRTjjOF1D+9vV@Ovok_U0B_K-lm>3M`MSSE;z!+_r1e)%p6%St9x%c z+@_(Wr~iN{8TM&J-4d3lhCYu%LUwyXni_rKv8TG#P5MNOa^ABn3H4=*y6f+}1^YjD z_%xm(bQ!~~ppWgzj@D(>0#Q^M-{jo69LzdUG>uPaksOk7dciS;#%AJkSv$!wD*Q#FmNZ;0w{F7_U?&j%zg(KSFoe&GlwE`Nq zvl$=Aybkc?!mU#aP0qS;U;3d7;Mc#K@05cu(3!NN4o~gA+wLy;Qv^JB-X+p{YR(0| z4lds;igKi9Fu>4ECemQdJ|VTq(q)a>(`(PB-LK}BzRFMY-*?C?YHqUWNG;5O+^nYG zdGcJDdxmJmVdt8o%D&y}MBlJw<(AQLD~+vLvnGTUhw1R1&mJCw&Y-5l2&Ix<2c&5l z9ynj6ltrchr||SgeO8xt3mXkMlyjO<$|3TsMj9w%Ms_!rIWrRB*y+YfFnet_>toz5 zf>V1~zQBD^n8m=|J)-ckVofDqwL`MVnqs~cqLeJ)iGFIX@DO~(B#3=hYHIZ9zB1^-)zm(K zLpjigxtyCn7d33Tn3;7z+YdyxBH|~~3cCmBj;&*XAsY6w}^se0Eel>)M6BX z`hnmnbBdHwsbL>1FJIptdum8_AMFx*ZK974B8Z*G$u|?Gc7HeCr+%M?+48D+gz+NGf*eY zzvVNLU1w}#b6@;qP*j5{1RDTTaK7Q7$ zPOh#{pde8>_b%yo>;Vpbr|h-5ypmKM@Et(SMfw|NTpo}%QkqPo!~{0A<~qhTpCGW5 zdiA?dgz3r~iCzPGxKBG{uCl z&`^*vFq3Q?`VKbZ!U0E3cO2Ik&%y+KYGo1(^k4}o_o#OVividy*i}KkgDw~omPs=} zDAc0k6iP!{{QT7md%IM~Rgefcx3A{Nw}Ybd#HWR*SBq5Fi8X$$X_UJJ<{daiM%K5x zY~!+rkTFQ^MC6?cP9<`NfCJ;p_KUkGQ^tV>?3M9-qIPKRrp6j=;YZHD55VpZb+KfW zf0+U19yrS-e+CY~f*nR2W@hly`%GPCky@Xsox*26EZl2n2`!Uc9E8hVw?f+=$;Fjd zRT)N5A2xVA+#$$vL$Fs}AZLZchxT@4KClJJq1J3xfL$y$Wf1tFy~a2JYb2tniBL}f ztHvev_vhy2m7k5WEJzdl*L!o7=IW5`$k?a}Ht4RvA*dtWuA zFipvc&!ntMV=4LFtn>)Y4jZaB-aA*~)3#p2o~1|@!QNi4V=JwRFFS_l1KGyP#(6l} zQNiqmREz;g^H+5#vTGoT7vg{(4K6#yj{ARZI=}2eeVoq-eex*mkI^Gp0HEmk z3~QRyM*Rn!_0|ftE822k-wyFw=Lo@3#A}peM(>UJ4BtBPyV9fGN-??;Z})U}=db%3 z@gqjbI+=ny^izG_Bs=qGmL)9xa7qjQbx1#o1zCqd;!0^j{_&U6panZ{0KYw>G zKC<@t)k@IL%YTSuE!L9hgcMdaKXU&l+UjA=UPTaE97TTk{$6#Z|48QLU3F#9PU^Ri z`O)ZFDHSu3mDN^UMVewi-pq<_U$XW(yT2>v{Et5>`uRscKBJ)a{*j6Nf99vp9l_W` zzl)H;Y}d!Z!3-W=m@ncFI4_V0!=fjE?+uHDP>@O>^H=0U*QAQYY8g^1Bf(z%q zu#>n6Iyo^QfoSpqf)*i-hyl;=n`1fW1dJny*(!t~q1sF(TR~4VNzlg3)}v}ylq%r5 z^c^Ya1>PO0hI{Ecs+k?HGfL^cXqN=oJGvW{jFS1GS9-XAh~cN;kfE-u+%+^*5txUN z5NyGfeelNK2d3X{@QtIVCs~>dQLtlM~R|nN&@oye`aU`H{ z2p@ehFXnBvTz3?PXn5b4Ttn_h*aL%zCzL$KTjEsiJn@n9Ytv~rM3JtgW`?>RFDI}% zA*H8VQZKO9YA4f7FE}Azfy8wE#@C6W$Jes|DiHbxiSZXod9Vb~P1oHAI~QN1Q!Ni=vOneS?r(4>~gb%=?ji5xwr|~ zEzzkK;0~iJ!pN0-f8p}t7|1sgFcOV8mVW07h+5EH!;BZ#+o5?6%V#7YqK9!{*reo^ zFsul87uig__;I|vZ}NiVA4#s*O1<$rCe0XtO*i#g=6~Pn`VC5dPk%!Dwe*_Wojls7 zr*F%1{svZKP(?3N5?Q;ek0kUiI9CKYVMUu}3d2PTEclw5)aYm;(Un&*`e-eK;l}quOdtuPDFBxOD;o<1 z!~XW|PPx>~8#{x3xmGzFP61j#lhKGu68e#&VJHbe@kH4mUk26;ObRyB(EKhC{NTY( zr5C7&L`5G321*G)MnP!qpPAD#Fc@d$`u>jE15*&pmF?0=BjDQy1*@}hm7L`1U$@*UbY+JhK^(i??}O>?yB=toC6&R`In zCtzhnBpkMFJbM$Fn3lj3(L-ZBCU@6ZbP)qn5 zo^RN3!`lTxTMlqjWMrHxXHO+eR)F3d11bu(1QuY54U6;80Kf!viLE$v@xS3&LDx;c zV@E~(+?sb-O1p&ZN-w4%Iu%nUk_?ZPJ()7mb$N7(Yh%RPpVblhc@IfIj1e3Q<5S`6 z2fEsW;9w?8p#*>d7xnc4hYqr;8bfPD18_qj7Xl>(V&2Q!4)GL*3$~&=mJ2n=a3N}3 zd0Wuwa7%`pJU_tZ3cCdEQsoeo>JHmrF~G%T31cl!njkr3*O+8#&aU+lY@;p6%af-> z)(%ZwbkF!iqhtA3Uw1|ojOURR(bDqJXWG}DbT!AN#G?0o)NzoqHER$ zh`#OyFSkIW2zbK4S`7H%MiqL+zoK`N|4Pcvo*J?8BbM4rG6B&Vd{14y_;B0LMLA%qp+ z;emZBHgLS4H)(`$5{~TLTVOFYLjv**zY};tRaI1oI8PXyK7FtLl5=HsHLWE5dN2R2 zBiZL8b=}++(Hk5;etrDvYM!vFN{$gve=GqorxN&5b@CBgS7c_&%UI+lL*U@3UIF#C zi+U_w!FQ{@w3FmR9}SJVvd1lPlf;vg8dzu5}rTIniX1k)J@;e>t{6HxPQwCDCDFhE_Zo)MOY?=x^WYSr^DyKIEi-Td>c^xc z*?$Lo0cN;dEs5X450{_DMLWO8dWpIg4lU@DzIhTzXpo!&NT`Q`WcT6F^|gJmV1HM7 zFUuQ?QBWPf!@n;wEDSXk47=>g?O{1j#K>xCX+aVRdyUt0K{3Dx;#5x76xT=B>$fM@ zSfV-r_Z*Kju#puj`;J*Iz@jyN_`$t(AK#@EW@kT9No-qhV{Z?BtRg@}vsyOCAyRDP5CDE00ISyw-wf?U znJyotl8ERiy+3yD+BG&bWb2ZxnQRpC@OR26rAt=AwKz~LxVM2<8bS+vJE@_(BUW`* zOX%Gh&V80l$e8!^^b88xl6z94@t*9yh3%uVGiRH-zlf7p%8t<=g>WjE*f4E|tLE>& z|4#Akvx@M6QS=;hSN*jCNKlzw7BYs6#QAth@1=2Mh^&`|nu#X!|kIQBPuGWP~Uq zKrRkr7SyNcu(UQdpKwQi0?*UyuepyLITq&79Nq5Rmdxep=clBvAJZOUyL$K_T)9!) zA>;s=H8@w9f)o>6p{{@`CPgbJx^W1cuQ_BYi$p}l#=;6zhBW}aYG{?w_1C`(su#jO zAMNL`y*qxmy>L6=RP1XD3kd5m{&?|IIjRZliR6U^Dc<$swBk(+XapN-)?G5orcM= zYNFbt^UL804Dg{kEQz08E|WW3!*(W7jc6l(OZTPj=}okSFD;tl4cqN9?fOEWKyZi7 zeZ7|?YXEpk0(^WqJ9!;44h01 zqhn%UM6;Qqg2EZJtzMEz4KE^DDjRb3r*qzwkDA+DX`I3Cz2Tp`cSXg!#W78*@`?@D z*L?a5_zFn?7`kr5h8^3sHNC3pk?dIft7R2&d&fob%JH`X_G5oHzP1cM8@SZJThze? za*NtocDNADi@-MOD+12e0EM`1sEDO5y5YzFLg9)PpqcDoX!y2$a0VyzgvMF2pw`0F zw8hEFlcw_f^^iC7K}4cA#qaxOHc)1D*GT`X=_a~X_1OAB5V7y+?>=R*-o4;X}Ki5ba#Ck4f4c#cAB4s7MmUNuYar^c<|-)-#G zjpR-m@3M<@C#AtQD~5Q-6xn;Tf0~IE+Gte8e`<_qlJeZk&7$gLD~ zYHVMs3Ky6NBd-GyP8Z>3b75Ns15xqqLWT-Na*8 z^Yy--o^S7uQxhg=MCI8wWH&w=6YWVAvv(CZt-p@#kkg*8S6+|TQt8^S<&tQ(-*ci-4nBPHb6H zM$VwfL7W{>W(U|2wG(Q{sn2~dxzT`~_>LVAz&C@fj0P$`Ha2gv?v%xM#S47F=8%tp zlOy2`%B&2=0yOH+}E=q1u#37IhO~HNfr54I3(m_3%9zZfo1=v7i;XPHUvadZBW5 zE4O}%N+Q~l!m9Y@(Q->F$Lik4ISU!&9($aE--_<%hTX0t#4jO{s(cXLQpkOfsdKcd zCt;q8mKcQzT+wlqVy}jYNA4Xli0C$AngiEs*Skabak@V!70+!NlAgXNQ(+^Yt;F zLt$6-?8?jjyw~Mj<5EBY4L($Z_l1R2vR|(43Yr0cX+vc?9XKm ze*oJ8;GaIypgZBU1JfOpt91Knj8|xo%zPt-I$w~!FWKbhOs@#m-(&E8r^Luu!kApP zz(3GATLz>D%kq$MN(YJFvnUJ{6*r~lWM^-KlD%;#R2)J?S|V&{FdiwTWd@Uct~)=N zeuva)VCblEwbY3dM@T4Bk#4VF&v{@DfR7ov0~8g z2xhKYZr!u;U9&qcJeRP=@Ch?XG}x%fA^T!vv=Q<~{R8+Gza|60)Nod!N>;+ z81U)T^gEw{A^i|?nMXMo$0VzZtdXZ2{PG3%$^b%8lftJ1g#wl+KE+Hn!?(e-Vd%SD zoJykFm+vkp5UEx)h7IwYeB|&Tfg{+uZWLVt&Ul$9WsJ!^-3}l1_Pr+5(fwviUVFmg z;-vPvY1Y3+Q$HYFr<{!^e}ec4J1a^{p)@cCo#H5jaP7}}(HT}50q}sX0&tpLUQDNH zCZc7)KYw2Z`+P!O5m;p;V*N=J=?A>L-4KKKH7+tCSC}=5FRx(F^Q^=k#so_`|#CEJg|@f@1re4 z=!C6N7VBKH`eke;pk*J;6TQy0?@(~@K%hT%W!D>Yi@?Zja`FJ76&C6u9eUq=%y&}= z88N?QhZej5(#|SIh_VHgHQ7%4qWea$YRI%Os?NMTSoMAa;{vRwXva^s+J0KSTkm)+ z-q}#KQ@FOKfgvGs-9qF_s=lMf=H?1f%Gf!eCPLDQX=Y0av+G?CDqZK^Ah?n}l#j=a z#+M=7jKGa1(g6`g0|l$?)Do^Eu2!F)D~xau+3~2LmJr8%`N9aZw6ZdQMy?ZO2hdTX zBL{-1(D@8XK4~c_#FXO&ja6_^(AUBo$@_0ijB{FOX%8?x!q0w&XFfk)J5D9dFHXN` z%Qjbk=RdOMGYTUM*tT2A=g+?|$(2Ri8e5Uo#9TunaeAM}Ft}^O- zsNq8Z$WZ0Zw4&CP4=3w5(=#&Oe3zz?G`)P8spOHiZk$TExLeEAbfiFtE?W~Ni+l_i ztn!(F3H#J|Lht6J<;TQaUpl>^CX9U_@$4mWuvpibd89Q z%t{>iZFJ{fGaljwICkshq11Z~>}O!*AujD)1MY3O?b#9j%}q_0_`|U60T3E-Xb0et zw$#$X=(ZXC+|i>wlaH`j#poJquz*05oIC9MptHZ z6h7wtZ1KqOgq4pTKfLtxv_%}C@4$-3wH@pOsS&0&NNMQmdR%)cu*?AK&vV}8bD<(; zqPngle3_aU+Bwfnny|Q~&C7R5NL-(-B&@?y$>!3?d>IFC4^vOVenxbp8W=@&H7bJo zBJ8NkvyscF{F3U^q6Y#FIRTZc+X7@mA5&)djXYA{05%lYOS5K4%BThqMx-}LVBP^D z1|HX3c!+|M#4R9D@~tmdo;Ic0CUgHjMGzQ$x9^-v3-llEO)UOqLaxEB#(sh`{EB<- zy}y+Jr8eAQ;#A6pfn-96$ic=I3hdzXJsASFz_i!Qx5A znm{lb?0^l!seRRjoH$$|7^|YwLA9ZF2x@C=^n30hibrs1Ti1(Cq#%!(8y+wrLiy7pqnJe)00*)nj>QW}`cl{0+NtS{{fVLTh8MDg(i-R+qg0wh2lvwiF{^SCDs}ew{ zZmfC|I{W3XyOwK5n_#|W#H!duIj%w1v6aQ(S4d~U&0xInme$YxHsb{O)>l+!r03;T z=3$3>vExjx(H&KXU~ky^cSj6ZLj8a9rV|jU!FXiOnVJg27@OrYs?G;;agd2Z)YFs8 zJSde{KQxK)0TwS$Xr%$qk^cTK74WF|GI{jcvhCG&!}#kUR$yuiAu-ATV3N33gsMh^ zG<`C_(udp8~Fh;V)nfea*|^4Dc*W_cdSVS8pOp z#nN1%dZWLdOi1qPxFJGR=GRdo<bQ78~~hg5`fJ}8tz&1eC=OPVs5|^PklMgEH;38!^W#24xax0-8%eOvU+`m z4~m^VJLwitcOi@iwx(=2Y|=H8hZTf_YV5^qf(TbIMjuvqo+c#R5Uap}mr}E8sphvS zp+Vznkbm9bB@87fkqnN}Odo#50lL_nmi9FL8}h8AE3-Vw-(IiXMK}%h`PB+0@eWQ1owq->C$HNSuVYWQhlBC=*|%^uQ#`ghU#)o|P?Nn9cG<`-`f;-ttSlv2y} zd=vB@51&6c)=yn*ln!cJ-HFo}z+hvBww0g`6YMVPXAP!quu6w#6MS3&%Ayd(0}PN9 z84bu^XhecYTxDZ?%mnNAz}K zp`@@ydNa~NF`YpPiJv(&+Fo%Nu*QBjol)dr0{xCtF@Ywlu@niT_ry~(3kwUu8B@G3 z>~^0!yw#9v54?^Nln)}h2-OjpU806zSNmIgF<}mfF8$@=V4uQt*iOhP;m>-NJ5mU5 z5*!(q{0@+Mzkl!T>%&I+&5vNwkh3gHU}+>BgMN~_W{2LiI1d~SJBR|DnOXVl*#U^E z+*T6w>-&)L>%->v!|+o$HX&6{f*8c+`7M!=-N)bX&!h2dj8 z>pDj3J5&qUze*gd@yeq31!Qy7%WL!AN01?YH=9=VMZDe706Qwu$vu#wJ$(3-AXRvw z3sbt6?uUrm5ON_5l<^nntzV(EaaRaPgYuCf<$SleVmBe0J91H0FSuR+VR|qsK%)nu z2?}%k{(fRpA@yGkP$V8=V*@3+?S@%iHacKPb5z}v6Xq32E+C zr3WW$7EUe4m?lUo*1fhGEPxGe`E4H%pb9Er3u%)IdZx zs3*NO{t#ZAAV%FkeW&|08KIfpCQnfGjDZKEXS>Lp%(hc|Q&-maNjBKoxqL7`9#`LmUVp3Jx_Qf*x5KrjKJ8>I`PGU#j;L` z`cVgE0*31}`S0i>B@5x|11G|E-%ka-yd`ivY9|qW-X72r*9)ZoHjVpsth=SJBSH7*{e0klOaQ~w4 zyZR^9hD28LHEyNF?2o6=7X2gLvjHg+ut0fUnowsJA2N>?AlK0NE!Jnm*@valK7tm z(=0p1!>Sw**hFF?k9DqY2>I!|)di3i&Z6oQr|d1o;Cjy;wr{^@ra3W$;jfG2mWUj}g zC{ZtV_w?usXzg;Ji2^?FvDoO5c6s8F6=tOvp)V$Q%q4&cI^|46JuGysmFTKbBBjIl zN)$Canzt1sB}&+uiMlR8@h$O zKMF8605v$5a~|?D`Vf|_)HRoQEt+5S5(YUVBf}FY9dqy;qpCv`0MfOg*@mnOdZvDf z9W1eNac{wgJ^TP04GMfTGvMM(K^v_F%ZnpNHZw7q3pjJ^yC8!C3$zDlTd^In1`NUs zAA%-)~!IIx;w~sT-FKYVTKJ{;aNO|)D!B{l#o}zc25=#8l{{d zyGLtrDk&-&F-$yq4_^EQZs35Bjq-d)^Z22m0SFf=z@I zWjyL2h_*EgGBVIYp@ZKU#_9=)2k5jf&L8l^^+-<|X(wqUHK5zVIr5?cE+oyhwXZn| z2iLoIKaZvM%z~(Y=1@=%XHo-D7hQGrK8shrRBNtlCWB;cAcq4RNE6Cin4qCIt>{JH zJbWA`-TP=ydUzE2$7`>7w`-q=(+3<2`f|@V5H%r`BU2qP@q)oiN^y9^d!uxWQCGt@ z#S>H$bh9P>*Qn(6FtlFSx z6Y}+gCg?&3JhuSzz%nWR-GGbFPAJq!g8NmRU28kWkqc zq2jdb*am2Cc`i-7?p%ayCU5Rb62aW%L||(n2T2DeWN+WRk&UYZG)3BOO43JyM+}Nh zo^vWHw2P-Gr~G(*iBa?~m@tnVb7q!0xbUP@&mQqxsXsK%+yWyE=WoD(R1yho5B1#_LtT*6Ab0iKf!&;>F}npwe4eN$&9+{g zzIfrn@0`Kd?WU%uQMKNZ0)9R;*@Pk$PDKdX!7K+Os&WIKskZzWa8SVR2D2;|rJSaY zj`)!y*5AK0Ks-?^@--*rSc(noLYACOU@=xIRaj*d)A${GI-X)U)MCiKOm|gJpjHC8 zaLNZm-0kh`2nQtDOY4^TI1QpB#c-GIk$M-7!?#wBvaGTadju9a1mQ~=d#wgUKm5-C z`+so2MvUHPmxne^PMI4?E?_tCr0MG$g{2R$sFL{5lW9MY(uAXiV0l$eaN*xLQHGC( z$j8GM2beRhq}rh~=oF8pS9%E&8nn<*YqJ)pdAPXfBtwJ*S$-3Vo|Y5gtdwkCeDKPM zjKg{ohkJ?6(J>|uC#qn&MNE)jX(BEjQGhNQPgs}GBaa8_F|{)=KbDf>&T{=`I~7YQ*sJ8Z zKHCU|hxg~MnN3w7WPur8g-$O{_ z+&V;efJw&W;A0&6Jlm)M%{eHE^&T=Nxy`@S@BSNDEv7sE7tc$3_J4ynmc$$Yqo&$I zymOEFku1oMM>7Z&4~tZkG9^_LTbv5c@|`kW#H<<|7HkarY1f6DXCaUL95ofvLy0u+CvbrHF~afP4@Y3W~8m3xS!w_7Po1QR=@(x2!>O zFtDgHV&~wnU+~4hdk4e9;@JM`MOYinp62$CDT!mjEB zk!MN#;Kh$%aA8Yy5V#m7&zi8&n(vE^1~B<{#>Iu-Y;PgJh)Y=Nh~Md6&6q++PzOI9 z^(9I$3E8FbgDj4d^?VF)0C5~M-8ySuwVx*MgtLqa-56r@W^ z>CQ9od3JpJ-RC{$&-rouv1GwqYt1!djC)-76+}dK9GR^==4JqV(!>MG2i!yFv?p&@oY5#$wE}4vj;Tq8VP47VNM~Paw-+B2v z(5lG*-5Rv)Eb?FtI;;|*a*hx1?XX~Bs zb+JStnD)T(=P7#RIxO6vRs+!GfcNGOg|3;z>x3ge$fKj<<9u%5x(3~z)!JvZ=m1W^ zYq!zsjcbsI0pe38tU;?*y7&udMj)XO{3&$3H^|(0!B74%QUAuvd!pvi7dgcOjcQ4z z&X)Cm5b=J!g9Jz*AO>IeflmZ(y2k2HHdvrd15lE=+5Z=$J6q&W-w~0Jz>o*JNM6Rq z{rXIR5eMKyW&KZlPa0|<1_M$9Fa(4763`z&y$R559)#=q+sZcE7wx9wHNbiS|HS;_#CgT` z4)DYQgG5DFmjG1kuU>7t{{%GDr{;TPB|p_}CaAv4E8as0>V7@&1&` zAh`g18aQ=3lZdJyP#kp0JVI$nNO}MbosqE`Sl;K*137R24B@K9QZcyP0P+slmhD#K zVAxftav02aa(gO~S)GBiR71lVU<`k?Yy@QwxCa5@jA8P{pA)-MW_ND~%SZUHfeQrl z{Y4OLqwsD2(W6m|;@L+)P2;s9?BLO|JP!UkRv zzX%`XT-@9Mc^g#Wpd@l-tWdK86T%-7{X3Ad0Y)OlEI@GvTz5deBqIaY7n+Fq2Ui+e zTF|%p4G&Z#ctE=Fei$I)09W*Kcsd`oI;At*$guAf`1(vZo+N^pfM1voTo!(r!8$cg z*z2@~b*cR!O0t>#LJ!);-Bu(i72W=ZYLl1cw*yx5;6#E;0L0+{3*1{=2X1G=$VXh5 z7N>v1mHw8_neqRdbPk}$l@%4iAt6YJh=BIh>Qxc%kOrn!aK`~I?@?(PTn?S&O zE^1*3`RL)Y6GVSMgC^vEAEAN-Cg=ASbwf92mr2j z``hC^SVR3290wo}aGo`*`k(mOKWiQ)JzLSlzn@`;$NZcF3R*k@g5M30ET{*l0{^Ku z{L_p6vy%|0p8=cEnqvWE-W<3R|FsVgm)uXlD1?9bf2!_4LIT!*!f)K;%s|&TB-A2$ z_3ylce`*{5g5Opb{FDCxkl-W40*NFRL*Kps1Ka&e1^Hi|y8Zu2r{{mW0-9zQhbut8 zwtf%*PTL(Om_)!YK>7tz6}(-?@c@e7RUZtIHxm`rj-=qtH0X*$bKD;f5_x%e*etc3 z1LG-l>^;ElcZcuP0L?_u#?5~PTx`Hd<_dU+Kg40Lf7MUw44eXR&WrnW|J~z{gRJP7 z^T3-vq6d3m`UZeOFa-gnHR#(fQ~{0k2tfWupCT|o;tRL~eAhx=J-Mdx?)HLD`DOSs zq6au*rJLoTEfcu@8{u+nSFg0s9T*z9s`>$qna2-DoH*H)A?c?Jq)YQ}WVYq;zi=Dn z+u>H8@Sa#o&3EqvfsqQxg9aHW0Gb2q;6K!R&=CREh{A#oXg>l;444uCu?W!A0OkQK z#NYYdyOi`2Jzfn0Z%}@KI0@eGDgxc}+#qhu09b(lxmbN?=lz7|qaWzd{jrG$xop4$ z66E4AFfy7Q0;Hnw{Y`X~3jvGj z|IUxB=Ed6y)Mf^ne87RU$#WYM(*1YbE!Ha=c>}yLh{I0%0NOFY&H2vm@xo344~&zi zmzOI-!3>Hg;A8_@+2LF*DYyne^pQ#8{O()P|DZ;`9|KnsGLb+Bm`T9-d;(el*|T`- z3Ht>WPC(=d{^bBaDv$~h{CJn6rvM9pKR8&}xz$V%sB=VM{G1cyvi^%~{YPcYE-3i? zk(L+&0_D|{FTnpvlO!AlWdMkNKXwBUMMIWu>HiABfs`OK&@yi?0&F1`mc*`uU%$Yb z7?3gm9s@8curt3h0L^LEvJud-z>F`_CjAs7@RQoP0+@}Lz4?gm1^_HzlTDxBB{)%B4CvP+NbmB z6vn9d`{2*0B7n80n-f4=1|R}f(o=e1BndilU}gmPF5oBtc_LU39jv!m{ujK>1Kg~j zY5+An5IF%69>70M0l82Ogk3(h^WVM8{cH&8L}>+upMu?zsQ?`T0YvGaUh1WY#-m5uG~!JO`& zbpa6%AaJ);=fD{($ui%3#K4Z5dwCD2yxb1!!A4twfsjA5-~NTLmD__d5O}X5xdrI% zu)GinpSM<{Nd|S!-BRs_hMBLg9$>f-Azn?^0M|&0kU5Z*U2KDnGtQn33XjNU$TPF^8w?Hck@YZCC(Q_}{ zAPZsskOH1K_y6KB{*#dZ^U0wK6qu#}004owwcGX}rx1<=T!X-c?4v3;maLp6tS%r^ z?Js}QCE)%7WFbK6SC|Rf#5L_ixdjLt0AL0r-u8tm8;%8VqQC_STrF5dM?O?kfa@F( zo&oSh9-PJR_05EHDPyNus}kHbpt*du>^f)!aysEi0D%qzJ?_KHd*DC_NWh(*v$ans ze>QfpOB$SEDaRCaiINl|+X;|4M~Ja7F@2gPNYw>rgaH7Z4?q345&4vLLD62RcG@5g zI}c*N)YZQOS2P8MSRibCvL6KK7VuyKVH#iw(b&iyBBBiVbYP5KSSX*hB=Y*jToq4; zg>b7L4{l_@W^|ej4h;qDN5J3&J97@SerJpj06Ux$#0G36mTs7-Lhx7MD-XutU4na^ z?aMRAwp}(#VXptDYa85wV3oYP4;m?;P69aR1zEeQ-R$ZJFHU7Ob1VvIT(d zKV1NQcGMO=eW&?7&>cT<r%4-=t$7waxWI_o{4gaIzW>)YFAAnamOVV~*m zqb|1zur$B`c5YK!73(Gd)Cr14_s|5vvOfq{RQe9^!72;^XLQUz)Z@6FZ#{6e19Li%)&ZEd zj%Zy5wiN(b8|k3)zY_)U3QyL$LeQ9bIB@H}1$JFvfe%)Tfb*)UstT+vSjzy&15hJy zw84;EEbI7E1UMpf0t5;4FThs;|G;?z&?6wKtt-F;#{UmQi=s0fIOQx#^Zoky0jVFz z3+aF~QMK!dLU~gG{TIfy5(pr!Goa(`c+UVE7oZF#e;_=Xnj${h3}#pQCuqec{p;cf z5@}4N!sP-GrGh2zIU z@`v`NAx+&YA_|A&&GXiPf~Cop#S9t>2?+*neT~D$1?*ro3~QB~2%PO-itOB<1J5;= z==YjKnWJDpNyjvrV`k+PdwGCYOW@Yn)Wl+S)*iiWTR9B?&>=d9muP5fEuYX%lfK8e z2oK@j%OU<6+TYtNdPAKZxbg}29#D8eXK(Yz=ud3SP9m_sux(U$P%4dP58({OM zKd4=8XQE7i-O)ZMEDp|mp1B#Etxlkc059&(^_L5XFS>%B#@@fRN0;0{5o-1VAWCUo z1-v{wuusD_V7)!5b-+EIegjsBZ$7dCH(ww0znOHM|G}iY*_7k>r>2qt2u_QdwSezH z5PV4B3kg_YPYK3nKp+f81%5m`QzRFU+JNK;gsXm>vz9K3iYV1>vu)t@DHS!{y&X5TDrpGDZTIa6cv<9xoHq(*giUru_XOw4}Zd&UJcm zl86;f1N`R6Yy!yTKr}5VA&QFnkNxn4A^_ZS`8@|g!xkt-+n2h41u@9Y1p!9+O4tofh12GZT3dfW zw51rp-{1v8@|Aj1V7h_W2aL>;WQxHQAg=5TsMr(Az_`=nXtf8-1t97XbVY!C3pC1s zzQ|?oE0B7FS%K$LrBaPirzIZ8Tdl;0_eh-@E6M=7s=7MPi}+LiLtHmf79B-Q(J;33 zd*(z6BQp5`iCJq7P&Z5tlj&_INQ)VZtZalBQ2QG5n0xOy-ZjTqh ztPfaWcEvpaSuiNdpoBpq2`dWh=db0jw#|i9ZNQ`t70Lh`6t-Nk0QEh&_I86H07U|5 z=j&AyJ;;Gt9OSnE0vkgru*~oVQ|5ys%%ijJUWuvuST0^IR112f^@@ zeQp|-K5+2Cu@#(vH^3e=S;ps;{Y3PaHh^H80ow>r*aNBqSYIzCr=uWqA@&84{yLbs ztN`T|P+|d89{f|raN*VQd3^8zmP^0^A3g+7Jq{kgI=@=2To@HfcuKRf*=r`Rp5^yK z;{i8C{opZyx5>iFu;hSLMs$qjYr?zXh%O2WIo#pIzmN9Q@Am*19NZ_sJRbMt$M5^l z^xr^T1l}AB?K$ke20FkJ=Xk9z3``&3q%mP&@6i( zHv!ATrMWq&odk4g%uIAlS{$(U{T6 z#M#-x*35~)-Nw2>OV*Bb5UmSl$Pd*$w!&91Z5B-5*6tg`b&RbsLkVJZ!z7`Fvm@OC z?D&o*7J|46(OF!-GODT$ZuVwX4!iCbGx~rp_ctXXET{`@u-~L%#m8 zWT8>}^|H%-3C@n4pI@WJ4X_X!6>pwr@7r^2)I*w74`gQLt=p|Ki@SIAHFjv#q`$FU zSwh-K@&K7|S`CA_Gtm#16};nPOY06ZAWtAt-KU)br|tKHLE}Phi_L?&ZNulVm+uw3 z8zU4m&v!d1Cw%wEH(Ybue6LLg4$VSSpPTlepqpRV$Gp6iwuIjHBd z-)$Ije&*sD`Ys%Vwc(nc`F+1Yc!S$BQ#L<)_1dPYy&WebpZo+E=YNOkVEATJpS`Tn z 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 diff --git a/openair-cn/DOCS/EPC_User_Guide.pdf b/openair-cn/DOCS/EPC_User_Guide.pdf deleted file mode 100644 index 6b8a476bad9b6b1e186edd4f6651e3e2496a25a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706808 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

    t`zPP1^Dv7Tu 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%0A-00MX+$TJFR{`wfqok~xK+rsV4lhKbn2JE;kB z=<4OWWi*3HF{g*ZA7te>B|>(p1uy=n+c7WvG*BowUo@U4Q*SV|*Xr^TTNP`!;if9S z-)cW7)AxNKBk*asY)_V0tEKH0z7C+{-Hb4HJ^1Rw9}%y-X$tr%d7Fj(@pPXrReq1d ziqkCYXb<4@GJAYC925KCg4cJKBWZ8-P&r-4;*t#LtClyGp%UWdjptGM#TySsfsC;6 z&GrpK_8Zu&Npz`q&r~sErjn>-AJ}KwDP)=}k6@<2u$FTkV$~T}h%ca;Nvn%21+r?U zoYv!D27(gPc;}itI&~`2q_-m5F|@8YO%fiu2@YHW?{BEMr_^6c8*78bJ!>s!MH(*a zlU?CDxY;sbb>$<#b+Es*ji&9`_P~0w7F6=nr-Z`;A(x}<m2b>z+!1KL+e^x_<@ZJ1ln^$8a2gbOmj4 z9a8xxWIK%*0$r_papgmrcB#e<_!Mf4{#2Ek+pt}s-XUE;CkLilEaMh-OR+bgsm>n} z#U9MAD^#Y5J8lD2h{GOV6DR?`_jk+=9feQF;J+9n+wB1_!OZd^V;o#adic6ck_Pq> zsZZ}^>W+>qN!Gd}b8W@>JCcPB!ry_y-+?<6qSn8d84KP0y`x}+hgi<1I)Q|N#B7J;)8*=G<5FZLvS`$| zxPb!TZuNxw$wL}$666{)v{~&7`|(jf$1A@)5_!j#^mpyJh-Nm6YTmHr7N`JzL`*!p z@niOl0V^M|40xUnkA?PJ4-NSVqBT>D+XG@`w-<#lb3o+(7I+6Zf;4(#uz(k3a_m7TVhDKfykG z)gbN8u933#tJXEhi8}ykF-r16>go`re5618Sxg$9PNm`pdcn3v9pkAuVbOqiXvTG~ zMEr38d7Al$VmjrXB3TfVV3MNx)J-mtQ+{{}cXx3AP`e06s{t+~MDEl?? zlo~@%FBi2pCk_df+5Nq|kpdo-{2Sj9e^G}I(%X~s(Ob~a zih}vt{(Lwlc(OX|*BbNa4fhAnpX3;z^CVp91{CBv?KK`7tQXYf9L+vej9j5k(V^-_Zp20g4Hb;smikvaT4 zWxs2?r5@}rqh_8P8}<8s$?~SkMU@V>4u89`+zv@%tY|9I`aX!itM}eg=92Xw-fK7~ zbJTZz{K27}>W!9U`+ie7Y5s+lg}vBbp%PIm$5?0x;BDw%9FB=K7W3b6~G zU4IN=Uqe5V=8X_SSP!M==mhg%8an=!tC*@;cI5E+ZlwGOt!?HxzR9DKW5sKXwnqTF zENr6UV@#)W<=YPWVf3k(ru)Mk76_SOxZ}BZE?WFJdpN*76azs_!s%jGaY{)7+2MIXWgwixv*Z_)0S;S~hl`6^v2CklZ-ut>ZTE*Ohxc zeD?#&nsKh7s_#>ZZWweMXjaIv;Mnh$cscKv%}Rzzo6scP?u7$;Kd|mHgUarj$y23h z-UXVc{%NQfY5p;A@DSvPY08drQlP)`)lmygS*vxYQ3rP2_A;$dfH*m zXAEyLD~<}8>rY+DcSY}(;=jU&}K-H6QF=T^@=sT{Y1=N zb*b4%S^RvR{*5#bJwgB6^>d3hy?rjx+lxnGvah(1;0f_0v!7ub=(#y~ewj@=XR{)TXk1xOE9wkCcP57MvvQm4 z*|jiq-FhCFbv|#^mtFeytli1^U>MZUuZ`!Mn0`)xxZG2#7FnqTc`Khn-7f{@n|UZb zLC1LBZFExlx$DiZW61qydd9ak^HgFH?NP^=Rg*B3`jSL;eK1chX{#=)43Zq-_I?jdj1dg z-U2ADrdt$ELI??gAVGplf-|_g2Dib22X}V{2@oJbgAEQLxcd-nNRSZRZEz1VID^9- zl6?Pv?yFnp)vI^kt9z=>R87rv@9wo$FX^>*@7=2zqGGxGn$lU4*0wKFO&37IeXlsS z3E+1c@sKyG`I7JRo`b&|_ahaC$<*o8pvMWWd1^t=<5DNev#Ht>{ADMFzpm$Dnr~}8 z?1=^KvJ&BV7R+pkE510-7vsZ{`w&V+Ts7RB*L79If%>wVX{NDGpnst!Eq$nk=A}J$ z7byl(8L(Hsi%nygA9x{pW2@#ZkDpFz2((-nGt&A9$Ypy>*EGDo)h90RMTaQ9Jr63P z|7ujJRSspPtSqS@ykh=Bo0X3<8|DKMeD+o1@$}WhPvga5?ves^#cw_=H7Jz`-ut|+ z?dcaoDF)ZWly|&oQlh9^X@@!Foqg?9H9^6@N9!YdrxNK$-paT9aQ*zkkeAiTy_@EF9(3EYw>$;wj@2pEs%IeJS12532ZOAeiv|_pFe71uv$f zZ#7-y+1s~}Cz%|)T{2xRfZ2DYOb*1du_1ntfBf*Gv#G-2TQg~*lFq!vl2r5$&x~oS z!S5fB^QR@}8x;daW}D9a=TJa+=gWTLsWu_UMaI=(xg8$2RG7G4zWk8cfP1BB?~?+i ziO@mxZrW3R`ZuaCe94RA)~pD=<`F(dXz$vjJn=$y@VmnKr=4-!rb zm+?+^1>m8FUeRA>lwn;=eCcV#Bt%+CMAzg}(5VT5`g$R!(xRtqLIu;780k!oxqP<} zkKoRwcTDeN;mpzt!_18c<25hfz*9VP_|G+L>i{Lepr*cE01@83Hc6?0m$8_cnDj=a zck*&gCwkL!)~eXJX~QYWgd&A?H9oJa{<-Ky9wN{jYD0Br#6U;y>Y~-1uDy-Z2k#S#xCK`<%wakZ&jJQzvE^ukLc=isr=J-wEd|;FP1%$0Ke8<1Ss*_etLkv zw0oYvKRa2>#u0oAG{;Vtq`F6*v#L}~UCPx^J?v;`ZO@m^91?fpq3`S&DBj`ox?Iqp{Kj_ zrgI~OZ%ukY9`3=5OvKWWK}@V9HAPbHdpV2(<-efzi2=`Yeu9mf7@9dLyv4a8+?&)!j_#cq#rW7lfwZ}M%(Ih2e&QP1d$i6bYdZx!U%^{I9 zv934$;nH+t!~U9DDfZF3ZA`Ib$v{q4tErzQ&QR#%dS-dZl_i8GD_dTW@TXq4AGr5( z_(#DqXGeoJbH3*Zfo?1Keu=6TG8RXT*+Ut4i5VA{IH@b$#{*2m8;%Fv&**E9(Ezl`|eTD*rP#D2_MRKp-pGSS?uEb_|#;QlrfabhID z;lz;b*tUC%eK02u`3!3~p&OtT&PpSQ|AcX_$^CZuo&4)z;99)r_A08RIlaS4+KG#bvHzv${Z#36uk@H@w8w>^0&8L86<}2tu$ZWsP-vQ^$VQ_wfWH7Rf?8F;TI|x z85)SLoZ)Wv>y^;H45PjeG3SR~!cDTp)m3_?98v;I%azVCQI(rCbx9jgYR}9jwOkcV zji%ab*UynD;hF-m!(XSr`sg#%izl`#CSTa7_cX{L6BTOi688 zu3kzPXlxUB&-0{PHY{K!s>KyM#hLMUmH2;7L{Y{%C2b^ZR49C(%Io5o{LqKy_;j~3c1CogcO}>$JYJ4dfdxY^IM{}lCqq5AR|210g-K&>oVhfN zX-WT+*{C@;PZsN-g+v!;f#^ghUmoVuo#$s(TI{Gex~mZO(=x#XpquhZcM zH*Yv+P%noyYBnM+g3tw!wC2E)=;2Pizv`2oPt1@p$xWWZ+EAFLKtzRdps2 zZyk6`##E~&q~_#0?M0L5C%usA4F8(`4OMy$Zy<$^nZ7hk4FiIRsUbQXYEq!prr(Z? zm|fln>;sgAuQjkn54duLUloO0B>5??kZB^S zzGaU!4+(C)Jl&4C)g`^`bo~iuOScS8S^YBKecg6@*sxOi=~9zO2@*L=zpzzyI4I!y*r1{=Gf43tBFj zYngkDxn?#iTJpz@isN0I%h8@$HEX;4$1@lHaX|AHguQ9AMN^ifffoY{l?+0B;JI{v-0h;m1@WE{Vs3A2>qi0Y4>yC! z#E%KhK4-xjpGyRop~jG_fekiB(V!dC} z`^qxCcso@GLFT0y_Jg+%yl_hT8f_Z)Ze64!2)QJM{FsPC9^U;{A(z{bKkwfBSx*sT zz5|Y2S0T8g5SdHn>7V7452*itbq6hbDxPv(O^ConeqG;@cE*delIORx!4jbY+{;40 zt}lK}Os>;n!Zwr#1GT9knwMt=nuaiT53l6h1e23sUZ(F0!W4azoUaa>*R2P?6EfsG zHYCnY;?}f4*D{0lXEu8+z&ge%wavOb(U2jkasRf}iLKhVx}AwNc%>H^nQ%tml()FM@v61Gs)oJjd4vOUF?Qo3bKR+2se8 zowTbOv!G4dq^0_8l7Ur=d{QhhK&{Xr8hYZipshT!U~A{yD~!5C;fWR(i(a-btWVPcceca`I7MdzsDuEBcqL;;V#0p!^47prM< zLTHi7(f)9@Hl1opy-{h{pzfG{f0TK(tsBq6{5<2mdzEu)z2NfhBaEZbea5s43!}b) zhAZ;0*F^DeICoDR?4Z00{Bm+nSv{?@pj?>sTHV$<)_ZB+PH7SVYipA?JEPH<^Gz-s zp~^)QfI~l@^!4q{1jT7KGd8_UC1s)A&GA0Rhgdk}C&SxyJeDJh76vo#zQ6Smu^7UN zW_fs+JIG%+d!sX(d|na6@8RJz&FUl`r!*-zv!kFCm9DI5n|})#sGR3Z4@Bin>e{ZM z7bs}7m*wRd@})}qQe)HKyY1V*!5pm73_7S1$h253aGWI}9aj3q-Ht_}1NQ293{U!U zbGw7w-V2;2M%%x&611GP!;hoI>*VTJFjN)*PpfqmG50GApj-?c3fQV>NzK;fX9ab_Dve0nC`Uy)#HvnCdGM%jQB6$huTH#AmCU+ImQxCwh)2Jpl$KKuT(e56a$7w4mBo1P8^7m#b)NY}_NQ(*r~kNS zmwIik1!87PY@ijFT&0S~!yvPJ|L9Q?Lb(>s8XUr|@w(}ILzd>VXGME8O4bt*W@54uCX3|Gvf2xwmf#AM^xKs@Y z;WkDe5{*`^Pd1KP(^j328g|qTa(x|R zTwkL1=eFpZeLR90tv-M7r0Iq_zN_Q*bj5IrFLm~7%^FdG?*(QxJ^GiF+>I>$na6LL z=BDE|ZtyKe=A&2FFq2F3t8mE&Pj=tP**~mpes8c|>b`E*V5$?hq3Y(-dzfz-ocfBZ zRjk2dH7Rzj_f1nR)URWs4)xx_(7Zx|J}Y*YocmFWPHYk2*0(;T zt0%|Tl1y9p`-NFA*{D=ha-*t<$qK!t!7mnNr>K|mOl5xM6KRNelp+EKbY0$r&e+=3 z*m-xGw1Vwd3H#AMaQoirUuWUrDmHS2MhCFj&$gPRd*P{c-h6K$zJXD4wbqTLOL1;q z_m&P?IxzhKwk`OvmuBq7c8WTgqR6&Goh`mqmet*F)Ytcrjg9R}Fqpn6$4Y!4He z#b+nXTOk-cd58Au<-@p385B7s)#)D!-FJ%ibK1go{huP0aAY`S=m~T zwoI02CSW^`$gl{u3S#=q5I?bh>8t0#<$ho>N7BDKJJuoVs&#A(L7K`pEpm(As*%FN zZ4{Xrn(Tju`rs${*~V7d@>7kTnnA?)cM1Ov_w(Y>jT)p&FFXPR$iPd!#z133{V&^I z)hgrq(XCp({1AOpkFJ4C4Dy%7B)pfIdxkolBI;RvQmfE6BJHtebyuTcdCoYdQ1o}^kub2v|(nl#+l+yD~(a9@tu)ty@RjAE_|tJ-#MlPi9xIRH9iNeq0!SRdxf zeN`uJGmlsrROqWXp9|faua~udm*)(=$?B(_PZ?3uf9T~x)W|>BNqsqNyWi4C^F<(A+=EOXqMmc5ovIk zU+uP*D<9m=(4Qg688HioenNb1(9ZLz@MhZcEq`yC_zYs?jlh;}Yaq?!a(K{=jpd`2OpXdKC-~wJhKbmNChx*e zgHr3VYc`4U3;`maPnpLqWZkKy>E;~Z6#fg7Z>Y0>b)fH#?=L(mI#+5hNyF%Wd|0Aq zh*cy~7>a)w&09m@Lh>DHd`B`VwuP&rpm|2TLxi{rV8dij>3(PK!Zxu6bk8wqU51Rd zzCWaV=do_`=+LEuVvf&CB|d4$tGy(n=;?fnP~0T0mQm$jbU*3fa~)kGF*N|=R4c0A8jFCaN4~ac4>*dpAN_KnV_p7! z`kEXam(wPJ^iIp{OVtdt>CeZ7*A$8_>!$h-AWb?CJd0y+43$=f73C*|nrbFPzbu8m zsk}_xNA31b+`{KcX1KJ}@zw(|DPgY^b*{+JnI&SfxImCL7gtTwfGGjEz4Junx;!3| zY8iwSOGSxWn!S5~-XE91Nv!vUE{V=Fwnkc^yGA!5u~*sp7Ai1gJWDC)IgLwcwR3o6 zCLpjkmnuA)A@d-Ogo2Fup`QT3cnEjC z`nH>0WbqxVSubUXAK5@zWvd{vy!dpQL)O?R>^A8*6f%Jn?Bzr*5NItVGJ${- zqiXa=sj^DbKPR(j^(-Lt>ruC+_47?5KM-uutTqD5>t56l|u^aB3bcp|jGHa~TiB0IQC3nd8WA%Yq<0?7$%VLkHvSDB2*LY6u^t3zb~IFWoy^TCS+ZlPu0lRM81(8J*`rvMx0e%k zLBmC(xtZv6Gqay6#XeA=&KR%B=vzN4I-F(=JQrzM9WlVSNlm@2C1OorD#D&^Fh@ZdP_0qZmKS!iaG%YM`x+cd8h6}6ZS{$@m6i+o1^ zjSNXmp`o5j_Bi|7Gg}wuGzIAFz-q!;ia3i1s6P=_eLMeI6He-9&VJ3mtMh@=uIDyx z!7DE4BMqTBNg{|~vLRaO%xF~O+Q42OldP}i)#dcwXjAF6N0Y~oYY7ESEJeTL!XI6^ z>U%+Giu?jIIm?1z9wj)tOcfSw!Fk@e^}^4p^PfYM?jE{%x-~jxrqFl;E9718JHdPQ z464_V9YX6!glrXFCdCYOUs6bto6xB{XZMKTkx5(vPXYIr z#wKLqyi50=l?;V`11yPIwR`fs$kjitR!(;Xcjj-l36V5Pn(8_DfExm5PIMC2Ye0Qr*!^A(t< zJyUb*?5Fd2d`2;zAiWMe?g~NctQ&bUQ{6g>!x)>}{u95blvlOT4_~Ks)8D-bc+*#} zNjbe{ZD8-1bN8x*E+Gu~`NCdjv(Y0;L%$m!SMXZ*Iau3Pq5QNBHNWxz3?a&jPJZPG zB{i4=(>jJTJbEpNM04EN)c_gWB(_q}+uz@2@!k_K9?jCQXs7s597uk>Im&=vG5?w< zPB;1UjN|g1Ex(&Vv1b^{v-d7ysx?nCt%(bHz1f{bHgT`vGoZ8GmAy^M!rFPxfXvjE z-{nQ>aCpTKSfk#uKoO`;FzsEW=&lm_SdR7USe@mU-&B(!sV1@SMHm|;u%#@fkJ$J) z@TeWd=IqT>;~nVH!a3?4*#|1o#6vQRTT7Jkxb3jPW|IC{1J>~R8O>30pR@Eg*ZF`; z>DuY`jI4;36wh9`DQ?otPR(uca@bfh@_csROdoS%-;2bhCra6OD0d&#=85sbz_Xny z`g@Zet{4HQE-YE|PpmLCxKSgjydd8IWERvVD6dm~RU0I#YS@}T4TQhq_x{p;O;#bv zP&@-pG-!;Cjfq{oe~XKL-tl8r9SUeLs7kG`6)wXuIIsJBhvkMM8-Uul1Zf^h!D~iI zy=lGUUEL7)!9n}JeTrd~(1b1dmZkw?ajXn>5gr!fHh)> zPzhit7a&G&Rt6Pn2&37buTb1wo+Yq$~LC;5yuYay4ZLLduHA)^IO)70!S$=hgtjU0p~K`xEI5; z>?kUu0-`sbCXOG9(?S}gHVYx65N1mkMe~<(4lUX*pg#<|rgWEf+T-xkns4G{El=#| zYWQ!ud=Uz7p(;jYGR5t`5Fwm0iFt}#T4HyLZMCFG?$_r6E<0-xo;gdc2+xC58XWrr zS|Sfov#jcqY5T^+Yn!o*TJx`ttBH*7A) zF=HCndGRRE6i7CFCdxDq499^=6loPa7pxTiZ9- zh2}`c!PtLKS7i^7W({{#&~g0yEnl=*K=^hUva{#*UjEf4n-)mLN)J*LHP0pa0Q@YZ znN@b`SakBww1b1xwV8477gzAtLMDHbz!TUAfzYc<<@ndd!;g{ z)Nism?v&L^A=aNmF}YF(P;4;LQ2*q}JoLsw?(ot#hz2ws-UQUsvgj>89U+V~sBv2t zJJ{EcWQ*0&E&c4D@v-_9w=ww7 zhzxkfk4wQuxFoZIq^_iwZ&NF~=`4k3&O>M7F6v!#q{3$u98%hg_xrXYlbAC|--Mq5 z;yqGk>R(t+1%H-MaaN%A8SCl?KT#Rrqi;$yl>dYF84|5UZC;QM7qmG=Wc3l>z>W`G zewbIGb!z@md}5vp?Yet9v)XO77on$%xx=C_Ekxl>H7|!0_YinC$9nw6idNfuYQ^p3 z+tVcFXUspAryrbN8q-z_yiL%ouf=);|8C&_G3`|n#wCpax;=7zcSr&`ad77WLO%QW zIzzCvYy$YUw)mfy@E-n$I3U!q_c(m5%J4|FVhhNfU{9U6EWYN`IGAw|+>zQmmX#iRfd;|D=Mk{<=XE_e|fBrX>zff8Q%Am}MIE=}PF%EZft9sV%$ z+l*ZY0^#Mc)`eODr+h?f1#qcy)si95ymMt>KE-21Oy!1gtfl^s&N?0s<0U(HH^ z@(juDZ@uA=he0t&VKtZDRb{f{Db=h=u5Bd+-Px3(MlB7t@8A^J*pUGcZfJjrJktHz z{JxNI-Nw!Wg?=1ZWjwp3~JQHfjwJN?I#WJ~k_waduPD z^{qYC{TN+k>Fa{9X%+lx>2x}4-8u}@a-CAvTi&=MV$Ye|DwT$CZoJNC(x=4iqxK;Q zw@QIcnzY`7!L$)~pLk6+I{44a@@mLUTgvmxnj;dlf;G0?=w&<@uBi4MozI`L9pfJe zH^nvnJiY2t?0;Fb>53w0e1um}8jwX3qGF{Gk5{Ea0GV)KfgBqa0z1l8Tgb^>e<2Ysjg7NiQa(5Tjo+D(x#y|ZgP^vo0L=#Y zn&~}TD7so#G|VXRz4=IY;HL9E1iv@ zy$DpCz@P7IPej`ZpFF+~AAQ`tnuW+;Y;-X?mDN3IO?)qH^1}X!Q1n)#U&E^EMCzLw z8lUqn^NjXzm=TzOika0)le|Hy$za84tX|(9>QQxORMH3TNZ&?*F3iLHUa2r*XJq}|h+fpk+?@o0i91Y|#Jp9FbZ!=kT7m`>5SZ$FKBOj%Sp*#80@(#Dy( zCVX-`%a&PEUf1EC< z*XCJ%1Bu$q+;BOJw;N{AIg0Gg1T22NLTXo}nm}~fz9A6=AY-eCHj9NRSAS>+o+^R? z$qHGg>Yb-?x0gR8)2G>2Nz3-NQh{h8dF5mFQ8>6U^^D}5<2uP^IB~sAV{%QH2Gh^^ z&*PMS+H1*dC{Ba#rE;wLfG&DjFA?7{jp!gY=N(Q~ksp=A42ahYZ{OwF34uK74dxn#G!SH8hG*Uk8 z9OfWnrTWWm)@Ki&+dp||M2Tu-L}}??4#C>Y^e+?A{^+NNfr&$CW=$?YYI`;Ur=8KYdGk!H9_{n2WB}oK zk4J_N@8l3jd8PJCk)2~)6P7!kE1!=&%%vwXo@eV`?#_OQ7NCANza^!z%`Bwk*l+qh zyKV8UHlQeXO$mTs9$}W0tTbM9T6iy!VA(6{Jy0hi`ei5J>eK~03rOEQrb!nX^KsLB zUpWQcmepCy3ys(qB=7I8*gko-X^+Yf#P4h=URQG-wq7#u+*(a#7)*Y!>#6rJ;%)y= zVP|MDBpdN1C-+PuZS``pB`OSVp|Ar}d8%M*%Q~(N_H`X`HX`+G4$L3K?UQg(PFeZR zs8l@NFao8j|2aIIqkK7ulK)!o!FOJ&+Xsr-fnh06R|k8!yG75n8f?cOuydK2=w0Lk zfW$N{8_7a5uR`BHT36(Nvp#KJL#pi?O)(Luk$tVkPc(rC!Yk*hm!6T3PNn#<(Il_#~P{E-YQiDNY2gqtsT=@%Q@dL zF>}D6b&C^2XX-^Q(X&y#^C!{h5Nk>0}vkOte{om#qEC7U ze4EytkdU5z(H!Yw{u3|%?zT#=iw6Tm47(k%AVBgJxQ__DN2p3y=!IMZV4TOj_b$Bt z;l0nx$eXkO{Z*WfPwstF_>C#cABoSf7fGw?0dg5YqZt{L;3F@Kb^cFPi51Oj!C}bg z%W&D3xP|84x5y*wV`O{Ifr4RV!#=*O*T_z6EB{|#L{jko^s`vukIbSB{!)YUzuH^N z`|rKAl8z2;<_>PIlw5qjx3fyRI66rzev8nl8 zL7ffRivKSO>g>o(y?-!Bs&oAFAGsA<+RIHw-ObqTu8Rz^3p?-cbjx>}w2{L=R%&P< z;c&1aNk?MS&|tqSaQrRY0lG^ceRqMAlAZ6*_FWAPE=qR(f55y^F|jc>y@MoYj~x4N zI3maoE70){EhQVPx|@r;soS4{xl(fSvub!dnX{@ITbhfAV46Fa-6f~~&C0)7s$W~% zxtY7LzP3YlmohhXG&BEKE^dAvJ`vg!qa+(J1e!{h8};L`csOF~d@mjjE1@oks!s;mIR z=FLVIccZzgna=9DDp3MLLb#_#nz;l?V$G~|?0S&}&*T@jQdw8ygx)aqbeQ1;s}HYR3=ol7pDNgy$Ny<{lRo6qMiIm zf`$iyl1#!mL`C`doD+{bf%iR6$L)kcAWUjP)?}|? z4}(j#H`Yt3qlzT48`jTW6HpH(D@of#+xt#J<^rZ)Lo{j0nh0317Y^$m&lU8Vm7g*6$QP3T z)bpRFHjeLm3RT9d;5|EaHd_-7K z+csHi6Q^PH=O||=$&1g?*)sY#SzZ+h2D#wj4ByD9DzOfFsk&N%YRfC0Op4+poPND< z2?9JUijyJQDH|J>pVQ-yrO{bpqhY{)|L}QqkT|;bS8HU}C=yeck5Xi`PwUGH+Ums_ zxU0!hW5U&uY1|P)w6*qO=@)~=o*%jRDyf(C8i5wyTAK`Kn?1e zEz)2r-9GQyK2xpNi-Qm7g9XYWPY+1OA_H}-&>o%R`}-F-wW4)W`sb~ovAuW4Zuxw~ zd!^M)>fw~8MWz?b?*>&_zo!u9DU8FWdPVGjxOzn`1cR zZztMFply59nX!c^xgePew_S&s?YN{5uC# zL@PC?@7v7TI4_Xj%Y?FfeMD)h^m-8bHhB!YP@9uQlcf#c>ZRDrSEhC|fp!QKE!xz<9KxC z{dv!EDWzXf73>PU$nt|(B0LJvq_ZH>Ga`*I(z5) zm2ssQuV~4|hH%{6zw9Cp z(JEE0bdc!2pkwfYD{v($7e2s1$8*c#*1Uc;up5})mKtr3*_}=5SY&T3H^1b$mqu8s zHGbdj<^1tNO+#oSOVz$?>Gq?o#*XUD0}AJe*je=ItXiuNtkp%u;(?#Njh5RTP$(vh zn1bZJmZSC`mHiUJ&{&Fs;+0-%JoGJBXthvm|ed?wrXzF+C=H z0aE@yy*K8R;u(I(6A0o565?Um5Fpsj@Xo_#O#wJ zHzcdcyUp3B?xE6%!Jj)0+(y0lAQ*1@IHBtknx(U_wxs^cT4HjlkliI}1z(P(t9K>p z>RPLX-_JM&eOAqW$Up}#ypHYl^{AGF`JV-W`+RrUI6QN>LqRyoY4=cD0A|nftW`#V zA74qqd!N&zD1UpfrXFl@pV$;sdSJbq3y$Xi|7=VB9H&C1DiTELgIwO z%o|kv&3&%)MBJhQLqNh|V#)&E(9F18@4JHaWz(9nw5@gMtR_mqna>#r96TE-_adA| zNbc#c@E`0My4lPkvaOYmJ`n67Cv^V4wg!bn+5;)HTTZVT%9q>ey hw=Wj8u|Bs; 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

      Y_9` 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%0A6-OqlMKd!u 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%0Db%>^GQQPL*#!bMo{2_ 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�((mL@$!b2Vm3zFbdgpaZvxg&{1l!^!BAJ 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�Kr={>&JNS|tHIK|N)7H#NS~h3A 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�L9V@a9vs+#{r{aMr3}0_>b@50SJycpCnH#JA0H9xFWb}-PQJ*61PS#`m>(CxYZ7s(*#s(TTa1h$-SqQ%H1nYC`tP7FR=RIwoKPp z*BkoXtExa;b+qHY>KW(Am?D)zbt<}$2hN~NbR8jGa{F1qhk-{~T{srQkSKi+T_rrP z__#kXh5%=r;q|=P)Q2xuvu*WVk$Gv;d}r?&OX|@}oBD)iZyiSq*@k!2jA;h$JUc<} zn7DGHsKmdp{pWp-g*{?h<|K)$QXXW?IOiRhnJsm9*mtTUvv|wC9qlW;;uL4Mww;+s zcWZxh9CvV&=Y;Uj7iM==Mw>|a8h3PXb%~PIZe4edbdhhH>5PO&+Q>TJ?kED4s0u__ z_&kZMSaH1Dp_SnCR@hlQajn2+RDqk`Nu|bj_Na}ojJpcXp9R~vXjepJc%M(Y@sk&YBxfPFQ1a6)KS<1u&EmyddU8@1^{+r}73% zkzER^aR05opk)(h$43?IH3S(`RnNDv7snp_{X) z_V5kq$$HjD*V`s(H7AWEe!O5Wi9H}mo4iwX^!18K64ue{@k#2<$EbGjpA?hht@GDA zCFwM$P;EHG#mkn%znWGfQ85sm_%G& zeFJe>=t}#Ps!`jNg5FyxJGN++*DLn+{OJbyD7wJ>>;XH`trm(-^&SmXF*UIP(jJ!c zQSBmIt+II!TlaA4X@}dc7KM7npT>|BGEgs(yxn^nxNSuuxd^WAoL$~Ez}kU}@KXz)^0`r}BMpg*)8$WPrP zNsZz!MZZ-R7*VtjZ*-T7Yt8x1kp16kA zw2eRrt9OoK5&u4+jQnc1>NC^BYcEgx)?63bc9+fD|486LH?*ccY~^`d1(%i_~*`E&XmV3+o=98Gq~ZX&pXgV`NMYbzdeRFDw)Ww<>&3fU>tukhVn z_p4pF!tvawCXYOIF}VveYZ)pgf-ZSkirR-C35?*@iDfZFR;ltr@w;=x1uHfml}OV3 zMNGu9%vmOms@|d8T%Rk~tdXnKe8N+qne2&5LWNtepTFQ~v!>{t%ht*&#fd$+q)|jk zv8U-X4;6RC7sDmhHU9D*7d^|P?++>MdEGfhdiKQIzgj;#v-8p}Q>Dq?gke2KSZh%< z50<9SSa(M#NWCWcrTyD`HJ#JleuaK6&W`|XBW?lV zSsWS&r4I*Fpimgd0HF``TaXB}9taMFK_O5y1a1h1AutF-4BPVpE+#HHZ?tx#a70T^cF3`Jw01{fqt7YfHfp;*XQoS$=Ekbwtm!=)`R1A$&D zV+rS1GCrAlc`09&Z zCqZ^}GKa(oS*Vs+K6sy*K0^0zmKSLAKQ_T%7dUv?5(i_PSb-c0ZJ~vv)2KKChTlR$ z4S>}zP`CloV4=u=;aXyJK%-y`p5@ObF+*^cE{>LX2ja&>pF;mp&kx!Ij}hPr23dTB zed$0Syyf5j{jA2nFMCnq_e>U{_!izzt0)O;B#@6{EwH9Iy(pLvCvANs9s*SEGWy`HF&FIPhW8E6ffT ztK`E0*>!Aj=HZz=)}tt;^j~{5oY}B4j;K#>pb|J;N=P?usIqVLNRxVEgKw8J z&+)b%%ivAlQ!2Lr6aT&u+KdrfgOIeR?#+%KO@#YiC5k z;u{ZYiwe|<1*AHsc*=!G)vO~M9}r=Xete=P6191|c7)9d!AI9pZL|fuesXg=Q0-w5 zZ84TLX?9buj{r`Hla5gfns~q)RS=Mbmv>1NG9XF@~5Qn%|K?)PjLs?xQ5cj9KY&xW0&?!PuCJ3O}v z*qI*ibi97g - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/openair-cn/GTPV1-U/GTPU_SP/INSTALL b/openair-cn/GTPV1-U/GTPU_SP/INSTALL deleted file mode 100755 index 0de93a937c..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/INSTALL +++ /dev/null @@ -1,33 +0,0 @@ -How to build ------------- - -1. Extract the files in a location of your choice. The - Files will be extracted in a directory called gtpu. - -2. cd /gtpu. - -3. make - -If make is successful, the binary files (libxt_GTPU.so and xt_GTPU.ko) -will be created in the Bin folder. - - -How to install --------------- -There is no "make install" as that will be difficult to support all -possible Linux distro. The cmd.sh file demonstrates how to install -the two binary files in the system. - - -In case of problem: - - check you got the last release of the library (see README), - - contact the mailing list (see README), - - check the bugtracker for known bugs (see README). - - -Documentation -------------- -Please have a look at the "Architecture" section in the README. - - - diff --git a/openair-cn/GTPV1-U/GTPU_SP/Makefile b/openair-cn/GTPV1-U/GTPU_SP/Makefile deleted file mode 100755 index f8b59266e1..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/Makefile +++ /dev/null @@ -1,104 +0,0 @@ -#################################################################################### -# Makefile for iptables extension for the GTPUSP target and GTPUSP klm -# -# Copyright (c) 2010-2011 Polaris Networks -# Author: Pradip Biswas -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -#################################################################################### - -export BIN_DIR ?= $(shell pwd)/Bin -KVERSION = $(shell uname -r) -KVERSION_LAST_DIGIT = $(shell echo ${KVERSION} | cut -d "." -f 3 | cut -d "-" -f 1) - -obj-m = xt_GTPUSP.o -EXTRA_CFLAGS += -DKVERSION=$(KVERSION_LAST_DIGIT) - -all: xtlib - echo "Building for Kernel Version: $(KVERSION_LAST_DIGIT)" - make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules - chmod 777 xt_GTPUSP.ko - mv xt_GTPUSP.ko $(BIN_DIR)/ - -clean: libclean - make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean - -################################################################################ -# The next section is used by libxt_GTPUSP -################################################################################ - -XT_IPTABLES_VERSION = $(shell /sbin/iptables -V | cut -d " " -f 2 | cut -b 2-) -IPT_FIRST_NUM = $(shell echo ${XT_IPTABLES_VERSION} | cut -d "." -f 1 | cut -d "-" -f 1) -IPT_SECOND_NUM = $(shell echo ${XT_IPTABLES_VERSION} | cut -d "." -f 2 | cut -d "-" -f 1) -IPT_THIRD_NUM = $(shell echo ${XT_IPTABLES_VERSION} | cut -d "." -f 3 | cut -d "-" -f 1) -IPTVERSION = $(IPT_FIRST_NUM)$(IPT_SECOND_NUM)$(IPT_THIRD_NUM) -IPTABLES_VERSION_STRING = \"$(IPT_FIRST_NUM).$(IPT_SECOND_NUM).$(IPT_THIRD_NUM)\" - -LIB_CC := gcc - -ifeq ($(IPTVERSION), 135) - LIB_LD := ld -else - LIB_LD := gcc -endif - -LIB_CFLAGS := -fPIC -Wall -MMD -D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 \ - -D_REENTRANT -pipe -DXTABLES_LIBDIR=\"/usr/local/libexec/xtables\" -DXTABLES_INTERNAL \ - -D_INIT=libxt_GTPUSP_init -DPIC -fPIC -O2 \ - -DIPTVERSION=$(IPTVERSION) \ - -DIPTABLES_VERSION_STRING=$(IPTABLES_VERSION_STRING) - -XT_TARGET := xt_GTPUSP -XT_LIBNAME := lib$(XT_TARGET).so -XT_BUILD_DIR = $(BIN_DIR)/$(XT_TARGET) - -# Get the system distribution type -IsDebian=$(shell /bin/cat /proc/version | grep -i -e ubuntu -e debian) -IsRedHat=$(shell /bin/cat /proc/version | grep -i -e centos -e "red hat" -e suse -e fedora) - -# Change the ipq library name for 64-bit Debian-based distributions -ifeq ($(X86_64),x86_64) - ifneq ($(strip $(IsDebian)),) - LIB_IPQ=_pic - endif -endif - -INCLUDE_DIR = -I. \ - -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include \ - -I/usr/lib64/glib-2.0/include - -XT_SOURCES = libxt_GTPUSP.c - -XT_OBJECTS := $(addprefix $(XT_BUILD_DIR)/, $(notdir $(XT_SOURCES:.c=.o))) - -xtlib: XT - -XT: DF = $(XT_BUILD_DIR)/$(*F) -XT: $(XT_BUILD_DIR) $(BIN_DIR)/$(XT_LIBNAME) - --include $(addprefix $(XT_BUILD_DIR)/, $(notdir $(XT_SOURCES:.c=.P))) - -$(XT_BUILD_DIR): - @echo Build Directory is $@ - @if [ ! -d $(BIN_DIR) ]; then mkdir $(BIN_DIR); fi - @if [ ! -d $@ ]; then mkdir $@; fi - -$(BIN_DIR)/$(XT_LIBNAME): $(XT_OBJECTS) - @echo Linking $@ - @$(LIB_LD) -shared $(XT_OBJECTS) -o $@ - -$(XT_BUILD_DIR)/%.o : %.c - @echo "Building GTPUSP ext for version $(IPTVERSION) $(IPTABLES_VERSION_STRING)" - @echo Compiling $< - @$(LIB_CC) $(LIB_CFLAGS) -MF $(DF).d $(INCLUDE_DIR) -o $@ -c $< - @cp $(DF).d $(DF).P; \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(DF).d >> $(DF).P; \ - rm -f $(DF).d - -libclean: - @rm -rf $(BIN_DIR)/$(XT_LIBNAME) $(XT_BUILD_DIR) - diff --git a/openair-cn/GTPV1-U/GTPU_SP/README b/openair-cn/GTPV1-U/GTPU_SP/README deleted file mode 100755 index f29b8421c3..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/README +++ /dev/null @@ -1,80 +0,0 @@ -Introduction ------------- -This piece of software implementes GPRS Tunneling Protocol (GTP) for user plane. -The software has two components - one is the extension of iptables that -run in user-space. The other is the counterpart of the iptables extension -that runs in kernel space. - - -License -------- -The project is licensed under GPL2+, see the COPYING and AUTHORS files for more -details. - - -Architecture ------------- -The GTPu tunneling is handled in two parts. The first part is the user-space -iptables target extension library (let's call it libxt). The second -part is the GTPu kernel loadable module (let's call it gtpu). The way it -is, once the user configures a GTPu tunnel attributes using iptables, the klm -is loaded by the kernel automatically and handles the IP packets according to -the GTPu tunnel attributes set by the user. - -The user can set the action to be taken on a matching IP packet. The action can be -either of "add", "remove" or "transport" . - -A GTPu tunnel has the following attributes: - - own IP address - - own GTPu tunnel id - - peer's IP address - - peer's GTPu tunnel id - -The GTPU target is designed to work only on mangle table. Also, the user is -expected to add GTPU target to the PREROUTING chain, as the GTPU target will -modify the original IP packet before it is routed. - -Once the user creates the rule in iptables, the matching IP packets go through -the gtpu klm, which acts upon the IP packet according to the action set by the -user. The action "Add" means the klm will add a GTPu header to the IP packet. -"Remove" will remove the GTPu header from the IP packet and "Transport" will -do a Remove first followed by an "Add" on the IP packet. - -For example, consider the following command: - -iptables -t mangle -A PREROUTING -d 10.10.10.1 -j GTPU --own-ip 192.168.0.98 --own-tun 100 --peer-ip 192.168.0.109 --peer-tun 101 --action add - -This command will configure the system to add a GTPu header to any IP packet destined to 10.10.10.1. -The source IP address outer IP will be 192.168.0.109, the dest IP will be 192.168.0.98 and -the destination GTP tunnel id will be 101. - -Similarly, consider the following command: - -iptables -t mangle -A PREROUTING -s 192.168.0.109 -d 192.168.0.98 -p udp --dport 2152 -j GTPU --action remove - -This command will process all the GTPu packets coming from 192.168.0.109 to 192.168.0.98 to -strip the GTPu header and forward the inner IP packet to the kernel's routing engine. - - -Files ---------- -There are two source C files and one header file: - - libxt_GTPU.c : source file for iptables GTPU extension library (libxt) - - xt_GTPU.c : source file for gtpu kernel loadable module (klm) - - xt_GTPU.h : common header file, shared between the libxt and the klm - - Makefile : Makefile to build both the libxt and the klm - - cmd.sh : sample cmd file to show how the binaries can be used - -See the INSTALL file to learn how to build the binaries. - - -References ----------- -3GPP TS 29.281 General Packet Radio System (GPRS) - Tunnelling Protocol User Plane (GTP-u) - - -Authors -------- -Pradip Biswas - diff --git a/openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES b/openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES deleted file mode 100755 index 022846fcd5..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES +++ /dev/null @@ -1,6 +0,0 @@ - -Known issues in GTPU v1.0 -------------------------- - -1. Does not implement the "Transport" action. - diff --git a/openair-cn/GTPV1-U/GTPU_SP/cmd.sh b/openair-cn/GTPV1-U/GTPU_SP/cmd.sh deleted file mode 100755 index 428b5b155a..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/cmd.sh +++ /dev/null @@ -1,18 +0,0 @@ -# Clear the iptables mangle table -iptables -t mangle -F - -# Remove GTPU KLM -rmmod xt_GTPUSP - -# Insert the GTPUSP KLM -insmod ./Bin/xt_GTPUSP.ko - -# Copy the userland iptables extenstion library -if [ -d /lib/xtables ]; then - /bin/cp -f ./Bin/libxt_GTPUSP.so /lib/xtables/ -fi - -if [ -d /lib/iptables ]; then - /bin/cp -f ./Bin/libxt_GTPUSP.so /lib/iptables/libipt_GTPUSP.so -fi - diff --git a/openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c b/openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c deleted file mode 100755 index 0b749a8759..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c +++ /dev/null @@ -1,322 +0,0 @@ -/* Shared library add-on to iptables for the GTPUSP target - * - * Copyright (c) 2010-2011 Polaris Networks - * Author: Pradip Biswas - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "xt_GTPUSP.h" - -#if (IPTVERSION <= 135) -#include -#elif (IPTVERSION > 135) -#include -#endif - -#if (IPTVERSION <= 135) -#define GTPUSP_PARAM_BAD_VALUE 0 -#define GTPUSP_PARAM_ONLY_ONCE 1 -#define XT_GTPUSP_VERSION IPTABLES_VERSION_STRING -#define gtpusp_strtoui(s,v,m,M) !string_to_number(s,m,M,v) -#define gtpusp_exit_error exit_error -#elif (IPTVERSION > 135) && (IPTVERSION <= 141) -#define GTPUSP_PARAM_BAD_VALUE P_BAD_VALUE -#define GTPUSP_PARAM_ONLY_ONCE P_ONLY_ONCE -#define XT_GTPUSP_VERSION XTABLES_VERSION -#define gtpusp_param_act param_act -#define gtpusp_strtoui(s,v,m,M) !string_to_number(s,m,M,v) -#define gtpusp_exit_error exit_error -#elif (IPTVERSION > 141) -#define GTPUSP_PARAM_BAD_VALUE XTF_BAD_VALUE -#define GTPUSP_PARAM_ONLY_ONCE XTF_ONLY_ONCE -#define XT_GTPUSP_VERSION XTABLES_VERSION -#define gtpusp_param_act xtables_param_act -#define gtpusp_strtoui(s,v,m,M) xtables_strtoui(s,NULL,v,m,M) -#define gtpusp_exit_error xtables_error -#endif - -enum { - PARAM_LADDR = 1 << 0, - PARAM_LTUN = 1 << 1, - PARAM_RADDR = 1 << 2, - PARAM_RTUN = 1 << 3, - PARAM_ACTION = 1 << 4, -}; - -static void GTPUSP_help(void) -{ - printf( - "GTPUSP target options\n" - " --action value Set action \n" - " --own-ip value Set own IP address\n" - " --own-tun value Set own tunnel id \n" - " --peer-ip value Set peer IP address\n" - " --peer-tun value Set peer tunnel id \n"); -} - -#if (IPTVERSION <= 135) -/* Stolen from iptables v1.4.7 code */ -void gtpusp_param_act(unsigned int status, const char *p1, ...) -{ - const char *p2, *p3; - va_list args; - int b; - - va_start(args, p1); - - switch (status) { - case GTPUSP_PARAM_ONLY_ONCE: - p2 = va_arg(args, const char *); - b = va_arg(args, unsigned int); - - if (!b) - return; - - exit_error(PARAMETER_PROBLEM, - "%s: \"%s\" option may only be specified once", - p1, p2); - break; - - case GTPUSP_PARAM_BAD_VALUE: - p2 = va_arg(args, const char *); - p3 = va_arg(args, const char *); - exit_error(PARAMETER_PROBLEM, - "%s: Bad value for \"%s\" option: \"%s\"", - p1, p2, p3); - break; - - default: - exit_error(status, "%s", "Unknown error"); - break; - } - - va_end(args); -} - -#endif - -static void parse_gtpusp_addr(const char *s, struct xt_gtpusp_target_info *info, int flag) -{ - in_addr_t addr; - - if ((addr = inet_addr(s)) == -1) { - switch (flag) { - case PARAM_LADDR: - gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--own-ip", s); - break; - - case PARAM_RADDR: - gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--peer-ip", s); - break; - } - } - - switch (flag) { - case PARAM_LADDR: - info->laddr = addr; - break; - - case PARAM_RADDR: - info->raddr = addr; - break; - } -} - -static void parse_gtpusp_tunid(char *s, struct xt_gtpusp_target_info *info, int flag) -{ - unsigned int value; - - if (!gtpusp_strtoui(s, &value, 0, UINT32_MAX)) { - switch (flag) { - case PARAM_LTUN: - gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--own-tun", s); - break; - - case PARAM_RTUN: - gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--peer-tun", s); - break; - } - } - - switch (flag) { - case PARAM_LTUN: - info->ltun = value; - break; - - case PARAM_RTUN: - info->rtun = value; - break; - } -} - -static void parse_gtpusp_action(char *s, struct xt_gtpusp_target_info *info, unsigned int *flags) -{ - if (!strcmp(s, "add")) { - info->action = PARAM_GTPUSP_ACTION_ADD; - *flags |= PARAM_GTPUSP_ACTION_ADD; - } else { - gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--action", s); - } -} - -#if (IPTVERSION <= 135) -static int -GTPUSP_parse(int c, char **argv, int invert, unsigned int *flags, - const struct ipt_entry *entry, - struct ipt_entry_target **target) -#else -static int -GTPUSP_parse(int c, char **argv, int invert, unsigned int *flags, - const void *entry, struct xt_entry_target **target) -#endif -{ - struct xt_gtpusp_target_info *info = (struct xt_gtpusp_target_info *) (*target)->data; - - switch (c) { - case '1': - gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--own-ip", *flags & PARAM_LADDR); - parse_gtpusp_addr(optarg, info, PARAM_LADDR); - *flags |= PARAM_LADDR; - return 1; - - case '2': - gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--own-tun", *flags & PARAM_LTUN); - parse_gtpusp_tunid(optarg, info, PARAM_LTUN); - *flags |= PARAM_LTUN; - return 1; - - case '3': - gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--peer-ip", *flags & PARAM_RADDR); - parse_gtpusp_addr(optarg, info, PARAM_RADDR); - *flags |= PARAM_RADDR; - return 1; - - case '4': - gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--peer-tun", *flags & PARAM_RTUN); - parse_gtpusp_tunid(optarg, info, PARAM_RTUN); - *flags |= PARAM_RTUN; - return 1; - - case '5': - gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--action", *flags & PARAM_ACTION); - parse_gtpusp_action(optarg, info, flags); - *flags |= PARAM_ACTION; - return 1; - } - - return 1; -} - -static void GTPUSP_check(unsigned int flags) -{ - if (!(flags & PARAM_ACTION)) { - gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify action"); - } - - if (!(flags & PARAM_LADDR)) { - gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify local addr"); - } - - if (!(flags & PARAM_LTUN)) { - gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify local tunnel id"); - } - - if (!(flags & PARAM_RADDR)) { - gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify remote addr"); - } - - if (!(flags & PARAM_RTUN)) { - gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify remote tunnel id"); - } -} - -static void convert_action_to_string(int action, char *actionstr) -{ - switch(action) { - case PARAM_GTPUSP_ACTION_ADD: - sprintf (actionstr, "add"); - break; - - default : - sprintf (actionstr, "unspecified!!!"); - break; - } -} - -#if (IPTVERSION <= 135) -static void -GTPUSP_print(const struct ipt_ip *ip, - const struct ipt_entry_target *target, - int numeric) - -#else -static void -GTPUSP_print(const void *ip, - const struct xt_entry_target *target, - int numeric) -#endif -{ - const struct xt_gtpusp_target_info *info = - (struct xt_gtpusp_target_info *) target->data; - - char laddr[64], raddr[64], actionstr[32]; - - convert_action_to_string(info->action, actionstr); - - sprintf (laddr, "%s", inet_ntoa(*(struct in_addr*)&info->laddr)); - sprintf (raddr, "%s", inet_ntoa(*(struct in_addr*)&info->raddr)); - printf("GTPUSP self: %s tunnel: 0x%x / peer: %s tunnel: 0x%x / action: %s", - laddr, info->ltun, raddr, info->rtun, actionstr); -} - -static struct option GTPUSP_opts[] = { - { "own-ip", 1, NULL, '1' }, - { "own-tun", 1, NULL, '2' }, - { "peer-ip", 1, NULL, '3' }, - { "peer-tun", 1, NULL, '4' }, - { "action", 1, NULL, '5' }, - { .name = NULL } -}; - -#if (IPTVERSION <= 135) -static struct iptables_target gtpusp_tg_reg = { -#else -static struct xtables_target gtpusp_tg_reg = { -#endif - .name = "GTPUSP", - .version = XT_GTPUSP_VERSION, -#if (IPTVERSION > 135) - .family = NFPROTO_IPV4, -#endif - .size = XT_ALIGN(sizeof(struct xt_gtpusp_target_info)), - .userspacesize = XT_ALIGN(sizeof(struct xt_gtpusp_target_info)), - .help = GTPUSP_help, - .parse = GTPUSP_parse, - .final_check = GTPUSP_check, - .print = GTPUSP_print, - .extra_opts = GTPUSP_opts, -}; - -void _init(void) -{ -#if (IPTVERSION <= 135) - register_target(>pusp_tg_reg); -#else - xtables_register_target(>pusp_tg_reg); -#endif -} - diff --git a/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c deleted file mode 100755 index 24f210e371..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c +++ /dev/null @@ -1,780 +0,0 @@ -/* - * GTPu klm for Linux/iptables - * - * Copyright (c) 2010-2011 Polaris Networks - * Author: Pradip Biswas - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// CONNMARK -#include -#include -#include -#include -#if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) -# define WITH_IPV6 1 -#endif -#include "xt_GTPUSP.h" -#if !(defined KVERSION) -# error "Kernel version is not defined!!!! Exiting." -#endif - -#define GTPU_TRACE_IN_KERN_LOG 0 - -#if defined(GTPU_TRACE_IN_KERN_LOG) -#define PR_INFO(fORMAT, aRGS...) pr_info(fORMAT, ##aRGS) -#else -#define PR_INFO(fORMAT, aRGS...) -#endif -#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444) -#define STRING_MODULE_PARM(s, v) static char* s = v; module_param(s, charp, 0000); -//----------------------------------------------------------------------------- -static char* _gtpusp_nf_inet_hook_2_string(int nf_inet_hookP); -static void _gtpusp_print_hex_octets(unsigned char* data_pP, unsigned short sizeP); -static void _gtpusp_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); -#ifdef WITH_IPV6 -static void _gtpusp_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); -static unsigned int _gtpusp_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); -#endif -static unsigned int _gtpusp_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); -static int __init gtpusp_tg_init(void); -static void __exit gtpusp_tg_exit(void); -static int _udp_thread(void *data); -static int _gtpusp_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP); -static int _gtpusp_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP); -static int _gtpusp_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP); -//----------------------------------------------------------------------------- -#define MODULE_NAME "GTPUSP" -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Pradip Biswas "); -MODULE_DESCRIPTION("GTPu Data Path extension on netfilter"); -//----------------------------------------------------------------------------- -static struct xt_target gtpusp_tg_reg[] __read_mostly = { - { - .name = MODULE_NAME, - .revision = 0, - .family = NFPROTO_IPV4, - .hooks = (1 << NF_INET_POST_ROUTING) | - (1 << NF_INET_LOCAL_IN) | - (1 << NF_INET_FORWARD), - .table = "mangle", - .target = _gtpusp_tg4, - .targetsize = sizeof(struct xt_gtpusp_target_info), - .me = THIS_MODULE, - }, -#ifdef WITH_IPV6 - { - .name = MODULE_NAME, - .revision = 0, - .family = NFPROTO_IPV6, - .hooks = (1 << NF_INET_POST_ROUTING) | - (1 << NF_INET_LOCAL_IN) | - (1 << NF_INET_FORWARD), - .table = "mangle", - .target = _gtpusp_tg6, - .targetsize = sizeof(struct xt_gtpusp_target_info), - .me = THIS_MODULE, - }, -#endif -}; -#define GTP_ECHO_REQ 1 -#define GTP_ECHO_RSP 2 -#define GTP_ERROR_INDICATION 26 -#define GTP_GPDU 255 - -typedef struct gtpv1u_msg_s { - unsigned char version; - unsigned char protocol_type; - unsigned char ext_hdr_flag; - unsigned char seq_num_flag; - u_int16_t npdu_num_flag; - u_int32_t msg_type; - u_int16_t msg_len; - u_int32_t teid; - u_int16_t seq_num; - unsigned char npdu_num; - unsigned char next_ext_hdr_type; - u_int32_t msg_buf_len; - u_int32_t msg_buf_offset; - struct gtpv1u_msg_s* next; -} gtpv1u_msg_t; - -struct gtpuhdr { - char flags; - char msgtype; - u_int16_t length; - u_int32_t tunid; -}; -typedef struct gtpusp_sock_s { - struct task_struct *thread; - struct sockaddr_in addr; - struct socket *sock; - struct sockaddr_in addr_send; - int running; - int thread_stop_requested; -} gtpusp_sock_t; - -//----------------------------------------------------------------------------- -#define GTPU_HDR_PNBIT 1 -#define GTPU_HDR_SBIT 1 << 1 -#define GTPU_HDR_EBIT 1 << 2 -#define GTPU_ANY_EXT_HDR_BIT (GTPU_HDR_PNBIT | GTPU_HDR_SBIT | GTPU_HDR_EBIT) - -#define GTPU_FAILURE 1 -#define GTPU_SUCCESS !GTPU_FAILURE -#define GTPUSP_2_PRINT_BUFFER_LEN 8192 - -#define IP_MORE_FRAGMENTS 0x2000 -#define NIPADDR(addr) \ - (uint8_t)(addr & 0x000000FF), \ - (uint8_t)((addr & 0x0000FF00) >> 8), \ - (uint8_t)((addr & 0x00FF0000) >> 16), \ - (uint8_t)((addr & 0xFF000000) >> 24) -//----------------------------------------------------------------------------- -static char _gtpusp_print_buffer[GTPUSP_2_PRINT_BUFFER_LEN]; -gtpusp_sock_t _gtpusp_sock; - -INT_MODULE_PARM(gtpu_sgw_port, 2152); -MODULE_PARM_DESC(gtpu_sgw_port, "UDP port number for S1U interface (s-GW side)"); -INT_MODULE_PARM(gtpu_enb_port, 2153); -MODULE_PARM_DESC(gtpu_enb_port, "UDP port number for S1U interface (eNB side)"); -STRING_MODULE_PARM(sgw_addr, "127.0.0.1"); -MODULE_PARM_DESC(sgw_addr, "IPv4 address of the S1U IP interface"); - - - -//----------------------------------------------------------------------------- -static char* -_gtpusp_icmph_type_2_string(uint8_t typeP) -//----------------------------------------------------------------------------- -{ - switch (typeP) { - case ICMP_ECHOREPLY:return "ECHOREPLY";break; - case ICMP_DEST_UNREACH:return "DEST_UNREACH";break; - case ICMP_SOURCE_QUENCH:return "SOURCE_QUENCH";break; - case ICMP_REDIRECT:return "REDIRECT";break; - case ICMP_ECHO:return "ECHO";break; - case ICMP_TIME_EXCEEDED:return "TIME_EXCEEDED";break; - case ICMP_PARAMETERPROB:return "PARAMETERPROB";break; - case ICMP_TIMESTAMP:return "TIMESTAMP";break; - case ICMP_TIMESTAMPREPLY:return "TIMESTAMPREPLY";break; - case ICMP_INFO_REQUEST:return "INFO_REQUEST";break; - case ICMP_INFO_REPLY:return "INFO_REPLY";break; - case ICMP_ADDRESS:return "ADDRESS";break; - case ICMP_ADDRESSREPLY:return "ADDRESSREPLY";break; - default:return "TYPE?"; - } -} -//----------------------------------------------------------------------------- -static char* -_gtpusp_nf_inet_hook_2_string(int nf_inet_hookP) -{ - //----------------------------------------------------------------------------- - switch (nf_inet_hookP) { - case NF_INET_PRE_ROUTING: - return "NF_INET_PRE_ROUTING"; - break; - - case NF_INET_LOCAL_IN: - return "NF_INET_LOCAL_IN"; - break; - - case NF_INET_FORWARD: - return "NF_INET_FORWARD"; - break; - - case NF_INET_LOCAL_OUT: - return "NF_INET_LOCAL_OUT"; - break; - - case NF_INET_POST_ROUTING: - return "NF_INET_POST_ROUTING"; - break; - - default: - return "NF_INET_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -void -_gtpusp_print_hex_octets(unsigned char* data_pP, unsigned short sizeP) -{ - //----------------------------------------------------------------------------- - - unsigned long octet_index = 0; - unsigned long buffer_marker = 0; - unsigned char aindex; - struct timeval tv; - char timeofday[64]; - unsigned int h,m,s; - - if (data_pP == NULL) { - return; - } - - if (sizeP > 2000) { - return; - } - - do_gettimeofday(&tv); - h = (tv.tv_sec/3600) % 24; - m = (tv.tv_sec / 60) % 60; - s = tv.tv_sec % 60; - snprintf(timeofday, 64, "%02d:%02d:%02d.%06ld", h,m,s,tv.tv_usec); - - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n",timeofday); - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); - pr_info("%s",_gtpusp_print_buffer); - buffer_marker = 0; - - for (octet_index = 0; octet_index < sizeP; octet_index++) { - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - pr_info("%s",_gtpusp_print_buffer); - buffer_marker = 0; - } - - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, "%s %04ld |",timeofday, octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " %02x", data_pP[octet_index]); - /* - * Align newline and pipes according to the octets in groups of 2 - */ - } - - /* - * Append enough spaces and put final pipe - */ - for (aindex = octet_index; aindex < 16; ++aindex) - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " "); - - //SGI_IF_DEBUG(" "); - buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - pr_info("%s",_gtpusp_print_buffer); -} - -// for uplink GTPU traffic on S-GW -//----------------------------------------------------------------------------- -static int _udp_thread(void *data) -//----------------------------------------------------------------------------- -{ - int size, tx_size; - int bufsize = 8192; -#if defined(FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT) - int success_read = 0; - int failed_read = 0; -#endif - unsigned char buf[bufsize+1]; - unsigned char gtp_resp[1024]; - - /* kernel thread initialization */ - _gtpusp_sock.running = 1; - - PR_INFO(MODULE_NAME": listening on port %d\n", gtpu_sgw_port); - - /* main loop */ - while(_gtpusp_sock.thread_stop_requested == 0){ - if (kthread_should_stop()) { - _gtpusp_sock.running = 0; - PR_INFO(MODULE_NAME": kthread_stop initiated exit at %lu \n", jiffies); - return -1; //Exit from the thread. Return value will be passed to kthread_stop() - } - size = _gtpusp_ksocket_receive(_gtpusp_sock.sock, &_gtpusp_sock.addr, buf, bufsize); - - if (size <= 0) { - if (size != -EAGAIN) { - pr_info(MODULE_NAME": error getting datagram, sock_recvmsg error = %d\n", size); - } -#if defined(FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT) - success_read = 0; - failed_read += 1; - if (failed_read > 10) failed_read = 10; - usleep_range(failed_read*20,failed_read*200); -#endif - } else { -#if defined(FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT) - success_read += 1; - failed_read = 0; -#endif - PR_INFO(MODULE_NAME": received %d bytes\n", size); - - if ((tx_size = _gtpusp_ksocket_process_gtp(buf, size, gtp_resp)) > 0) { - //ksocket_send(_gtpusp_sock.sock, &_gtpusp_sock.addr_send, buf, gtp_resp, tx_size, NULL, 0)); - } - } - } - _gtpusp_sock.running = 0; - if (kthread_should_stop()) { - PR_INFO(MODULE_NAME": kthread_stop initiated exit at %lu \n", jiffies); - return -1; //Exit from the thread. Return value will be passed to kthread_stop() - } - PR_INFO(MODULE_NAME": kthread do_exit()\n"); - do_exit(0); -} - -//----------------------------------------------------------------------------- -static int _gtpusp_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP) -//----------------------------------------------------------------------------- -{ - gtpv1u_msg_t gtpv1u_msg; - uint8_t msg_type; - struct iphdr *iph_p = NULL; - struct iphdr *new_iph_p= NULL; - struct sk_buff *skb_p = NULL; - const unsigned char * rx_buf_p = rx_buf_pP; - int err = 0; - struct rtable *rt = NULL; - struct flowi fl = { - .u = { - .ip4 = { - .daddr = 0, - .flowi4_tos = 0, - .flowi4_scope = RT_SCOPE_UNIVERSE, - } - } - }; - - msg_type = rx_buf_pP[1]; - - switch(msg_type) { - case GTP_ECHO_REQ: - PR_INFO(MODULE_NAME": TODO GTP ECHO_REQ, SEND TO GTPV1U TASK USER SPACE\n"); - //TODO; - return 0; - break; - - case GTP_ERROR_INDICATION: - PR_INFO(MODULE_NAME":TODO GTP ERROR INDICATION, SEND TO GTPV1U TASK USER SPACE\n"); - //TODO; - return 0; - break; - - case GTP_ECHO_RSP: - PR_INFO(MODULE_NAME":GTP ECHO_RSP, SEND TO GTPV1U TASK USER SPACE\n"); - return 0; - break; - - case GTP_GPDU: { - gtpv1u_msg.version = ((*rx_buf_p) & 0xE0) >> 5; - gtpv1u_msg.protocol_type = ((*rx_buf_p) & 0x10) >> 4; - gtpv1u_msg.ext_hdr_flag = ((*rx_buf_p) & 0x04) >> 2; - gtpv1u_msg.seq_num_flag = ((*rx_buf_p) & 0x02) >> 1; - gtpv1u_msg.npdu_num_flag = ((*rx_buf_p) & 0x01); - rx_buf_p++; - - gtpv1u_msg.msg_type = *(rx_buf_p); - rx_buf_p++; - - rx_buf_p += 2; - - gtpv1u_msg.teid = ntohl(*((u_int32_t *)rx_buf_p)); - rx_buf_p += 4; - - if(gtpv1u_msg.ext_hdr_flag || gtpv1u_msg.seq_num_flag || gtpv1u_msg.npdu_num_flag) { - gtpv1u_msg.seq_num = ntohs(*(((u_int16_t *)rx_buf_p))); - rx_buf_p += 2; - gtpv1u_msg.npdu_num = *(rx_buf_p++); - gtpv1u_msg.next_ext_hdr_type = *(rx_buf_p++); - } - - gtpv1u_msg.msg_buf_offset = (u_int32_t)(rx_buf_p - rx_buf_pP); - gtpv1u_msg.msg_buf_len = lenP - gtpv1u_msg.msg_buf_offset; - gtpv1u_msg.msg_len = lenP; - - iph_p = (struct iphdr*)(&rx_buf_pP[gtpv1u_msg.msg_buf_offset]); - - fl.u.ip4.daddr = iph_p->daddr; - fl.u.ip4.flowi4_tos = RT_TOS(iph_p->tos); - - rt = ip_route_output_key(&init_net, &fl.u.ip4); - - if (rt == NULL) { - PR_INFO("GTPURH: Failed to route packet to dst 0x%x. Error: (%d)\n", fl.u.ip4.daddr, err); - return NF_DROP; - } - - if (rt->dst.dev == NULL) { - pr_info("GTPURH: dst dev NULL\n"); - return 0; - } - - skb_p = alloc_skb(LL_MAX_HEADER + ntohs(iph_p->tot_len), GFP_ATOMIC); - if (skb_p == NULL) { - return 0; - } - skb_p->priority = rt_tos2priority(iph_p->tos); - skb_p->pkt_type = PACKET_OTHERHOST; - skb_dst_set(skb_p, dst_clone(&rt->dst)); - skb_p->dev = skb_dst(skb_p)->dev; - - skb_reserve(skb_p, LL_MAX_HEADER + ntohs(iph_p->tot_len)); - skb_p->protocol = htons(ETH_P_IP); - - new_iph_p = (void *)skb_push(skb_p, ntohs(iph_p->tot_len) - (iph_p->ihl << 2)); - skb_reset_transport_header(skb_p); - new_iph_p = (void *)skb_push(skb_p, iph_p->ihl << 2); - memcpy(new_iph_p, iph_p, ntohs(iph_p->tot_len)); - skb_reset_network_header(skb_p); - skb_reset_inner_network_header(skb_p); - skb_reset_inner_transport_header(skb_p); - - skb_p->mark = gtpv1u_msg.teid; - - new_iph_p->ttl = ip4_dst_hoplimit(skb_dst(skb_p)); - skb_p->ip_summed = CHECKSUM_NONE; - - if (skb_p->len > dst_mtu(skb_dst(skb_p))) { - PR_INFO("GTPURH: bad length\n"); - goto free_skb; - } - ip_local_out(skb_p); - return 0; -free_skb: - pr_info("GTPURH: Dropped skb\n"); - kfree_skb(skb_p); - return 0; - } - break; - - default: - PR_INFO(MODULE_NAME":ERROR GTPU msg type %u\n", msg_type); - return 0; - } -} - -//----------------------------------------------------------------------------- -static int _gtpusp_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP) -//----------------------------------------------------------------------------- -{ - struct msghdr msg; - struct iovec iov; - mm_segment_t oldfs; - int size = 0; - - if (sock_pP->sk==NULL) return 0; - - iov.iov_base = buf_pP; - iov.iov_len = lenP; - -#if defined(FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT) - msg.msg_flags = MSG_DONTWAIT; -#else - msg.msg_flags = 0; -#endif - msg.msg_name = addr_pP; - msg.msg_namelen = sizeof(struct sockaddr_in); - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - msg.msg_control = NULL; - - oldfs = get_fs(); - set_fs(KERNEL_DS); - size = sock_recvmsg(sock_pP,&msg,lenP,msg.msg_flags); - set_fs(oldfs); - - return size; -} - -//----------------------------------------------------------------------------- -static int _gtpusp_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP) -//----------------------------------------------------------------------------- -{ - struct msghdr msg; - struct iovec iov[2]; - mm_segment_t oldfs; - int size = 0; - int err = 0; - int iov_index = 0; - - if ( (err = sock_pP->ops->connect(sock_pP, (struct sockaddr *)addr_pP, sizeof(struct sockaddr), 0)) < 0 ) { - PR_INFO(MODULE_NAME": Could not connect to socket, error = %d\n", -err); - return 0; - } - if (sock_pP->sk == NULL) { - return 0; - } - if ((gtpuh_pP != NULL) && (len_gtpP > 0)) { - iov[iov_index].iov_base = gtpuh_pP; - iov[iov_index].iov_len = len_gtpP; - iov_index += 1; - } - - if ((buf_ip_pP != NULL) && (len_ipP > 0)) { - iov[iov_index].iov_base = buf_ip_pP; - iov[iov_index].iov_len = len_ipP; - iov_index += 1; - } - - msg.msg_flags = 0; - msg.msg_name = addr_pP; - msg.msg_namelen = sizeof(struct sockaddr_in); - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_iov = iov; - msg.msg_iovlen = iov_index; - msg.msg_control = NULL; - - oldfs = get_fs(); - set_fs(KERNEL_DS); - size = sock_sendmsg(sock_pP,&msg,len_ipP+len_gtpP); - set_fs(oldfs); - - return size; - } - -#ifdef WITH_IPV6 -//----------------------------------------------------------------------------- -static void -_gtpusp_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) -{ - //----------------------------------------------------------------------------- - } -#endif - -//----------------------------------------------------------------------------- -static void -_gtpusp_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) -{ - //----------------------------------------------------------------------------- - struct iphdr *old_iph_p = ip_hdr(old_skb_pP); - struct gtpuhdr gtpuh; - uint16_t orig_iplen = 0; - // CONNMARK - enum ip_conntrack_info ctinfo; - struct nf_conn *ct = NULL; - u_int32_t newmark; - - if (skb_linearize(old_skb_pP) < 0) { - PR_INFO(MODULE_NAME": skb no linearize\n"); - return; - } - orig_iplen = ntohs(old_iph_p->tot_len); - - //---------------------------------------------------------------------------- - // CONNMARK - //---------------------------------------------------------------------------- - ct = nf_ct_get(old_skb_pP, &ctinfo); - if (ct == NULL) { - PR_INFO(MODULE_NAME": _gtpusp_target_add force targinfo ltun %u to skb_pP mark %u\n", - ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun, - old_skb_pP->mark); - newmark = ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun; - } else { - //XT_CONNMARK_RESTORE: - newmark = old_skb_pP->mark ^ ct->mark; - - PR_INFO(MODULE_NAME": _gtpusp_target_add restore mark %u (skb mark %u ct mark %u) len %u sgw addr %x\n", - newmark, old_skb_pP->mark, ct->mark, orig_iplen, - ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->raddr); - if (newmark != ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun) { - pr_warn(MODULE_NAME": _gtpusp_target_add restore mark 0x%x mismatch ltun 0x%x (rtun 0x%x)", - newmark, ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun, - ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->rtun); - } - } - - - /* Add GTPu header */ - gtpuh.flags = 0x30; /* v1 and Protocol-type=GTP */ - gtpuh.msgtype = 0xff; /* T-PDU */ - gtpuh.length = htons(orig_iplen); - gtpuh.tunid = htonl(((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->rtun); - - _gtpusp_sock.addr_send.sin_addr.s_addr = ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->raddr; - _gtpusp_ksocket_send(_gtpusp_sock.sock, &_gtpusp_sock.addr_send, (unsigned char*)>puh, sizeof(gtpuh), (unsigned char*)old_iph_p, orig_iplen); - return ; -} - -#ifdef WITH_IPV6 -//----------------------------------------------------------------------------- -static unsigned int -_gtpusp_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) -{ - //----------------------------------------------------------------------------- - - const struct xt_gtpusp_target_info *tgi_p = par_pP->targinfo; - - if (tgi_p == NULL) { - return NF_ACCEPT; - } - - if (tgi_p->action == PARAM_GTPUSP_ACTION_ADD) { - _gtpusp_tg6_add(skb_pP, par_pP); - return NF_DROP; // TODO - } - - return NF_ACCEPT; -} -#endif - -//----------------------------------------------------------------------------- -static unsigned int -_gtpusp_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) -{ - //----------------------------------------------------------------------------- - const struct xt_gtpusp_target_info *tgi_p = par_pP->targinfo; - - if (tgi_p == NULL) { - return NF_ACCEPT; - } - - if (tgi_p->action == PARAM_GTPUSP_ACTION_ADD) { - _gtpusp_tg4_add(skb_pP, par_pP); - return NF_DROP; - } - - return NF_ACCEPT; -} - -//----------------------------------------------------------------------------- -static int -__init gtpusp_tg_init(void) -//----------------------------------------------------------------------------- -{ - int err; - - pr_info(MODULE_NAME": Initializing module (KVersion: %d)\n", KVERSION); - pr_info(MODULE_NAME": Copyright Polaris Networks 2010-2011\n"); - pr_info(MODULE_NAME": Modified by EURECOM Lionel GAUTHIER 2014\n"); -#ifndef CMAKER - pr_info(MODULE_NAME": Compiled %s at time %s\n",__DATE__,__TIME__); -#endif -#if defined(WITH_IPV6) - pr_info(MODULE_NAME": IPv4/IPv6 enabled\n"); -#else - pr_info(MODULE_NAME": IPv4 only enabled\n"); -#endif - pr_info(MODULE_NAME": params gtpu_enb_port=%u, gtpu_sgw_port=%u, sgw_addr=%s\n", - gtpu_enb_port, gtpu_sgw_port, sgw_addr); - - // UDP socket socket - memset(&_gtpusp_sock, 0, sizeof(gtpusp_sock_t)); - - /* create a socket */ - if ((err = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &_gtpusp_sock.sock)) < 0 ) { - PR_INFO(": Could not create a datagram socket, error = %d\n", -ENXIO); - return err; - } - - _gtpusp_sock.addr.sin_family = AF_INET; - _gtpusp_sock.addr.sin_port = htons(gtpu_sgw_port); - _gtpusp_sock.addr.sin_addr.s_addr = in_aton(sgw_addr); - - _gtpusp_sock.addr_send.sin_family = AF_INET; - _gtpusp_sock.addr_send.sin_port = htons(gtpu_enb_port); - _gtpusp_sock.addr_send.sin_addr.s_addr = in_aton(sgw_addr); - - _gtpusp_sock.thread_stop_requested = 0; - - if ( (err = _gtpusp_sock.sock->ops->bind(_gtpusp_sock.sock, (struct sockaddr *)&_gtpusp_sock.addr, sizeof(struct sockaddr) ) ) < 0) { - pr_info(MODULE_NAME": Could not bind socket, error = %d\n", -err); - goto close_and_out; - } - - // start kernel thread - _gtpusp_sock.thread = kthread_run((void *)_udp_thread, NULL, MODULE_NAME); - if (IS_ERR(_gtpusp_sock.thread)) { - pr_info(MODULE_NAME": unable to start kernel thread\n"); - return -ENOMEM; - } - if((_gtpusp_sock.thread)) { - wake_up_process(_gtpusp_sock.thread); - } - return xt_register_targets(gtpusp_tg_reg, ARRAY_SIZE(gtpusp_tg_reg)); -close_and_out: - sock_release(_gtpusp_sock.sock); - _gtpusp_sock.sock = NULL; - return err; -} - -//----------------------------------------------------------------------------- -static void -__exit gtpusp_tg_exit(void) -//----------------------------------------------------------------------------- -{ - int err; - int loop = 0; - - - if (_gtpusp_sock.thread==NULL) { - pr_info(MODULE_NAME": no kernel thread to kill\n"); - } else { - if (_gtpusp_sock.running > 0) { - _gtpusp_sock.thread_stop_requested = 1; - pr_info(MODULE_NAME": exit kernel thread requested\n"); - do { - pr_info(MODULE_NAME": waking up thread with datagram\n"); - msleep(5); - pr_info(MODULE_NAME": waiting for thread...\n"); - loop++; - } while ((_gtpusp_sock.running > 0) && (loop < 20)); - if (_gtpusp_sock.running > 0) { - pr_info(MODULE_NAME": stopping kernel thread\n"); - err = kthread_stop(_gtpusp_sock.thread); - if(!err) { - pr_info(MODULE_NAME": Successfully killed kernel thread!\n"); - } else { - pr_info(MODULE_NAME": Unsuccessfully killed kernel thread!\n"); - } - } else { - pr_info(MODULE_NAME": Found thread exited by itself\n"); - } - } - } - - /* free allocated resources before exit */ - if (_gtpusp_sock.sock != NULL) { - sock_release(_gtpusp_sock.sock); - _gtpusp_sock.sock = NULL; - } - xt_unregister_targets(gtpusp_tg_reg, ARRAY_SIZE(gtpusp_tg_reg)); - pr_info(MODULE_NAME": Unloading module\n"); -} - - -module_init(gtpusp_tg_init); -module_exit(gtpusp_tg_exit); -MODULE_ALIAS("ipt6_GTPUSP"); -MODULE_ALIAS("ipt_GTPUSP"); - diff --git a/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h deleted file mode 100755 index e4d72f5875..0000000000 --- a/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Shared header file for iptables extension for the GTPU target and GTPu KLM - * - * Copyright (c) 2010-2011 Polaris Networks - * Author: Pradip Biswas - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -enum xt_gtpusp_mode_ { - PARAM_GTPUSP_ACTION_ADD = 1 << 8, -}; - -struct xt_gtpusp_target_info { - u_int32_t laddr __attribute__((aligned(8))); - u_int32_t raddr __attribute__((aligned(8))); - u_int32_t ltun __attribute__((aligned(8))); - u_int32_t rtun __attribute__((aligned(8))); - u_int32_t action __attribute__((aligned(8))); -}; - diff --git a/openair-cn/GTPV1-U/Makefile.am b/openair-cn/GTPV1-U/Makefile.am index cb8acf56c3..34df3ff5c9 100644 --- a/openair-cn/GTPV1-U/Makefile.am +++ b/openair-cn/GTPV1-U/Makefile.am @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/GTPV1-U/Makefile.eNB b/openair-cn/GTPV1-U/Makefile.eNB index 1347eb2c29..97920f114f 100644 --- a/openair-cn/GTPV1-U/Makefile.eNB +++ b/openair-cn/GTPV1-U/Makefile.eNB @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/GTPV1-U/gtpv1u.h b/openair-cn/GTPV1-U/gtpv1u.h index 3409505158..264fedfe77 100644 --- a/openair-cn/GTPV1-U/gtpv1u.h +++ b/openair-cn/GTPV1-U/gtpv1u.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB.c b/openair-cn/GTPV1-U/gtpv1u_eNB.c index 704123c3b2..ca492469b1 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB.c +++ b/openair-cn/GTPV1-U/gtpv1u_eNB.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h index 81f00005d9..916d4459d9 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h +++ b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_task.h b/openair-cn/GTPV1-U/gtpv1u_eNB_task.h index ce6643b131..b06777a55d 100755 --- a/openair-cn/GTPV1-U/gtpv1u_eNB_task.h +++ b/openair-cn/GTPV1-U/gtpv1u_eNB_task.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h b/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h index a525c388a2..d40410f3b7 100644 --- a/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h +++ b/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_task.c b/openair-cn/GTPV1-U/gtpv1u_task.c index f98db6056e..f17a0fdd0e 100644 --- a/openair-cn/GTPV1-U/gtpv1u_task.c +++ b/openair-cn/GTPV1-U/gtpv1u_task.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV1-U/gtpv1u_teid_pool.c b/openair-cn/GTPV1-U/gtpv1u_teid_pool.c index 3cbafd8979..32db1ff47e 100644 --- a/openair-cn/GTPV1-U/gtpv1u_teid_pool.c +++ b/openair-cn/GTPV1-U/gtpv1u_teid_pool.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/GTPV2-C/Makefile.am b/openair-cn/GTPV2-C/Makefile.am deleted file mode 100644 index 4bbb12ed0d..0000000000 --- a/openair-cn/GTPV2-C/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -SUBDIRS = nwgtpv2c-0.11/ \ No newline at end of file diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/AUTHORS b/openair-cn/GTPV2-C/nwgtpv2c-0.11/AUTHORS deleted file mode 100644 index b068a40fdd..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Amit Chawre diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/COPYING b/openair-cn/GTPV2-C/nwgtpv2c-0.11/COPYING deleted file mode 100644 index d27832d6c1..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/COPYING +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2010-2011 Amit Chawre -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. 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. -3. The name of the author may not be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/ChangeLog b/openair-cn/GTPV2-C/nwgtpv2c-0.11/ChangeLog deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/Makefile.am b/openair-cn/GTPV2-C/nwgtpv2c-0.11/Makefile.am deleted file mode 100644 index 2b8e86b1a2..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -# this is example-file: Makefile.am - -# the subdirectories of the project to go into -SUBDIRS = \ - src\ - test-app diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/NEWS b/openair-cn/GTPV2-C/nwgtpv2c-0.11/NEWS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/README b/openair-cn/GTPV2-C/nwgtpv2c-0.11/README deleted file mode 100644 index 8aa79638e9..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/README +++ /dev/null @@ -1,168 +0,0 @@ - -INTRODUCTION ------------- - -nwGtpv2c library is a free and open source implementation of GPRS Tunneling -Protocol v2, also known as eGTP-C, as per 3GPP TS-29274. - -The stack library supports transaction management, message creation and parsing, -message validation, echo response and retransmission management. Other than -this, timer and memory management functions are also built into the stack. - -The library is published under BSD three clause license. - - -DESIGN PHILOSPHY ----------------- - -The stack is designed for high portability not only for the hardware and OS -it will run on but also for the application software that uses it. The stack -doesn't mandate conditions on the user application architecture or design. -The stack relies on the user application for infrastructure utilities such -as I/O, timers, logs and multithreading. This realized by using callback -mechanisms and enables the stack library to seamlessly integrate without or -very little changes to the existing application framework. - -The stack is fully-asynchronous in design for compatibility with event loop -mechanisms such as select, poll, etc. and can also be used for multi-threaded -applications. It should compile on Linux, BSD, Mac OS X, Solaris and Windows -(cygwin). - -The stack architecture builds upon following mentioned entities that are -external to it: - - +-------------+ +---------+ +---------+ - | ULP ENTITY | | TMR MGR | | LOG MGR | - +------+------+ +----+----+ +----+----+ - | | | - +------+------------------+------------------+----+ - | | - | NWGTPv2 STACK | - | | - +-------------------------+-----------------------+ - | - +------+------+ - | UDP ENTITY | - +-------------+ - - -- User Layer Protocol (ULP) Entity: -This entity is the one which decides behaviour of the GTP user application. -This layer implements the intelligent logic for the GTP application and sits -on top of the GTP stack. This layer may also execute functions other than GTP -procedures for example authetication. - -- UDP Entity: -This is the layer below the GTP stack and is responsible for UDP I/O between -the stack and network. This layer shall manage the socket interface. This entity -abstracts the stack library's view of the network. This may be useful in a -multiprocess load balancing application wherein the GTP messages are received -by a GTP load distribution entity and relayed to multiple GTP stacks over -internal messaging. It may or may not be housed with/in ULP. - -- Timer Manager Entity: -Timer Manager Entity provides the GTP stack library with infrastructure for -timer CRUD operations. It may or may not be housed with/in ULP. - -- Log Manager Entity: -Log Manager Entity provides the GTP stack library with callbacks for logging -operations. It may or may not be housed with/in ULP. - - -Optionally, there may be a user level "Stack Management Entity" which shall be -resposible for creating and configuring the stack library, though the stack -library is not aware of any such entity. - -The application may implement all above entities as a single or multiple object. -The external entities need to register callbacks with GTP stack library for -receiving APIs from the stack library and stack library exposes API for the same. - -The GTP stack library doesn't implement any execution threads of its own. It is -up-to user application if it want to call the library APIs via multiple threads. -The stack library, though, currently DOES NOT protect its critical section and -hence, is NOT threadsafe. - - -FEATURES --------- - -- TS 29.274 (Release 9) compliance target for gtp-c -- Message Encoding -- Reliable Message Delivery -- Message Parser -- Message Integrity and Error Checking -- Support for S11, S5 and S8 SAE/EPC interfaces -- Easy Application Integration - - -APPLICATIONS ------------- - -In general, the GTP stack library may be used to write any GTP version 2 based -application. -The GTP stack library can also be used by applications implementing LTE MME, SGW -or PDN Gateways and simulators/emulators for either of them. Please see the test -applications involving basic GTP procedures. - -The test applications use libevent-1.4 library for I/O and timer infrastructure, -(http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz). -Following is a brief description of the test applications: - -- nw-helloworld -This is minimalistic program demostrating usage of nw-gtpv2 library. It -demostrates ulp, udp, tmrmgr and logmgr entities as well as stack construction -and destruction. The gtpv2c test application creates a transaction and sends -a initial request messages over it. - -- nw-egpting -egtping is a utility for pinging a GPRS Tunneling Protocol (GTP) version 2, -or Evolved GTP (eGTP) using Echo Request/Response. - -- nw-epc -The nw-epc software package is a free and open source framework implementation -of SGW and PGW built upon nw-gtpv2. - - -LICENSE -------- - -Copyright (c) 2010-2011 Amit Chawre -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. 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. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - -DISCLAIMER ----------- - -THIS INFORMATION IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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 INFORMATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/configure.ac b/openair-cn/GTPV2-C/nwgtpv2c-0.11/configure.ac deleted file mode 100644 index c9284f575e..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/configure.ac +++ /dev/null @@ -1,58 +0,0 @@ -# this is example-file: configure.ac - -# initial information about the project -AC_INIT([NwGtpv2c],[0.11],[]) - -# check if the source folder is correct -AC_CONFIG_SRCDIR([src/NwGtpv2c.c]) - -# Checks for programs - -# check for C++ preprocessor and compiler and the library compiler -AC_PROG_CXXCPP -AC_PROG_CXX -AC_PROG_RANLIB - -# automake initialisation and check for minimal automake API version 1.9 -AM_INIT_AUTOMAKE([1.9]) - -# use the C compiler for the following checks -AC_LANG([C]) -AC_C_INLINE - -# Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h]) -AC_CHECK_HEADERS([string]) -AC_CHECK_HEADERS([iostream]) -AC_CHECK_HEADERS([arpa/inet.h]) -AC_CHECK_HEADERS([sys/time.h]) -AC_CHECK_HEADERS([sys/socket.h]) - -AC_CHECK_FUNCS([strerror]) -AC_CHECK_FUNCS([socket]) -AC_CHECK_FUNCS([memset]) -AC_CHECK_FUNCS([gettimeofday]) -AC_FUNC_MALLOC -AC_PROG_LN_S - -AC_CHECK_LIB([event], [event_init]) -AM_CONDITIONAL([ENABLE_TESTS_APP], [test x$HAVE_LIBEVENT == xyes]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_TYPE_SIZE_T - -# distribute additional compiler and linker flags -# --> set these variables instead of CXXFLAGS or LDFLAGS -AC_SUBST([AM_CFLAGS]) -AC_SUBST([AM_LDFLAGS]) - -# files to generate via autotools (.am or .in source files) -AC_CONFIG_FILES([Makefile]) -AC_CONFIG_FILES([src/Makefile]) -AC_CONFIG_FILES([test-app/Makefile]) -AC_CONFIG_FILES([test-app/nw-helloworld/Makefile]) -AC_CONFIG_FILES([test-app/nw-egtping/Makefile]) - -# generate the final Makefile etc. -AC_OUTPUT diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cLog.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cLog.h deleted file mode 100644 index b35694b966..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cLog.h +++ /dev/null @@ -1,83 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_LOG_H__ -#define __NW_GTPV2C_LOG_H__ - -#include -#include "NwLog.h" - -/** - * @file NwGtpv2cLog.h - * @brief This header contains logging related definitions. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*--------------------------------------------------------------------------- - * Log Macro Definition - *--------------------------------------------------------------------------*/ - -#define NW_LOG(_gtpv2cHandle, _logLevel, ...) \ - do { \ - if(((NwGtpv2cStackT*)(_gtpv2cHandle))->logLevel >= _logLevel) \ - { \ - char _logBuf[1024]; \ - snprintf(_logBuf, 1024, __VA_ARGS__); \ - ((NwGtpv2cStackT*)(_gtpv2cHandle))->logMgr.logReqCallback(((NwGtpv2cStackT*)_gtpv2cHandle)->logMgr.logMgrHandle, _logLevel, __FILE__, __LINE__, _logBuf);\ - } \ - } while(0) - -#define NW_ENTER(_gtpv2cHandle) \ - do { \ - NW_LOG(_gtpv2cHandle, NW_LOG_LEVEL_DEBG, "Entering '%s'", __func__);\ - } while(0) - -#define NW_LEAVE(_gtpv2cHandle) \ - do { \ - NW_LOG(_gtpv2cHandle, NW_LOG_LEVEL_DEBG, "Leaving '%s'", __func__);\ - } while(0) - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_TYPES_H__ */ - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h deleted file mode 100644 index 38a37a5d4a..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h +++ /dev/null @@ -1,95 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_MSG_PARSE_INFO_H__ -#define __NW_GTPV2C_MSG_PARSE_INFO_H__ - -#include "NwTypes.h" -#include "NwGtpv2c.h" - -/** - * @file NwGtpv2cMsgParseInfo.h - * @brief This file defines APIs for to parse incoming messages. -*/ - -typedef struct { - uint8_t groupedIeType; - uint16_t mandatoryIeCount; - NwGtpv2cStackHandleT hStack; - - struct { - uint8_t ieMinLength; - uint8_t iePresence; - } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - -} NwGtpv2cGroupedIeParseInfoT; - -typedef struct { - uint16_t msgType; - uint16_t mandatoryIeCount; - NwGtpv2cStackHandleT hStack; - - struct { - uint8_t ieMinLength; - uint8_t iePresence; - NwGtpv2cGroupedIeParseInfoT* pGroupedIeInfo; - } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - -} NwGtpv2cMsgIeParseInfoT; - -#ifdef __cplusplus -extern "C" { -#endif - -NwGtpv2cMsgIeParseInfoT* -nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, uint8_t msgType); - -NwRcT -nwGtpv2cMsgIeParseInfoDelete(NwGtpv2cMsgIeParseInfoT* thiz); - -NwRcT -nwGtpv2cMsgIeParse(NW_IN NwGtpv2cMsgIeParseInfoT* thiz, - NW_IN NwGtpv2cMsgHandleT hMsg, - NW_INOUT NwGtpv2cErrorT *pError); - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_MSG_PARSE_INFO_H__ */ - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h deleted file mode 100644 index 29be2c3f29..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h +++ /dev/null @@ -1,237 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_PRIVATE_H__ -#define __NW_GTPV2C_PRIVATE_H__ - -#include - -#include "tree.h" -#include "queue.h" - -#include "NwTypes.h" -#include "NwError.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgIeParseInfo.h" -#include "NwGtpv2cTunnel.h" - -/** - * @file NwGtpv2cPrivate.h - * @brief This header file contains nw-gtpv2c private definitions not to be - * exposed to user application. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#define NW_GTPV2C_MALLOC(_stack, _size, _mem, _type) \ - do { \ - if(((NwGtpv2cStackT*)(_stack))->memMgr.memAlloc && ((NwGtpv2cStackT*)(_stack))->memMgr.memFree )\ - { \ - _mem = (_type) ((NwGtpv2cStackT*) (_stack))->memMgr.memAlloc(((NwGtpv2cStackT*) (_stack))->memMgr.hMemMgr, _size, __FILE__, __LINE__);\ - } \ - else \ - { \ - _mem = (_type) malloc (_size); \ - } \ - } while (0) - -#define NW_GTPV2C_FREE(_stack, _mem) \ - do { \ - if(((NwGtpv2cStackT*)(_stack))->memMgr.memAlloc && ((NwGtpv2cStackT*)(_stack))->memMgr.memFree )\ - { \ - ((NwGtpv2cStackT*)(_stack))->memMgr.memFree(((NwGtpv2cStackT*) (_stack))->memMgr.hMemMgr, _mem, __FILE__, __LINE__);\ - } \ - else \ - { \ - free ((void*)_mem); \ - } \ - } while (0) - -/*--------------------------------------------------------------------------* - * G T P V 2 C S T A C K O B J E C T T Y P E D E F I N I T I O N * - *--------------------------------------------------------------------------*/ - -/** - * gtpv2c stack class definition - */ - -typedef struct NwGtpv2cStack { - uint32_t id; - NwGtpv2cUlpEntityT ulp; - NwGtpv2cUdpEntityT udp; - NwGtpv2cMemMgrEntityT memMgr; - NwGtpv2cTimerMgrEntityT tmrMgr; - NwGtpv2cLogMgrEntityT logMgr; - - uint32_t seqNum; - uint32_t logLevel; - uint32_t restartCounter; - - NwGtpv2cMsgIeParseInfoT *pGtpv2cMsgIeParseInfo[NW_GTP_MSG_END]; - struct NwGtpv2cTimeoutInfo *activeTimerInfo; - - RB_HEAD( NwGtpv2cTunnelMap, NwGtpv2cTunnel ) tunnelMap; - RB_HEAD( NwGtpv2cOutstandingTxSeqNumTrxnMap, NwGtpv2cTrxn ) outstandingTxSeqNumMap; - RB_HEAD( NwGtpv2cOutstandingRxSeqNumTrxnMap, NwGtpv2cTrxn ) outstandingRxSeqNumMap; - RB_HEAD( NwGtpv2cActiveTimerList, NwGtpv2cTimeoutInfo ) activeTimerList; - NwHandleT hTmrMinHeap; -} NwGtpv2cStackT; - - -/*--------------------------------------------------------------------------* - * Timeout Info Type Definition - *--------------------------------------------------------------------------*/ - -/** - * gtpv2c timeout info - */ - -typedef struct NwGtpv2cTimeoutInfo { - NwGtpv2cStackHandleT hStack; - struct timeval tvTimeout; - uint32_t tmrType; - void* timeoutArg; - NwRcT (*timeoutCallbackFunc)(void*); - NwGtpv2cTimerHandleT hTimer; - RB_ENTRY (NwGtpv2cTimeoutInfo) activeTimerListRbtNode; /**< RB Tree Data Structure Node */ - uint32_t timerMinHeapIndex; - struct NwGtpv2cTimeoutInfo *next; -} NwGtpv2cTimeoutInfoT; - - -/*--------------------------------------------------------------------------- - * GTPv2c Message Container Definition - *--------------------------------------------------------------------------*/ - -#define NW_GTPV2C_MAX_MSG_LEN (1024) /**< Maximum supported gtpv2c packet length including header */ - -/** - * NwGtpv2cMsgT holds gtpv2c messages to/from the peer. - */ -typedef struct NwGtpv2cMsgS { - uint8_t version; - uint8_t teidPresent; - uint8_t msgType; - uint16_t msgLen; - uint32_t teid; - uint32_t seqNum; - uint8_t* pMsgStart; - -#define NW_GTPV2C_MAX_GROUPED_IE_DEPTH (2) - struct { - NwGtpv2cIeTlvT *pIe[NW_GTPV2C_MAX_GROUPED_IE_DEPTH]; - uint8_t top; - } groupedIeEncodeStack; - - NwBoolT isIeValid[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - uint8_t *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - uint8_t msgBuf[NW_GTPV2C_MAX_MSG_LEN]; - NwGtpv2cStackHandleT hStack; - struct NwGtpv2cMsgS* next; -} NwGtpv2cMsgT; - -/** - * Transaction structure - */ - -typedef struct NwGtpv2cTrxn { - uint32_t seqNum; - uint32_t peerIp; - uint32_t peerPort; - uint8_t t3Timer; - uint8_t maxRetries; - NwGtpv2cMsgT* pMsg; - NwGtpv2cStackT* pStack; - NwGtpv2cTimerHandleT hRspTmr; /**< Handle to reponse timer */ - NwGtpv2cTunnelHandleT hTunnel; /**< Handle to local tunnel context */ - NwGtpv2cUlpTrxnHandleT hUlpTrxn; /**< Handle to ULP tunnel context */ - RB_ENTRY (NwGtpv2cTrxn) outstandingTxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */ - RB_ENTRY (NwGtpv2cTrxn) outstandingRxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */ - struct NwGtpv2cTrxn* next; -} NwGtpv2cTrxnT; - -/** - * GTPv2c Path Context - */ - -typedef struct NwGtpv2cPathS { - uint32_t hUlpPath; /**< Handle to ULP path contect */ - uint32_t ipv4Address; - uint32_t restartCounter; - uint16_t t3ResponseTimout; - uint16_t n3RequestCount; - NwGtpv2cTimerHandleT hKeepAliveTmr; /**< Handle to path keep alive echo timer */ - RB_ENTRY (NwGtpv2cPathS) pathMapRbtNode; -} NwGtpv2cPathT; - - -RB_PROTOTYPE(NwGtpv2cTunnelMap, NwGtpv2cTunnel, tunnelMapRbtNode, nwGtpv2cCompareTunnel) -RB_PROTOTYPE(NwGtpv2cOutstandingTxSeqNumTrxnMap, NwGtpv2cTrxn, outstandingTxSeqNumMapRbtNode, nwGtpv2cCompareSeqNum) -RB_PROTOTYPE(NwGtpv2cOutstandingRxSeqNumTrxnMap, NwGtpv2cTrxn, outstandingRxSeqNumMapRbtNode, nwGtpv2cCompareSeqNum) -RB_PROTOTYPE(NwGtpv2cActiveTimerList, NwGtpv2cTimeoutInfo, activeTimerListRbtNode, nwGtpv2cCompareOutstandingTxRexmitTime) - -/** - * Start Timer with ULP Timer Manager - */ - -NwRcT -nwGtpv2cStartTimer(NwGtpv2cStackT* thiz, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - NwRcT (*timeoutCallbackFunc)(void*), - void* timeoutCallbackArg, - NwGtpv2cTimerHandleT *phTimer); - - -/** - * Stop Timer with ULP Timer Manager - */ - -NwRcT -nwGtpv2cStopTimer(NwGtpv2cStackT* thiz, - NwGtpv2cTimerHandleT hTimer); - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_PRIVATE_H__ */ -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h deleted file mode 100644 index 26ae1875c3..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h +++ /dev/null @@ -1,117 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 NwGtpv2cTrxn.h - * @author Amit Chawre - * @brief - * - * This header file contains required definitions and functions - * prototypes used by gtpv2c transactions. - * - **/ - - -#ifndef __NW_GTPV2C_TRXN_H__ -#define __NW_GTPV2C_TRXN_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Constructotr - */ -NwGtpv2cTrxnT* -nwGtpv2cTrxnNew( NW_IN NwGtpv2cStackT* pStack); - -/** - * Overloaded Constructotr - */ -NwGtpv2cTrxnT* -nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* pStack, - NW_IN uint32_t seqNum); - -/** - * Another overloaded constructor. Create transaction as outstanding - * RX transaction for detecting duplicated requests. - * - * @param[in] thiz : Pointer to stack. - * @param[in] teidLocal : Trxn teid. - * @param[in] peerIp : Peer Ip address. - * @param[in] peerPort : Peer Ip port. - * @param[in] seqNum : Seq Number. - * @return NW_OK on success. - */ - -NwGtpv2cTrxnT* -nwGtpv2cTrxnOutstandingRxNew( NW_IN NwGtpv2cStackT* pStack, - NW_IN uint32_t teidLocal, - NW_IN uint32_t peerIp, - NW_IN uint32_t peerPort, - NW_IN uint32_t seqNum); - -NwRcT -nwGtpv2cTrxnDelete( NW_INOUT NwGtpv2cTrxnT **ppTrxn); - -/** - * Start timer to wait before pruginf a req tran for which response has been sent - * - * @param[in] thiz : Pointer to transaction - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cTrxnStartDulpicateRequestWaitTimer(NwGtpv2cTrxnT* thiz); - -/** - * Start timer to wait for rsp of a req message - * - * @param[in] thiz : Pointer to transaction - * @param[in] timeoutCallbackFunc : Timeout handler callback function. - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cTrxnStartPeerRspWaitTimer(NwGtpv2cTrxnT* thiz); - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_TRXN_H__ */ - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h deleted file mode 100644 index 33c437ada7..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h +++ /dev/null @@ -1,79 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_TUNNEL_H__ -#define __NW_GTPV2C_TUNNEL_H__ - -#include -#include -#include - -#include "tree.h" -#include "NwTypes.h" -#include "NwUtils.h" -#include "NwError.h" -#include "NwGtpv2c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct NwGtpv2cStack; - -typedef struct NwGtpv2cTunnel { - uint32_t teid; - uint32_t ipv4AddrRemote; - NwGtpv2cUlpTunnelHandleT hUlpTunnel; - RB_ENTRY (NwGtpv2cTunnel) tunnelMapRbtNode; /**< RB Tree Data Structure Node */ - struct NwGtpv2cTunnel* next; -} NwGtpv2cTunnelT; - -NwGtpv2cTunnelT* -nwGtpv2cTunnelNew(struct NwGtpv2cStack *hStack, uint32_t teid, uint32_t peerIpv4Addr, NwGtpv2cUlpTunnelHandleT hUlpTunnel); - -NwRcT -nwGtpv2cTunnelDelete(struct NwGtpv2cStack *pStack, NwGtpv2cTunnelT* thiz); - -NwRcT -nwGtpv2cTunnelGetUlpTunnelHandle( NwGtpv2cTunnelT* thiz, NwGtpv2cUlpTunnelHandleT* phUlpTunnel); - -#ifdef __cplusplus -} -#endif - -#endif - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/queue.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/queue.h deleted file mode 100644 index 457220bc98..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/queue.h +++ /dev/null @@ -1,566 +0,0 @@ -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University 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 BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. - * - * @(#)queue.h 8.5 (Berkeley) 8/20/94 - * $FreeBSD: src/sys/sys/queue.h,v 1.32.2.6 2001/12/18 10:09:02 ru Exp $ - */ - -#ifndef _SYS_QUEUE_H_ -#define _SYS_QUEUE_H_ - - -/* - * This file defines five types of data structures: singly-linked lists, - * singly-linked tail queues, lists, tail queues, and circular queues. - * - * A singly-linked list is headed by a single forward pointer. The elements - * are singly linked for minimum space and pointer manipulation overhead at - * the expense of O(n) removal for arbitrary elements. New elements can be - * added to the list after an existing element or at the head of the list. - * Elements being removed from the head of the list should use the explicit - * macro for this purpose for tmpimum efficiency. A singly-linked list may - * only be traversed in the forward direction. Singly-linked lists are ideal - * for applications with large datasets and few or no removals or for - * implementing a LIFO queue. - * - * A singly-linked tail queue is headed by a pair of pointers, one to the - * head of the list and the other to the tail of the list. The elements are - * singly linked for minimum space and pointer manipulation overhead at the - * expense of O(n) removal for arbitrary elements. New elements can be added - * to the list after an existing element, at the head of the list, or at the - * end of the list. Elements being removed from the head of the tail queue - * should use the explicit macro for this purpose for tmpimum efficiency. - * A singly-linked tail queue may only be traversed in the forward direction. - * Singly-linked tail queues are ideal for applications with large datasets - * and few or no removals or for implementing a FIFO queue. - * - * A list is headed by a single forward pointer (or an array of forward - * pointers for a hash table header). The elements are doubly linked - * so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before - * or after an existing element or at the head of the list. A list - * may only be traversed in the forward direction. - * - * A tail queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or - * after an existing element, at the head of the list, or at the end of - * the list. A tail queue may be traversed in either direction. - * - * A circle queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or after - * an existing element, at the head of the list, or at the end of the list. - * A circle queue may be traversed in either direction, but has a more - * complex end of list detection. - * - * For details on the use of these macros, see the queue(3) manual page. - * - * - * SLIST LIST STAILQ TAILQ CIRCLEQ - * _HEAD + + + + + - * _HEAD_INITIALIZER + + + + + - * _ENTRY + + + + + - * _INIT + + + + + - * _EMPTY + + + + + - * _FIRST + + + + + - * _NEXT + + + + + - * _PREV - - - + + - * _LAST - - + + + - * _FOREACH + + + + + - * _FOREACH_REVERSE - - - + + - * _INSERT_HEAD + + + + + - * _INSERT_BEFORE - + - + + - * _INSERT_AFTER + + + + + - * _INSERT_TAIL - - + + + - * _REMOVE_HEAD + - + - - - * _REMOVE + + + + + - * - */ - -/* - * Singly-linked List declarations. - */ -#define SLIST_HEAD(name, type) \ -struct name { \ - struct type *slh_first; /* first element */ \ -} - -#define SLIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define SLIST_ENTRY(type) \ -struct { \ - struct type *sle_next; /* next element */ \ -} - -/* - * Singly-linked List functions. - */ -#define SLIST_EMPTY(head) ((head)->slh_first == NULL) - -#define SLIST_FIRST(head) ((head)->slh_first) - -#define SLIST_FOREACH(var, head, field) \ - for ((var) = SLIST_FIRST((head)); \ - (var); \ - (var) = SLIST_NEXT((var), field)) - -#define SLIST_INIT(head) do { \ - SLIST_FIRST((head)) = NULL; \ -} while (0) - -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ - SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ - SLIST_NEXT((slistelm), field) = (elm); \ -} while (0) - -#define SLIST_INSERT_HEAD(head, elm, field) do { \ - SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ - SLIST_FIRST((head)) = (elm); \ -} while (0) - -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) - -#define SLIST_REMOVE(head, elm, type, field) do { \ - if (SLIST_FIRST((head)) == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ - } \ - else { \ - struct type *curelm = SLIST_FIRST((head)); \ - while (SLIST_NEXT(curelm, field) != (elm)) \ - curelm = SLIST_NEXT(curelm, field); \ - SLIST_NEXT(curelm, field) = \ - SLIST_NEXT(SLIST_NEXT(curelm, field), field); \ - } \ -} while (0) - -#define SLIST_REMOVE_HEAD(head, field) do { \ - SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ -} while (0) - -/* - * Singly-linked Tail queue declarations. - */ -#define STAILQ_HEAD(name, type) \ -struct name { \ - struct type *stqh_first;/* first element */ \ - struct type **stqh_last;/* addr of last next element */ \ -} - -#define STAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).stqh_first } - -#define STAILQ_HEAD_INIT(head) do{ \ - (head).stqh_first = NULL; \ - (head).stqh_last = &(head).stqh_first; \ -}while(0) - -#define STAILQ_ENTRY(type) \ -struct { \ - struct type *stqe_next; /* next element */ \ -} - -/* - * Singly-linked Tail queue functions. - */ -#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) - -#define STAILQ_FIRST(head) ((head)->stqh_first) - -#define STAILQ_FOREACH(var, head, field) \ - for((var) = STAILQ_FIRST((head)); \ - (var); \ - (var) = STAILQ_NEXT((var), field)) - -#define STAILQ_INIT(head) do { \ - STAILQ_FIRST((head)) = NULL; \ - (head)->stqh_last = &STAILQ_FIRST((head)); \ -} while (0) - -#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ - if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ - STAILQ_NEXT((tqelm), field) = (elm); \ -} while (0) - -#define STAILQ_INSERT_HEAD(head, elm, field) do { \ - if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ - STAILQ_FIRST((head)) = (elm); \ -} while (0) - -#define STAILQ_INSERT_TAIL(head, elm, field) do { \ - STAILQ_NEXT((elm), field) = NULL; \ - *(head)->stqh_last = (elm); \ - (head)->stqh_last = &STAILQ_NEXT((elm), field); \ -} while (0) - -#define STAILQ_LAST(head, type, field) \ - (STAILQ_EMPTY(head) ? \ - NULL : \ - ((struct type *) \ - ((char *)((head)->stqh_last) - __offsetof(struct type, field)))) - -#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) - -#define STAILQ_REMOVE(head, elm, type, field) do { \ - if (STAILQ_FIRST((head)) == (elm)) { \ - STAILQ_REMOVE_HEAD(head, field); \ - } \ - else { \ - struct type *curelm = STAILQ_FIRST((head)); \ - while (STAILQ_NEXT(curelm, field) != (elm)) \ - curelm = STAILQ_NEXT(curelm, field); \ - if ((STAILQ_NEXT(curelm, field) = \ - STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\ - (head)->stqh_last = &STAILQ_NEXT((curelm), field);\ - } \ -} while (0) - -#define STAILQ_REMOVE_HEAD(head, field) do { \ - if ((STAILQ_FIRST((head)) = \ - STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ - (head)->stqh_last = &STAILQ_FIRST((head)); \ -} while (0) - -#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \ - if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \ - (head)->stqh_last = &STAILQ_FIRST((head)); \ -} while (0) - -/* - * List declarations. - */ -#define LIST_HEAD(name, type) \ -struct name { \ - struct type *lh_first; /* first element */ \ -} - -#define LIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define LIST_ENTRY(type) \ -struct { \ - struct type *le_next; /* next element */ \ - struct type **le_prev; /* address of previous next element */ \ -} - -/* - * List functions. - */ - -#define LIST_EMPTY(head) ((head)->lh_first == NULL) - -#define LIST_FIRST(head) ((head)->lh_first) - -#define LIST_FOREACH(var, head, field) \ - for ((var) = LIST_FIRST((head)); \ - (var); \ - (var) = LIST_NEXT((var), field)) - -#define LIST_INIT(head) do { \ - LIST_FIRST((head)) = NULL; \ -} while (0) - -#define LIST_INSERT_AFTER(listelm, elm, field) do { \ - if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ - LIST_NEXT((listelm), field)->field.le_prev = \ - &LIST_NEXT((elm), field); \ - LIST_NEXT((listelm), field) = (elm); \ - (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ -} while (0) - -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.le_prev = (listelm)->field.le_prev; \ - LIST_NEXT((elm), field) = (listelm); \ - *(listelm)->field.le_prev = (elm); \ - (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ -} while (0) - -#define LIST_INSERT_HEAD(head, elm, field) do { \ - if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ - LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ - LIST_FIRST((head)) = (elm); \ - (elm)->field.le_prev = &LIST_FIRST((head)); \ -} while (0) - -#define LIST_NEXT(elm, field) ((elm)->field.le_next) - -#define LIST_REMOVE(elm, field) do { \ - if (LIST_NEXT((elm), field) != NULL) \ - LIST_NEXT((elm), field)->field.le_prev = \ - (elm)->field.le_prev; \ - *(elm)->field.le_prev = LIST_NEXT((elm), field); \ -} while (0) - -/* - * Tail queue declarations. - */ -#define TAILQ_HEAD(name, type) \ -struct name { \ - struct type *tqh_first; /* first element */ \ - struct type **tqh_last; /* addr of last next element */ \ -} - -#define TAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).tqh_first } - -#define TAILQ_ENTRY(type) \ -struct { \ - struct type *tqe_next; /* next element */ \ - struct type **tqe_prev; /* address of previous next element */ \ -} - -/* - * Tail queue functions. - */ -#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) - -#define TAILQ_FIRST(head) ((head)->tqh_first) - -#define TAILQ_FOREACH(var, head, field) \ - for ((var) = TAILQ_FIRST((head)); \ - (var); \ - (var) = TAILQ_NEXT((var), field)) - -#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for ((var) = TAILQ_LAST((head), headname); \ - (var); \ - (var) = TAILQ_PREV((var), headname, field)) - -#define TAILQ_INIT(head) do { \ - TAILQ_FIRST((head)) = NULL; \ - (head)->tqh_last = &TAILQ_FIRST((head)); \ -} while (0) - -#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ - TAILQ_NEXT((elm), field)->field.tqe_prev = \ - &TAILQ_NEXT((elm), field); \ - else \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ - TAILQ_NEXT((listelm), field) = (elm); \ - (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ -} while (0) - -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - TAILQ_NEXT((elm), field) = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ -} while (0) - -#define TAILQ_INSERT_HEAD(head, elm, field) do { \ - if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ - TAILQ_FIRST((head))->field.tqe_prev = \ - &TAILQ_NEXT((elm), field); \ - else \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ - TAILQ_FIRST((head)) = (elm); \ - (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ -} while (0) - -#define TAILQ_INSERT_TAIL(head, elm, field) do { \ - TAILQ_NEXT((elm), field) = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &TAILQ_NEXT((elm), field); \ -} while (0) - -#define TAILQ_LAST(head, headname) \ - (*(((struct headname *)((head)->tqh_last))->tqh_last)) - -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) - -#define TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) - -#define TAILQ_REMOVE(head, elm, field) do { \ - if ((TAILQ_NEXT((elm), field)) != NULL) \ - TAILQ_NEXT((elm), field)->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ -} while (0) - -/* - * Circular queue declarations. - */ -#define CIRCLEQ_HEAD(name, type) \ -struct name { \ - struct type *cqh_first; /* first element */ \ - struct type *cqh_last; /* last element */ \ -} - -#define CIRCLEQ_HEAD_INITIALIZER(head) \ - { (void *)&(head), (void *)&(head) } - -#define CIRCLEQ_ENTRY(type) \ -struct { \ - struct type *cqe_next; /* next element */ \ - struct type *cqe_prev; /* previous element */ \ -} - -/* - * Circular queue functions. - */ -#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) - -#define CIRCLEQ_FIRST(head) ((head)->cqh_first) - -#define CIRCLEQ_FOREACH(var, head, field) \ - for ((var) = CIRCLEQ_FIRST((head)); \ - (var) != (void *)(head); \ - (var) = CIRCLEQ_NEXT((var), field)) - -#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ - for ((var) = CIRCLEQ_LAST((head)); \ - (var) != (void *)(head); \ - (var) = CIRCLEQ_PREV((var), field)) - -#define CIRCLEQ_INIT(head) do { \ - CIRCLEQ_FIRST((head)) = (void *)(head); \ - CIRCLEQ_LAST((head)) = (void *)(head); \ -} while (0) - -#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - CIRCLEQ_NEXT((elm), field) = CIRCLEQ_NEXT((listelm), field); \ - CIRCLEQ_PREV((elm), field) = (listelm); \ - if (CIRCLEQ_NEXT((listelm), field) == (void *)(head)) \ - CIRCLEQ_LAST((head)) = (elm); \ - else \ - CIRCLEQ_PREV(CIRCLEQ_NEXT((listelm), field), field) = (elm);\ - CIRCLEQ_NEXT((listelm), field) = (elm); \ -} while (0) - -#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ - CIRCLEQ_NEXT((elm), field) = (listelm); \ - CIRCLEQ_PREV((elm), field) = CIRCLEQ_PREV((listelm), field); \ - if (CIRCLEQ_PREV((listelm), field) == (void *)(head)) \ - CIRCLEQ_FIRST((head)) = (elm); \ - else \ - CIRCLEQ_NEXT(CIRCLEQ_PREV((listelm), field), field) = (elm);\ - CIRCLEQ_PREV((listelm), field) = (elm); \ -} while (0) - -#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ - CIRCLEQ_NEXT((elm), field) = CIRCLEQ_FIRST((head)); \ - CIRCLEQ_PREV((elm), field) = (void *)(head); \ - if (CIRCLEQ_LAST((head)) == (void *)(head)) \ - CIRCLEQ_LAST((head)) = (elm); \ - else \ - CIRCLEQ_PREV(CIRCLEQ_FIRST((head)), field) = (elm); \ - CIRCLEQ_FIRST((head)) = (elm); \ -} while (0) - -#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ - CIRCLEQ_NEXT((elm), field) = (void *)(head); \ - CIRCLEQ_PREV((elm), field) = CIRCLEQ_LAST((head)); \ - if (CIRCLEQ_FIRST((head)) == (void *)(head)) \ - CIRCLEQ_FIRST((head)) = (elm); \ - else \ - CIRCLEQ_NEXT(CIRCLEQ_LAST((head)), field) = (elm); \ - CIRCLEQ_LAST((head)) = (elm); \ -} while (0) - -#define CIRCLEQ_LAST(head) ((head)->cqh_last) - -#define CIRCLEQ_NEXT(elm,field) ((elm)->field.cqe_next) - -#define CIRCLEQ_PREV(elm,field) ((elm)->field.cqe_prev) - -#define CIRCLEQ_REMOVE(head, elm, field) do { \ - if (CIRCLEQ_NEXT((elm), field) == (void *)(head)) \ - CIRCLEQ_LAST((head)) = CIRCLEQ_PREV((elm), field); \ - else \ - CIRCLEQ_PREV(CIRCLEQ_NEXT((elm), field), field) = \ - CIRCLEQ_PREV((elm), field); \ - if (CIRCLEQ_PREV((elm), field) == (void *)(head)) \ - CIRCLEQ_FIRST((head)) = CIRCLEQ_NEXT((elm), field); \ - else \ - CIRCLEQ_NEXT(CIRCLEQ_PREV((elm), field), field) = \ - CIRCLEQ_NEXT((elm), field); \ -} while (0) - -#ifdef _KERNEL - -/* - * XXX insque() and remque() are an old way of handling certain queues. - * They bogusly assumes that all queue heads look alike. - */ - -struct quehead { - struct quehead *qh_link; - struct quehead *qh_rlink; -}; - -#ifdef __GNUC__ - -static __inline void -insque(void *a, void *b) -{ - struct quehead *element = (struct quehead *)a, - *head = (struct quehead *)b; - - element->qh_link = head->qh_link; - element->qh_rlink = head; - head->qh_link = element; - element->qh_link->qh_rlink = element; -} - -static __inline void -remque(void *a) -{ - struct quehead *element = (struct quehead *)a; - - element->qh_link->qh_rlink = element->qh_rlink; - element->qh_rlink->qh_link = element->qh_link; - element->qh_rlink = 0; -} - -#else /* !__GNUC__ */ - -void insque __P((void *a, void *b)); -void remque __P((void *a)); - -#endif /* __GNUC__ */ - -#endif /* _KERNEL */ - -#endif /* !_SYS_QUEUE_H_ */ - - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/tree.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/tree.h deleted file mode 100644 index 351df9dfc5..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/tree.h +++ /dev/null @@ -1,678 +0,0 @@ -/* - * Copyright 2002 Niels Provos - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR 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 _SYS_TREE_H_ -#define _SYS_TREE_H_ - -/* - * This file defines data structures for different types of trees: - * splay trees and red-black trees. - * - * A splay tree is a self-organizing data structure. Every operation - * on the tree causes a splay to happen. The splay moves the requested - * node to the root of the tree and partly rebalances it. - * - * This has the benefit that request locality causes faster lookups as - * the requested nodes move to the top of the tree. On the other hand, - * every lookup causes memory writes. - * - * The Balance Theorem bounds the total access time for m operations - * and n inserts on an initially empty tree as O((m + n)lg n). The - * amortized cost for a sequence of m accesses to a splay tree is O(lg n); - * - * A red-black tree is a binary search tree with the node color as an - * extra attribute. It fulfills a set of conditions: - * - every search path from the root to a leaf consists of the - * same number of black nodes, - * - each red node (except for the root) has a black parent, - * - each leaf node is black. - * - * Every operation on a red-black tree is bounded as O(lg n). - * The maximum height of a red-black tree is 2lg (n+1). - */ - -#define SPLAY_HEAD(name, type) \ -struct name { \ - struct type *sph_root; /* root of the tree */ \ -} - -#define SPLAY_INITIALIZER(root) \ - { NULL } - -#define SPLAY_INIT(root) do { \ - (root)->sph_root = NULL; \ -} while (0) - -#define SPLAY_ENTRY(type) \ -struct { \ - struct type *spe_left; /* left element */ \ - struct type *spe_right; /* right element */ \ -} - -#define SPLAY_LEFT(elm, field) (elm)->field.spe_left -#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right -#define SPLAY_ROOT(head) (head)->sph_root -#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) - -/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ -#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (0) - -#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (0) - -#define SPLAY_LINKLEFT(head, tmp, field) do { \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ -} while (0) - -#define SPLAY_LINKRIGHT(head, tmp, field) do { \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ -} while (0) - -#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ - SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ -} while (0) - -/* Generates prototypes and inline functions */ - -#define SPLAY_PROTOTYPE(name, type, field, cmp) \ -void name##_SPLAY(struct name *, struct type *); \ -void name##_SPLAY_MINMAX(struct name *, int); \ -struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ -struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ - \ -/* Finds the node with the same key as elm */ \ -static __inline struct type * \ -name##_SPLAY_FIND(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) \ - return(NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) \ - return (head->sph_root); \ - return (NULL); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_NEXT(struct name *head, struct type *elm) \ -{ \ - name##_SPLAY(head, elm); \ - if (SPLAY_RIGHT(elm, field) != NULL) { \ - elm = SPLAY_RIGHT(elm, field); \ - while (SPLAY_LEFT(elm, field) != NULL) { \ - elm = SPLAY_LEFT(elm, field); \ - } \ - } else \ - elm = NULL; \ - return (elm); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_MIN_MAX(struct name *head, int val) \ -{ \ - name##_SPLAY_MINMAX(head, val); \ - return (SPLAY_ROOT(head)); \ -} - -/* Main splay operation. - * Moves node close to the key of elm to top - */ -#define SPLAY_GENERATE(name, type, field, cmp) \ -struct type * \ -name##_SPLAY_INSERT(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) { \ - SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ - } else { \ - int __comp; \ - name##_SPLAY(head, elm); \ - __comp = (cmp)(elm, (head)->sph_root); \ - if(__comp < 0) { \ - SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\ - SPLAY_RIGHT(elm, field) = (head)->sph_root; \ - SPLAY_LEFT((head)->sph_root, field) = NULL; \ - } else if (__comp > 0) { \ - SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\ - SPLAY_LEFT(elm, field) = (head)->sph_root; \ - SPLAY_RIGHT((head)->sph_root, field) = NULL; \ - } else \ - return ((head)->sph_root); \ - } \ - (head)->sph_root = (elm); \ - return (NULL); \ -} \ - \ -struct type * \ -name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *__tmp; \ - if (SPLAY_EMPTY(head)) \ - return (NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) { \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\ - } else { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\ - name##_SPLAY(head, elm); \ - SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ - } \ - return (elm); \ - } \ - return (NULL); \ -} \ - \ -void \ -name##_SPLAY(struct name *head, struct type *elm) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - int __comp; \ -\ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ - __left = __right = &__node; \ -\ - while ((__comp = (cmp)(elm, (head)->sph_root))) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) > 0){ \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} \ - \ -/* Splay with either the minimum or the maximum element \ - * Used to find minimum or maximum element in tree. \ - */ \ -void name##_SPLAY_MINMAX(struct name *head, int __comp) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ -\ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ - __left = __right = &__node; \ -\ - while (1) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp > 0) { \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} - -#define SPLAY_NEGINF -1 -#define SPLAY_INF 1 - -#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) -#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) -#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) -#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) -#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) -#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) - -#define SPLAY_FOREACH(x, name, head) \ - for ((x) = SPLAY_MIN(name, head); \ - (x) != NULL; \ - (x) = SPLAY_NEXT(name, head, x)) - -/* Macros that define a red-back tree */ -#define RB_HEAD(name, type) \ -struct name { \ - struct type *rbh_root; /* root of the tree */ \ -} - -#define RB_INITIALIZER(root) \ - { NULL } - -#define RB_INIT(root) do { \ - (root)->rbh_root = NULL; \ -} while (0) - -#define RB_BLACK 0 -#define RB_RED 1 -#define RB_ENTRY(type) \ -struct { \ - struct type *rbe_left; /* left element */ \ - struct type *rbe_right; /* right element */ \ - struct type *rbe_parent; /* parent element */ \ - int rbe_color; /* node color */ \ -} - -#define RB_LEFT(elm, field) (elm)->field.rbe_left -#define RB_RIGHT(elm, field) (elm)->field.rbe_right -#define RB_PARENT(elm, field) (elm)->field.rbe_parent -#define RB_COLOR(elm, field) (elm)->field.rbe_color -#define RB_ROOT(head) (head)->rbh_root -#define RB_EMPTY(head) (RB_ROOT(head) == NULL) - -#define RB_SET(elm, parent, field) do { \ - RB_PARENT(elm, field) = parent; \ - RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ - RB_COLOR(elm, field) = RB_RED; \ -} while (0) - -#define RB_SET_BLACKRED(black, red, field) do { \ - RB_COLOR(black, field) = RB_BLACK; \ - RB_COLOR(red, field) = RB_RED; \ -} while (0) - -#ifndef RB_AUGMENT -#define RB_AUGMENT(x) -#endif - -#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ - (tmp) = RB_RIGHT(elm, field); \ - if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field))) { \ - RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_LEFT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (0) - -#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ - (tmp) = RB_LEFT(elm, field); \ - if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field))) { \ - RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_RIGHT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (0) - -/* Generates prototypes and inline functions */ -#define RB_PROTOTYPE(name, type, field, cmp) \ -void name##_RB_INSERT_COLOR(struct name *, struct type *); \ -void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ -struct type *name##_RB_REMOVE(struct name *, struct type *); \ -struct type *name##_RB_INSERT(struct name *, struct type *); \ -struct type *name##_RB_FIND(struct name *, struct type *); \ -struct type *name##_RB_NEXT(struct type *); \ -struct type *name##_RB_MINMAX(struct name *, int); \ - \ - -/* Main rb operation. - * Moves node close to the key of elm to top - */ -#define RB_GENERATE(name, type, field, cmp) \ -void \ -name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ -{ \ - struct type *parent, *gparent, *tmp; \ - while ((parent = RB_PARENT(elm, field)) && \ - RB_COLOR(parent, field) == RB_RED) { \ - gparent = RB_PARENT(parent, field); \ - if (parent == RB_LEFT(gparent, field)) { \ - tmp = RB_RIGHT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field);\ - elm = gparent; \ - continue; \ - } \ - if (RB_RIGHT(parent, field) == elm) { \ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_RIGHT(head, gparent, tmp, field); \ - } else { \ - tmp = RB_LEFT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field);\ - elm = gparent; \ - continue; \ - } \ - if (RB_LEFT(parent, field) == elm) { \ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_LEFT(head, gparent, tmp, field); \ - } \ - } \ - RB_COLOR(head->rbh_root, field) = RB_BLACK; \ -} \ - \ -void \ -name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \ -{ \ - struct type *tmp; \ - while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ - elm != RB_ROOT(head)) { \ - if (RB_LEFT(parent, field) == elm) { \ - tmp = RB_RIGHT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - tmp = RB_RIGHT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\ - struct type *oleft; \ - if ((oleft = RB_LEFT(tmp, field)))\ - RB_COLOR(oleft, field) = RB_BLACK;\ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_RIGHT(head, tmp, oleft, field);\ - tmp = RB_RIGHT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_RIGHT(tmp, field)) \ - RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - elm = RB_ROOT(head); \ - break; \ - } \ - } else { \ - tmp = RB_LEFT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - tmp = RB_LEFT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\ - struct type *oright; \ - if ((oright = RB_RIGHT(tmp, field)))\ - RB_COLOR(oright, field) = RB_BLACK;\ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_LEFT(head, tmp, oright, field);\ - tmp = RB_LEFT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_LEFT(tmp, field)) \ - RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - elm = RB_ROOT(head); \ - break; \ - } \ - } \ - } \ - if (elm) \ - RB_COLOR(elm, field) = RB_BLACK; \ -} \ - \ -struct type * \ -name##_RB_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *child, *parent, *old = elm; \ - int color; \ - if (RB_LEFT(elm, field) == NULL) \ - child = RB_RIGHT(elm, field); \ - else if (RB_RIGHT(elm, field) == NULL) \ - child = RB_LEFT(elm, field); \ - else { \ - struct type *left; \ - elm = RB_RIGHT(elm, field); \ - while ((left = RB_LEFT(elm, field))) \ - elm = left; \ - child = RB_RIGHT(elm, field); \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ - if (RB_PARENT(elm, field) == old) \ - parent = elm; \ - (elm)->field = (old)->field; \ - if (RB_PARENT(old, field)) { \ - if (RB_LEFT(RB_PARENT(old, field), field) == old)\ - RB_LEFT(RB_PARENT(old, field), field) = elm;\ - else \ - RB_RIGHT(RB_PARENT(old, field), field) = elm;\ - RB_AUGMENT(RB_PARENT(old, field)); \ - } else \ - RB_ROOT(head) = elm; \ - RB_PARENT(RB_LEFT(old, field), field) = elm; \ - if (RB_RIGHT(old, field)) \ - RB_PARENT(RB_RIGHT(old, field), field) = elm; \ - if (parent) { \ - left = parent; \ - do { \ - RB_AUGMENT(left); \ - } while ((left = RB_PARENT(left, field))); \ - } \ - goto color; \ - } \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ -color: \ - if (color == RB_BLACK) \ - name##_RB_REMOVE_COLOR(head, parent, child); \ - return (old); \ -} \ - \ -/* Inserts a node into the RB tree */ \ -struct type * \ -name##_RB_INSERT(struct name *head, struct type *elm) \ -{ \ - struct type *tmp; \ - struct type *parent = NULL; \ - int comp = 0; \ - tmp = RB_ROOT(head); \ - while (tmp) { \ - parent = tmp; \ - comp = (cmp)(elm, parent); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - RB_SET(elm, parent, field); \ - if (parent != NULL) { \ - if (comp < 0) \ - RB_LEFT(parent, field) = elm; \ - else \ - RB_RIGHT(parent, field) = elm; \ - RB_AUGMENT(parent); \ - } else \ - { \ - RB_ROOT(head) = elm; \ - } \ - name##_RB_INSERT_COLOR(head, elm); \ - return (NULL); \ -} \ - \ -/* Finds the node with the same key as elm */ \ -struct type * \ -name##_RB_FIND(struct name *head, struct type *elm) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - int comp; \ - while (tmp) { \ - comp = cmp(elm, tmp); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - return (NULL); \ -} \ - \ -struct type * \ -name##_RB_NEXT(struct type *elm) \ -{ \ - if (RB_RIGHT(elm, field)) { \ - elm = RB_RIGHT(elm, field); \ - while (RB_LEFT(elm, field)) \ - elm = RB_LEFT(elm, field); \ - } else { \ - if (RB_PARENT(elm, field) && \ - (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - else { \ - while (RB_PARENT(elm, field) && \ - (elm == RB_RIGHT(RB_PARENT(elm, field), field)))\ - elm = RB_PARENT(elm, field); \ - elm = RB_PARENT(elm, field); \ - } \ - } \ - return (elm); \ -} \ - \ -struct type * \ -name##_RB_MINMAX(struct name *head, int val) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - struct type *parent = NULL; \ - while (tmp) { \ - parent = tmp; \ - if (val < 0) \ - tmp = RB_LEFT(tmp, field); \ - else \ - tmp = RB_RIGHT(tmp, field); \ - } \ - return (parent); \ -} - -#define RB_NEGINF -1 -#define RB_INF 1 - -#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) -#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) -#define RB_FIND(name, x, y) name##_RB_FIND(x, y) -#define RB_NEXT(name, x, y) name##_RB_NEXT(y) -#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) -#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) - -#define RB_FOREACH(x, name, head) \ - for ((x) = RB_MIN(name, head); \ - (x) != NULL; \ - (x) = name##_RB_NEXT(x)) - -#endif /* _SYS_TREE_H_ */ diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwError.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwError.h deleted file mode 100644 index 6389bedcb2..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwError.h +++ /dev/null @@ -1,66 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_ERROR_H__ -#define __NW_ERROR_H__ - -/** - * @file NwError.h - * @brief This header file contains return error code type definitions. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - - NW_OK = 0x00000000, - NW_GTPV2C_IE_MISSING, - NW_GTPV2C_IE_INCORRECT, - NW_GTPV2C_MANDATORY_IE_DUPLICATE, - NW_GTPV2C_CONDITIONAL_IE_MISSING, - NW_GTPV2C_MANDATORY_IE_MISSING, - NW_GTPV2C_MSG_MALFORMED, - NW_FAILURE = 0xFFFFFFFE -} -NwRcT; - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_ERROR_CODE_H__ */ - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h deleted file mode 100644 index e3178fb11b..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h +++ /dev/null @@ -1,576 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_H__ -#define __NW_GTPV2C_H__ - -#include -#include -#include -#include "NwTypes.h" -#include "NwError.h" - -/** @mainpage - - @section intro Introduction - - nw-gtpv2c library is a free and open source control plane implementation of GPRS - Tunneling protocol v2 also known as eGTPc as per 3GPP TS29274-930. - The library is published under BSD three clause license. - - @section scope Scope - - The stack library also does basic tasks like packet/header validation, - retransmission and message parsing. - - @section design Design Philosophy - - The stack is fully-asynchronous in design for compatibility with event loop - mechanisms such as select, poll, etc. and can also be used for multi-threaded - applications. It should compile on Linux, *BSD, Mac OS X, Solaris and Windows - (cygwin). - - The stack is designed for high portability not only for the hardware and OS it will - run on but also for the application software that uses it. The stack doesn't mandate - conditions on the user application architecture or design. The stack relies on - the user application for infrastructure utilities such as I/O, timers, - logs and multithreading. This realized by using callback mechanisms and enables the - stack library to seamlessly integrate without or very little changes to the existing - application framework. - - The stack architecture builds upon following mentioned entities that are external to it. - - User Layer Protocol (ULP) Entity: - This layer implements the intelligent logic for the application and sits on top of the - stack. - - UDP Entity: - This is the layer below the stack and is responsible for UDP I/O with the stack and network. - It may or may not be housed in ULP. - - Timer Manager Entity: - Timer Manager Entity provides the stack with infrastructure for timer CRUD operations. - - Log Manager Entity: - Log Manager Entity provides the stack with callbacks for logging operations. It may - or may not be housed in ULP. - - The application may implement all above entities as a single or multiple object. - - @section applications Applications and Usage - - Please refer sample applications under 'test-app' directory for usage examples. - - */ - -/** - * @file NwGtpv2c.h - * @author Amit Chawre - * @brief - * - * This header file contains all required definitions and functions - * prototypes for using nw-gtpv2c library. - * - **/ - -/*--------------------------------------------------------------------------* - * S T A C K H A N D L E D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -typedef NwPtrT NwGtpv2cStackHandleT; /**< Gtpv2c Stack Handle */ -typedef NwPtrT NwGtpv2cUlpHandleT; /**< Gtpv2c Stack Ulp Entity Handle */ -typedef NwPtrT NwGtpv2cUdpHandleT; /**< Gtpv2c Stack Udp Entity Handle */ -typedef NwPtrT NwGtpv2cTimerMgrHandleT; /**< Gtpv2c Stack Timer Manager Handle */ -typedef NwPtrT NwGtpv2cMemMgrHandleT; /**< Gtpv2c Stack Memory Manager Handle */ -typedef NwPtrT NwGtpv2cLogMgrHandleT; /**< Gtpv2c Stack Log Manager Handle */ -typedef NwPtrT NwGtpv2cTimerHandleT; /**< Gtpv2c Stack Timer Handle */ -typedef NwPtrT NwGtpv2cMsgHandleT; /**< Gtpv2c Msg Handle */ -typedef NwPtrT NwGtpv2cTrxnHandleT; /**< Gtpv2c Transaction Handle */ -typedef NwPtrT NwGtpv2cTunnelHandleT; /**< Gtpv2c Ulp Tunnel Handle */ -typedef NwPtrT NwGtpv2cUlpTrxnHandleT; /**< Gtpv2c Ulp Transaction Handle */ -typedef NwPtrT NwGtpv2cUlpTunnelHandleT; /**< Gtpv2c Ulp Tunnel Handle */ - -typedef uint8_t NwGtpv2cMsgTypeT; /**< Gtpv2c Msg Type */ - -typedef struct NwGtpv2cStackConfigS { - uint16_t __tbd; -} NwGtpv2cStackConfigT; - -/*--------------------------------------------------------------------------* - * S T A C K A P I D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -#define NW_GTPV2C_ULP_API_FLAG_NONE (0x00 << 24) -#define NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL (0x01 << 24) -#define NW_GTPV2C_ULP_API_FLAG_DELETE_LOCAL_TUNNEL (0x02 << 24) -#define NW_GTPV2C_ULP_API_FLAG_IS_COMMAND_MESSAGE (0x03 << 24) - -/*--------------------------------------------------------------------------- - * Gtpv2c Stack ULP API type definitions - *--------------------------------------------------------------------------*/ - -/** - * APIs types between ULP and Stack - */ - -typedef enum { - /* APIs from ULP to stack */ - - NW_GTPV2C_ULP_API_INITIAL_REQ = 0x00000000, /**< Send a initial message */ - NW_GTPV2C_ULP_API_TRIGGERED_REQ, /**< Send a triggered req message */ - NW_GTPV2C_ULP_API_TRIGGERED_RSP, /**< Send a triggered rsp message */ - - /* APIs from stack to ULP */ - - NW_GTPV2C_ULP_API_INITIAL_REQ_IND, /**< Receive a initial message from stack */ - NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND, /**< Recieve a triggered rsp message from stack */ - NW_GTPV2C_ULP_API_TRIGGERED_REQ_IND, /**< Recieve a triggered req message from stack */ - NW_GTPV2C_ULP_API_RSP_FAILURE_IND, /**< Rsp failure for gtpv2 message from stack */ - - /* Local tunnel management APIs from ULP to stack */ - - NW_GTPV2C_ULP_CREATE_LOCAL_TUNNEL, /**< Create a local tunnel */ - NW_GTPV2C_ULP_DELETE_LOCAL_TUNNEL, /**< Delete a local tunnel */ - - /* Do not add below this */ - NW_GTPV2C_ULP_API_END = 0xFFFFFFFF, - -} NwGtpv2cUlpApiTypeT; - -/** - * Error information of incoming GTP messages - */ - -typedef struct NwGtpv2cErrorS { - NW_IN uint8_t cause; - NW_IN uint8_t flags; - struct { - NW_IN uint8_t type; - NW_IN uint8_t instance; - } offendingIe; -} NwGtpv2cErrorT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c initial message. - */ - -typedef struct { - NW_INOUT NwGtpv2cTunnelHandleT hTunnel; /**< Tunnel handle over which the mesasge is to be sent.*/ - NW_IN uint16_t t3Timer; - NW_IN uint16_t maxRetries; - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; /**< Optional handle to be returned in rsp of this msg. */ - - NW_IN uint32_t peerIp; /**< Required only in case when hTunnel == 0 */ - NW_IN uint32_t teidLocal; /**< Required only in case when hTunnel == 0 */ - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only in case when hTunnel == 0 */ -} NwGtpv2cInitialReqInfoT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c triggered request message. - */ - -typedef struct { - NW_IN NwGtpv2cTunnelHandleT hTunnel; /**< Tunnel handle over which the mesasge is to be sent */ - NW_IN NwGtpv2cTrxnHandleT hTrxn; /**< Request Trxn handle which to which triggered req is being sent */ - NW_IN uint16_t t3Timer; - NW_IN uint16_t maxRetries; - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; /**< Optional handle to be returned in rsp of this msg. */ - NW_IN uint32_t peerIp; /**< Required only in case when hTunnel == 0 */ - NW_IN uint32_t teidLocal; /**< Required only in case when hTunnel == 0 */ - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only in case when hTunnel == 0 */ - -} NwGtpv2cTriggeredReqInfoT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c triggered response message. - */ - -typedef struct { - NW_IN NwGtpv2cTrxnHandleT hTrxn; /**< Request Trxn handle which to which triggered rsp is being sent */ - NW_IN uint32_t teidLocal; /**< Required only if NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL is set to flags. */ - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only if NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL is set to flags. */ - - NW_OUT NwGtpv2cTunnelHandleT hTunnel; /**< Returned only in case flags is set to - NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL */ -} NwGtpv2cTriggeredRspInfoT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c initial message. - */ - -typedef struct { - NW_IN NwGtpv2cErrorT error; - NW_IN NwGtpv2cTrxnHandleT hTrxn; - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; - NW_IN NwGtpv2cMsgTypeT msgType; - NW_IN uint32_t peerIp; - NW_IN uint32_t peerPort; - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; - NW_INOUT NwGtpv2cTunnelHandleT hTunnel; -} NwGtpv2cInitialReqIndInfoT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c triggered request message. - */ - -typedef struct { - NW_IN NwGtpv2cErrorT error; - NW_IN NwGtpv2cTrxnHandleT hTrxn; - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; - NW_IN NwGtpv2cMsgTypeT msgType; - NW_IN uint32_t seqNum; - NW_IN uint32_t teidLocal; - NW_IN uint32_t teidRemote; - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; -} NwGtpv2cTriggeredReqIndInfoT; - -/** - * API information elements between ULP and Stack for - * sending a Gtpv2c triggered response message. - */ - -typedef struct { - NW_IN NwGtpv2cErrorT error; - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; - NW_IN NwGtpv2cMsgTypeT msgType; -} NwGtpv2cTriggeredRspIndInfoT; - -/** - * API information elements between ULP and Stack for - * receving a path failure indication from stack. - */ - -typedef struct { - NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; -} NwGtpv2cRspFailureIndInfoT; - -/** - * API information elements between ULP and Stack for - * creating local tunnel. - */ - -typedef struct { - NW_OUT NwGtpv2cTunnelHandleT hTunnel; - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; - NW_IN uint32_t teidLocal; - NW_IN uint32_t peerIp; -} NwGtpv2cCreateLocalTunnelInfoT; - - -/** - * API information elements between ULP and Stack for - * deleting a local tunnel. - */ - -typedef struct { - NW_IN NwGtpv2cTunnelHandleT hTunnel; -} NwGtpv2cDeleteLocalTunnelInfoT; - - -/** - * API container structure between ULP and Stack. - */ - -typedef struct { - NwGtpv2cUlpApiTypeT apiType; /**< First bytes of this field is used as flag holder */ - NwGtpv2cMsgHandleT hMsg; /**< Handle associated with this API */ - union { - NwGtpv2cInitialReqInfoT initialReqInfo; - NwGtpv2cTriggeredRspInfoT triggeredRspInfo; - NwGtpv2cTriggeredReqInfoT triggeredReqInfo; - NwGtpv2cInitialReqIndInfoT initialReqIndInfo; - NwGtpv2cTriggeredRspIndInfoT triggeredRspIndInfo; - NwGtpv2cTriggeredReqIndInfoT triggeredReqIndInfo; - NwGtpv2cRspFailureIndInfoT rspFailureInfo; - NwGtpv2cCreateLocalTunnelInfoT createLocalTunnelInfo; - NwGtpv2cDeleteLocalTunnelInfoT deleteLocalTunnelInfo; - } apiInfo; -} NwGtpv2cUlpApiT; - - -/*--------------------------------------------------------------------------* - * S T A C K E N T I T I E S D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -/** - * Gtpv2c ULP entity definition - */ - -typedef struct { - NwGtpv2cUlpHandleT hUlp; - NwRcT (*ulpReqCallback) ( NW_IN NwGtpv2cUlpHandleT hUlp, - NW_IN NwGtpv2cUlpApiT *pUlpApi); -} NwGtpv2cUlpEntityT; - - -/** - * Gtpv2c UDP entity definition - */ - -typedef struct { - NwGtpv2cUdpHandleT hUdp; - NwRcT (*udpDataReqCallback) ( NW_IN NwGtpv2cUdpHandleT udpHandle, - NW_IN uint8_t* dataBuf, - NW_IN uint32_t dataSize, - NW_IN uint32_t peerIp, - NW_IN uint32_t peerPort); -} NwGtpv2cUdpEntityT; - -/** - * Gtpv2c Memory Manager entity definition - */ - -typedef struct { - NwGtpv2cMemMgrHandleT hMemMgr; - void* (*memAlloc)( NW_IN NwGtpv2cMemMgrHandleT hMemMgr, - NW_IN uint32_t memSize, - NW_IN NwCharT* fileName, - NW_IN uint32_t lineNumber); - - void (*memFree) ( NW_IN NwGtpv2cMemMgrHandleT hMemMgr, - NW_IN void* hMem, - NW_IN NwCharT* fileName, - NW_IN uint32_t lineNumber); -} NwGtpv2cMemMgrEntityT; - - -#define NW_GTPV2C_TMR_TYPE_ONE_SHOT (0) -#define NW_GTPV2C_TMR_TYPE_REPETITIVE (1) -/** - * Gtpv2c Timer Manager entity definition - */ - -typedef struct { - NwGtpv2cTimerMgrHandleT tmrMgrHandle; - NwRcT (*tmrStartCallback)( NW_IN NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NW_IN uint32_t timeoutSec, - NW_IN uint32_t timeoutUsec, - NW_IN uint32_t tmrType, - NW_IN void* tmrArg, - NW_OUT NwGtpv2cTimerHandleT* tmrHandle); - - NwRcT (*tmrStopCallback) ( NW_IN NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NW_IN NwGtpv2cTimerHandleT tmrHandle); -} NwGtpv2cTimerMgrEntityT; - -/** - * Gtpv2c Log manager entity definition - */ - -typedef struct { - NwGtpv2cLogMgrHandleT logMgrHandle; - NwRcT (*logReqCallback) (NW_IN NwGtpv2cLogMgrHandleT logMgrHandle, - NW_IN uint32_t logLevel, - NW_IN NwCharT* filename, - NW_IN uint32_t line, - NW_IN NwCharT* logStr); -} NwGtpv2cLogMgrEntityT; - - -/*--------------------------------------------------------------------------* - * P U B L I C F U N C T I O N S * - *--------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - Constructor. Initialize nw-gtpv2c stack instance. - - @param[in,out] phGtpcStackHandle : Pointer to stack instance handle - */ - -NwRcT -nwGtpv2cInitialize( NW_INOUT NwGtpv2cStackHandleT* phGtpcStackHandle); - -/** - Destructor. Destroy nw-gtpv2c stack instance . - - @param[in] hGtpcStackHandle : Stack instance handle - */ - -NwRcT -nwGtpv2cFinalize( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle); - -/** - Set Configuration for the nw-gtpv2c stack. - - @param[in,out] phGtpcStackHandle : Pointer to stack handle - */ - -NwRcT -nwGtpv2cConfigSet( NW_IN NwGtpv2cStackHandleT* phGtpcStackHandle, NW_IN NwGtpv2cStackConfigT* pConfig); - -/** - Get Configuration for the nw-gtpv2c stack. - - @param[in,out] phGtpcStackHandle : Pointer to stack handle - */ - -NwRcT -nwGtpv2cConfigGet( NW_IN NwGtpv2cStackHandleT* phGtpcStackHandle, NW_OUT NwGtpv2cStackConfigT* pConfig); - -/** - Set ULP entity for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpEntity : Pointer to ULP entity. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetUlpEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUlpEntityT* pUlpEntity); - -/** - Set UDP entity for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUdpEntity : Pointer to UDP entity. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetUdpEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUdpEntityT* pUdpEntity); - -/** - Set MemMgr entity for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pMemMgr : Pointer to Memory Manager. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetMemMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMemMgrEntityT* pMemMgr); - - -/** - Set TmrMgr entity for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pTmrMgr : Pointer to Timer Manager. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetTimerMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cTimerMgrEntityT* pTmrMgr); - -/** - Set LogMgr entity for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pLogMgr : Pointer to Log Manager. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetLogMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cLogMgrEntityT* pLogMgr); - -/** - Set log level for the stack. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] logLevel : Log Level. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint32_t logLevel); - - -/** - Process Data Request from UDP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] udpData : Pointer to received UDP data. - @param[in] udpDataLen : Received data length. - @param[in] dstPort : Received on port. - @param[in] from : Received from peer information. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cProcessUdpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t* udpData, - NW_IN uint32_t udpDataLen, - NW_IN uint16_t peerPort, - NW_IN uint32_t peerIP); - -/** - Process Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pLogMgr : Pointer to Ulp Req. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cProcessUlpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUlpApiT *ulpReq); - - -/** - Process Timer timeout Request from Timer Manager - - @param[in] pLogMgr : Pointer timeout arguments. - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cProcessTimeout( NW_IN void* timeoutArg); - - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_H__ */ - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cIe.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cIe.h deleted file mode 100644 index 2de7e217c7..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cIe.h +++ /dev/null @@ -1,159 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 NwGtpv2cIe.h - * @brief This header file contains Information Element definitions for GTPv2c - * as per 3GPP TS 29274-930. -*/ - -#ifndef __NW_GTPV2C_IE_H__ -#define __NW_GTPV2C_IE_H__ - -/*--------------------------------------------------------------------------* - * G T P V 2 C I E T Y P E M A C R O D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -#define NW_GTPV2C_IE_RESERVED (0) -#define NW_GTPV2C_IE_IMSI (1) -#define NW_GTPV2C_IE_CAUSE (2) -#define NW_GTPV2C_IE_RECOVERY (3) -#define NW_GTPV2C_IE_APN (71) -#define NW_GTPV2C_IE_AMBR (72) -#define NW_GTPV2C_IE_EBI (73) -#define NW_GTPV2C_IE_IP_ADDRESS (74) -#define NW_GTPV2C_IE_MEI (75) -#define NW_GTPV2C_IE_MSISDN (76) -#define NW_GTPV2C_IE_INDICATION (77) -#define NW_GTPV2C_IE_PCO (78) -#define NW_GTPV2C_IE_PAA (79) -#define NW_GTPV2C_IE_BEARER_LEVEL_QOS (80) -#define NW_GTPV2C_IE_FLOW_QOS (81) -#define NW_GTPV2C_IE_RAT_TYPE (82) -#define NW_GTPV2C_IE_SERVING_NETWORK (83) -#define NW_GTPV2C_IE_BEARER_TFT (84) -#define NW_GTPV2C_IE_TAD (85) -#define NW_GTPV2C_IE_ULI (86) -#define NW_GTPV2C_IE_FTEID (87) -#define NW_GTPV2C_IE_TMSI (88) -#define NW_GTPV2C_IE_GLOBAL_CN_ID (89) -#define NW_GTPV2C_IE_S103PDF (90) -#define NW_GTPV2C_IE_S1UDF (91) -#define NW_GTPV2C_IE_DELAY_VALUE (92) -#define NW_GTPV2C_IE_BEARER_CONTEXT (93) -#define NW_GTPV2C_IE_CHARGING_ID (94) -#define NW_GTPV2C_IE_CHARGING_CHARACTERISTICS (95) -#define NW_GTPV2C_IE_TRACE_INFORMATION (96) -#define NW_GTPV2C_IE_BEARER_FLAGS (97) -#define NW_GTPV2C_IE_PDN_TYPE (99) -#define NW_GTPV2C_IE_PROCEDURE_TRANSACTION_ID (100) -#define NW_GTPV2C_IE_DRX_PARAMETER (101) -#define NW_GTPV2C_IE_UE_NETWORK_CAPABILITY (102) -#define NW_GTPV2C_IE_MM_CONTEXT (103) -#define NW_GTPV2C_IE_PDN_CONNECTION (109) -#define NW_GTPV2C_IE_PDU_NUMBERS (110) -#define NW_GTPV2C_IE_PTMSI (111) -#define NW_GTPV2C_IE_PTMSI_SIGNATURE (112) -#define NW_GTPV2C_IE_HOP_COUNTER (113) -#define NW_GTPV2C_IE_UE_TIME_ZONE (114) -#define NW_GTPV2C_IE_TRACE_REFERENCE (115) -#define NW_GTPV2C_IE_COMPLETE_REQUEST_MESSAGE (116) -#define NW_GTPV2C_IE_GUTI (117) -#define NW_GTPV2C_IE_F_CONTAINER (118) -#define NW_GTPV2C_IE_F_CAUSE (119) -#define NW_GTPV2C_IE_SELECTED_PLMN_ID (120) -#define NW_GTPV2C_IE_TARGET_IDENTIFICATION (121) -#define NW_GTPV2C_IE_PACKET_FLOW_ID (123) -#define NW_GTPV2C_IE_RAB_CONTEXT (124) -#define NW_GTPV2C_IE_SOURCE_RNC_PDCP_CONTEXT_INFO (125) -#define NW_GTPV2C_IE_UDP_SOURCE_PORT_NUMBER (126) -#define NW_GTPV2C_IE_APN_RESTRICTION (127) -#define NW_GTPV2C_IE_SELECTION_MODE (128) -#define NW_GTPV2C_IE_SOURCE_IDENTIFICATION (129) -#define NW_GTPV2C_IE_CHANGE_REPORTING_ACTION (131) -#define NW_GTPV2C_IE_FQ_CSID (132) -#define NW_GTPV2C_IE_CHANNEL_NEEDED (133) -#define NW_GTPV2C_IE_EMLPP_PRIORITY (134) -#define NW_GTPV2C_IE_NODE_TYPE (135) -#define NW_GTPV2C_IE_FQDN (136) -#define NW_GTPV2C_IE_TI (137) -#define NW_GTPV2C_IE_MBMS_SESSION_DURATION (138) -#define NW_GTPV2C_IE_MBMS_SERIVCE_AREA (139) -#define NW_GTPV2C_IE_MBMS_SESSION_IDENTIFIER (140) -#define NW_GTPV2C_IE_MBMS_FLOW_IDENTIFIER (141) -#define NW_GTPV2C_IE_MBMS_IP_MULTICAST_DISTRIBUTION (142) -#define NW_GTPV2C_IE_MBMS_IP_DISTRIBUTION_ACK (143) -#define NW_GTPV2C_IE_RFSP_INDEX (144) -#define NW_GTPV2C_IE_UCI (145) -#define NW_GTPV2C_IE_CSG_INFORMATION_REPORTING_ACTION (146) -#define NW_GTPV2C_IE_CSG_ID (147) -#define NW_GTPV2C_IE_CSG_MEMBERSHIP_INDICATION (148) -#define NW_GTPV2C_IE_SERVICE_INDICATOR (149) -#define NW_GTPV2C_IE_LDN (151) -#define NW_GTPV2C_IE_ADDITIONAL_MM_CTXT_FOR_SRVCC (159) -#define NW_GTPV2C_IE_ADDITIONAL_FLAGS_FOR_SRVCC (160) -#define NW_GTPV2C_IE_PRIVATE_EXTENSION (255) -#define NW_GTPV2C_IE_TYPE_MAXIMUM (256) - - -/*--------------------------------------------------------------------------* - * G T P V 2 C C A U S E V A L U E D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -#define NW_GTPV2C_CAUSE_REQUEST_ACCEPTED (16) -#define NW_GTPV2C_CAUSE_INVALID_LENGTH (67) -#define NW_GTPV2C_CAUSE_MANDATORY_IE_INCORRECT (69) -#define NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING (70) -#define NW_GTPV2C_CAUSE_SYSTEM_FAILURE (72) -#define NW_GTPV2C_CAUSE_REQUEST_REJECTED (94) -#define NW_GTPV2C_CAUSE_REMOTE_PEER_NOT_RESPONDING (100) -#define NW_GTPV2C_CAUSE_CONDITIONAL_IE_MISSING (103) - -#define NW_GTPV2C_IE_INSTANCE_ZERO (0) -#define NW_GTPV2C_IE_INSTANCE_ONE (1) -#define NW_GTPV2C_IE_INSTANCE_TWO (2) -#define NW_GTPV2C_IE_INSTANCE_THREE (3) -#define NW_GTPV2C_IE_INSTANCE_FOUR (4) -#define NW_GTPV2C_IE_INSTANCE_MAXIMUM (NW_GTPV2C_IE_INSTANCE_FOUR) - -#define NW_GTPV2C_IE_PRESENCE_MANDATORY (1) -#define NW_GTPV2C_IE_PRESENCE_CONDITIONAL (2) -#define NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL (3) -#define NW_GTPV2C_IE_PRESENCE_OPTIONAL (4) - -#endif /* __NW_GTPV2C_IE_H__ */ - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h deleted file mode 100644 index 7c7476383b..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h +++ /dev/null @@ -1,626 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_GTPV2C_MSG_H__ -#define __NW_GTPV2C_MSG_H__ - -#include "NwTypes.h" -#include "NwGtpv2c.h" - -/** - * @file NwGtpv2cMsg.h - * @brief This file defines APIs for to build new outgoing gtpv2c messages and to parse incoming messages. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*--------------------------------------------------------------------------* - * S H A R E D A P I M A C R O S * - *--------------------------------------------------------------------------*/ - - -#define NW_GTP_VERSION (0x02) /**< GTP Version */ -#define NW_GTPV2C_MINIMUM_HEADER_SIZE (8) /**< Size of GTPv2c minimun header */ -#define NW_GTPV2C_EPC_SPECIFIC_HEADER_SIZE (12) /**< Size of GTPv2c EPC specific header */ - -/* GTP Message Type Values */ -#define NW_GTP_ECHO_REQ (1) -#define NW_GTP_ECHO_RSP (2) -#define NW_GTP_VERSION_NOT_SUPPORTED_IND (3) -#define NW_GTP_CREATE_SESSION_REQ (32) -#define NW_GTP_CREATE_SESSION_RSP (33) -#define NW_GTP_MODIFY_BEARER_REQ (34) -#define NW_GTP_MODIFY_BEARER_RSP (35) -#define NW_GTP_DELETE_SESSION_REQ (36) -#define NW_GTP_DELETE_SESSION_RSP (37) -#define NW_GTP_MODIFY_BEARER_CMD (64) -#define NW_GTP_MODIFY_BEARER_FAILURE_IND (65) -#define NW_GTP_DELETE_BEARER_CMD (66) -#define NW_GTP_DELETE_BEARER_FAILURE_IND (67) -#define NW_GTP_BEARER_RESOURCE_CMD (68) -#define NW_GTP_BEARER_RESOURCE_FAILURE_IND (69) -#define NW_GTP_DOWNLINK_DATA_NOTIFICATION_FAILURE_IND (70) -#define NW_GTP_TRACE_SESSION_ACTIVATION (71) -#define NW_GTP_TRACE_SESSION_DEACTIVATION (72) -#define NW_GTP_STOP_PAGING_IND (73) -#define NW_GTP_CREATE_BEARER_REQ (95) -#define NW_GTP_CREATE_BEARER_RSP (96) -#define NW_GTP_UPDATE_BEARER_REQ (97) -#define NW_GTP_UPDATE_BEARER_RSP (98) -#define NW_GTP_DELETE_BEARER_REQ (99) -#define NW_GTP_DELETE_BEARER_RSP (100) -#define NW_GTP_DELETE_PDN_CONNECTION_SET_REQ (101) -#define NW_GTP_DELETE_PDN_CONNECTION_SET_RSP (102) -#define NW_GTP_IDENTIFICATION_REQ (128) -#define NW_GTP_IDENTIFICATION_RSP (129) -#define NW_GTP_CONTEXT_REQ (130) -#define NW_GTP_CONTEXT_RSP (131) -#define NW_GTP_CONTEXT_ACK (132) -#define NW_GTP_FORWARD_RELOCATION_REQ (133) -#define NW_GTP_FORWARD_RELOCATION_RSP (134) -#define NW_GTP_FORWARD_RELOCATION_COMPLETE_NTF (135) -#define NW_GTP_FORWARD_RELOCATION_COMPLETE_ACK (136) -#define NW_GTP_FORWARD_ACCESS_CONTEXT_NTF (137) -#define NW_GTP_FORWARD_ACCESS_CONTEXT_ACK (138) -#define NW_GTP_RELOCATION_CANCEL_REQ (139) -#define NW_GTP_RELOCATION_CANCEL_RSP (140) -#define NW_GTP_CONFIGURE_TRANSFER_TUNNEL (141) -#define NW_GTP_DETACH_NTF (149) -#define NW_GTP_DETACH_ACK (150) -#define NW_GTP_CS_PAGING_INDICATION (151) -#define NW_GTP_RAN_INFORMATION_RELAY (152) -#define NW_GTP_ALERT_MME_NTF (153) -#define NW_GTP_ALERT_MME_ACK (154) -#define NW_GTP_UE_ACTIVITY_NTF (155) -#define NW_GTP_UE_ACTIVITY_ACK (156) -#define NW_GTP_CREATE_FORWARDING_TUNNEL_REQ (160) -#define NW_GTP_CREATE_FORWARDING_TUNNEL_RSP (161) -#define NW_GTP_SUSPEND_NTF (162) -#define NW_GTP_SUSPEND_ACK (163) -#define NW_GTP_RESUME_NTF (164) -#define NW_GTP_RESUME_ACK (165) -#define NW_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQ (166) -#define NW_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RSP (167) -#define NW_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQ (168) -#define NW_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RSP (169) -#define NW_GTP_RELEASE_ACCESS_BEARERS_REQ (170) -#define NW_GTP_RELEASE_ACCESS_BEARERS_RSP (171) -#define NW_GTP_DOWNLINK_DATA_NOTIFICATION (176) -#define NW_GTP_DOWNLINK_DATA_NOTIFICATION_ACK (177) -#define NW_GTP_RESERVED (178) -#define NW_GTP_UPDATE_PDN_CONNECTION_SET_REQ (200) -#define NW_GTP_UPDATE_PDN_CONNECTION_SET_RSP (201) -#define NW_GTP_MBMS_SESSION_START_REQ (231) -#define NW_GTP_MBMS_SESSION_START_RSP (232) -#define NW_GTP_MBMS_SESSION_UPDATE_REQ (233) -#define NW_GTP_MBMS_SESSION_UPDATE_RSP (234) -#define NW_GTP_MBMS_SESSION_STOP_REQ (235) -#define NW_GTP_MBMS_SESSION_STOP_RSP (236) -#define NW_GTP_MSG_END (255) - - -/* Cause Values */ -#define NW_GTPV2C_CAUSE_BIT_NONE (0x00) -#define NW_GTPV2C_CAUSE_BIT_CS (0x01) -#define NW_GTPV2C_CAUSE_BIT_BCE (0x02) -#define NW_GTPV2C_CAUSE_BIT_PCE (0x04) - -/* RAT Type Values */ -#define NW_RAT_TYPE_EUTRAN (0x06) - -/* PDN Type Values */ -#define NW_PDN_TYPE_IPv4 (0x01) -#define NW_PDN_TYPE_IPv6 (0x02) -#define NW_PDN_TYPE_IPv4IPv6 (0x03) - -/* Interface Type Values */ -#define NW_GTPV2C_IFTYPE_S1U_ENODEB_GTPU (0) -#define NW_GTPV2C_IFTYPE_S1U_SGW_GTPU (1) -#define NW_GTPV2C_IFTYPE_S12_RNC_GTPU (2) -#define NW_GTPV2C_IFTYPE_S12_SGW_GTPU (3) -#define NW_GTPV2C_IFTYPE_S5S8_SGW_GTPU (4) -#define NW_GTPV2C_IFTYPE_S5S8_PGW_GTPU (5) -#define NW_GTPV2C_IFTYPE_S5S8_SGW_GTPC (6) -#define NW_GTPV2C_IFTYPE_S5S8_PGW_GTPC (7) -#define NW_GTPV2C_IFTYPE_S5S8_SGW_PIMPv6 (8) -#define NW_GTPV2C_IFTYPE_S5S8_PGW_PIMPv6 (9) -#define NW_GTPV2C_IFTYPE_S11_MME_GTPC (10) -#define NW_GTPV2C_IFTYPE_S11S4_SGW_GTPC (11) - -/* Indication Flag Values */ -#define NW_GTPV2C_INDICATION_FLAG_NONE (0x0000) -#define NW_GTPV2C_INDICATION_FLAG_DAF (0x8000) -#define NW_GTPV2C_INDICATION_FLAG_DTF (0x4000) -#define NW_GTPV2C_INDICATION_FLAG_HI (0x2000) -#define NW_GTPV2C_INDICATION_FLAG_DFI (0x1000) -#define NW_GTPV2C_INDICATION_FLAG_OI (0x0800) -#define NW_GTPV2C_INDICATION_FLAG_ISRSI (0x0400) -#define NW_GTPV2C_INDICATION_FLAG_ISRAI (0x0200) -#define NW_GTPV2C_INDICATION_FLAG_SGWCI (0x0100) - -#define NW_GTPV2C_INDICATION_FLAG_SPARE (0x0080) -#define NW_GTPV2C_INDICATION_FLAG_UMSI (0x0040) -#define NW_GTPV2C_INDICATION_FLAG_CSFI (0x0020) -#define NW_GTPV2C_INDICATION_FLAG_CRSI (0x0010) -#define NW_GTPV2C_INDICATION_FLAG_PS (0x0008) -#define NW_GTPV2C_INDICATION_FLAG_PT (0x0004) -#define NW_GTPV2C_INDICATION_FLAG_SI (0x0002) -#define NW_GTPV2C_INDICATION_FLAG_MSV (0x0001) - -/*--------------------------------------------------------------------------* - * G T P V 2 C I E D A T A - T Y P E D E F I N I T I O N S * - *--------------------------------------------------------------------------*/ - -#pragma pack(1) - -typedef struct NwGtpv2cIeTv1 { - uint8_t t; - uint16_t l; - uint8_t i; - uint8_t v; -} NwGtpv2cIeTv1T; - -typedef struct NwGtpv2cIeTv2 { - uint8_t t; - uint16_t l; - uint8_t i; - uint16_t v; -} NwGtpv2cIeTv2T; - -typedef struct NwGtpv2cIeTv4 { - uint8_t t; - uint16_t l; - uint8_t i; - uint32_t v; -} NwGtpv2cIeTv4T; - -typedef struct NwGtpv2cIeTv8 { - uint8_t t; - uint16_t l; - uint8_t i; - uint64_t v; -} NwGtpv2cIeTv8T; - -typedef struct NwGtpv2cIeTlv { - uint8_t t; - uint16_t l; - uint8_t i; -} NwGtpv2cIeTlvT; - -#pragma pack() - - -/** - * Allocate a gtpv2c message. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] teidPresent : TEID is present flag. - * @param[in] msgType : Message type for this message. - * @param[in] teid : TEID for this message. - * @param[in] seqNum : Sequence number for this message. - * @param[out] phMsg : Pointer to message handle. - */ - -NwRcT -nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t teidPresent, - NW_IN uint8_t msgType, - NW_IN uint32_t teid, - NW_IN uint32_t seqNum, - NW_OUT NwGtpv2cMsgHandleT *phMsg); - - -/** - * Allocate a gtpv2c message from data buffer. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] pBuf: Buffer to be copied in this message. - * @param[in] bufLen: Buffer length to be copied in this message. - * @param[out] phMsg : Pointer to message handle. - */ - -NwRcT -nwGtpv2cMsgFromBufferNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t* pBuf, - NW_IN uint32_t bufLen, - NW_OUT NwGtpv2cMsgHandleT *phMsg); - -/** - * Free a gtpv2c message. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] hMsg : Message handle. - */ - -NwRcT -nwGtpv2cMsgDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Set TEID for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] teid: TEID value. - */ - -NwRcT -nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t teid); - -/** - * Set TEID present flag for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] teidPesent: Flag boolean value. - */ - -NwRcT -nwGtpv2cMsgSetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwBoolT teidPresent); - -/** - * Set sequence for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] seqNum: Flag boolean value. - */ - -NwRcT -nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t seqNum); - -/** - * Get TEID present for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetTeid(NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Get TEID present for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -NwBoolT -nwGtpv2cMsgGetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Get sequence number for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Get msg lenght for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Add a gtpv2c information element of length 1 to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE type. - * @param[in] instance : IE instance. - * @param[in] value : IE value. - */ - -NwRcT -nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint8_t value); - - -/** - * Add a gtpv2c information element of length 2 to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE type. - * @param[in] instance : IE instance. - * @param[in] value : IE value. - */ - -NwRcT -nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint16_t value); - - -/** - * Add a gtpv2c information element of length 4 to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE type. - * @param[in] instance : IE instance. - * @param[in] value : IE value. - */ - -NwRcT -nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint32_t value); - - -/** - * Add a gtpv2c information element of variable length to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE type. - * @param[in] length : IE length. - * @param[in] instance : IE instance. - * @param[in] value : IE value. - */ - -NwRcT -nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint16_t length, - NW_IN uint8_t instance, - NW_IN uint8_t* pVal); - -/** - * Add CAUSE information element to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] instance : IE instance. - * @param[in] causeValue: Cause value. - * @param[in] bitFlags: PDN Connetiion IE Error Flag, Bearer Context IE Error Flag, Cause Source Flag. - * @param[in] offendingIeType: Offending IE type. - * @param[in] offendingIeInstance: Offending IE instance. - */ - -NwRcT -nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_IN uint8_t causeValue, - NW_IN uint8_t bitFlags, - NW_IN uint8_t offendingIeType, - NW_IN uint8_t offendingIeInstance); - -/** - * Add F-TEID information element to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] instance : IE instance. - * @param[in] ifType : Interface Type. - * @param[in] teidOrGreKey: TEID/ GRE Key - * @param[in] ipv4Addr : Ipv4 Address in Network Byte Order. - * @param[in] pIpv6Addr: Pointer to IPv6 Address in Network Byte Order. - */ - -NwRcT -nwGtpv2cMsgAddIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_IN uint8_t ifType, - NW_IN uint32_t teidOrGreKey, - NW_IN uint32_t ipv4Addr, - NW_IN uint8_t* pIpv6Addr); - -NwRcT -nwGtpv2cMsgGroupedIeStart(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance); - -NwRcT -nwGtpv2cMsgGroupedIeEnd(NW_IN NwGtpv2cMsgHandleT hMsg); - - -/** - * Check if information element of type and instance is present - * in gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE Type. - * @param[in] instance : IE instance. - * @return NW_TRUE on success, NW_FALSE on failure. - */ - -NwBoolT -nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance); - -/** - * Get an information element of type 'uint8_t' from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] type : IE Type. - * @param[in] instance : IE instance. - * @param[out] pVal : Pointer to value buffer. - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint8_t* pVal); - -/** - * Get an information element of type 'uint16_t' from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] tyep : IE Type. - * @param[in] instance : IE instance. - * @param[out] pVal : Pointer to value buffer. - * @return NW_OK on success. - */ - - -NwRcT -nwGtpv2cMsgGetIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint16_t* pVal); - -/** - * Get an information element of type 'uint32_t' from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] tyep : IE Type. - * @param[in] instance : IE instance. - * @param[out] pVal : Pointer to value buffer. - * @return NW_OK on success. - */ - - -NwRcT -nwGtpv2cMsgGetIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint32_t* pVal); - -/** - * Get an information element of type 'uint64_t' from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] tyep : IE Type. - * @param[in] instance : IE instance. - * @param[out] pVal : Pointer to IE value buffer. - * @return NW_OK on success. - */ - - -NwRcT -nwGtpv2cMsgGetIeTV8(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint64_t* pVal); - -/** - * Get an information element of variable length from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] tyep : IE Type. - * @param[in] instance : IE instance. - * @param[in] maxLen : Maximum length of IE. - * @param[out] pVal : Pointer to IE value buffer. - * @param[out] pLen : Pointer to IE length buffer. - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cMsgGetIeTlv(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint16_t maxLen, - NW_OUT uint8_t* pVal, - NW_OUT uint16_t* pLen); - -/** - * Get an information element of variable length from gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] tyep : IE Type. - * @param[in] instance : IE instance. - * @param[out] ppVal : Pointer to IE value buffer pointer. - * @param[out] pLen : Pointer to IE length buffer. - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cMsgGetIeTlvP(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint8_t** ppVal, - NW_OUT uint16_t* pLen); - - -/** - * Get F-TEID information element to gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] instance : IE instance. - * @param[out] ifType : Interface Type. - * @param[out] teidOrGreKey: TEID/ GRE Key - * @param[out] ipv4Addr : Ipv4 Address in Network Byte Order. - * @param[out] pIpv6Addr: Pointer to IPv6 Address in Network Byte Order. - */ - -NwRcT -nwGtpv2cMsgGetIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_OUT uint8_t* ifType, - NW_OUT uint32_t* teidOrGreKey, - NW_OUT uint32_t* ipv4Addr, - NW_OUT uint8_t* pIpv6Addr); - -NwRcT -nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_OUT uint8_t* causeValue, - NW_OUT uint8_t* flags, - NW_OUT uint8_t* offendingIeType, - NW_OUT uint8_t* offendingIeInstance); - -/** - * Get msg type for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetMsgType(NW_IN NwGtpv2cMsgHandleT hMsg); - -/** - * Dump the contents of gtpv2c message. - * - * @param[in] hMsg : Handle to gtpv2c message. - * @param[in] fp: Pointer to output file. - */ - -NwRcT -nwGtpv2cMsgHexDump(NwGtpv2cMsgHandleT hMsg, FILE* fp); - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_MSG_H__ */ - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h deleted file mode 100644 index a16bf4800a..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h +++ /dev/null @@ -1,153 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" - -#ifndef __NW_GTPV2C_MSG_PARSER_H__ -#define __NW_GTPV2C_MSG_PARSER_H__ - -/** - * @file NwGtpv2cMsgParser.h - * @brief This file defines APIs to parser gtpv2c messages. -*/ - -typedef struct { - uint16_t msgType; - uint16_t mandatoryIeCount; - NwGtpv2cStackHandleT hStack; - NwRcT (*ieReadCallback) (uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* ieReadCallbackArg); - void* ieReadCallbackArg; - - struct { - uint8_t iePresence; - NwRcT (*ieReadCallback) (uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* ieReadCallbackArg); - void* ieReadCallbackArg; - } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - - uint8_t *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; -} NwGtpv2cMsgParserT; - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Allocate a gtpv2c message Parser. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] msgType : Message type for this message parser. - * @param[out] pthiz : Pointer to message parser handle. - */ - -NwRcT -nwGtpv2cMsgParserNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t msgType, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg, - NW_IN NwGtpv2cMsgParserT **pthiz); - - -/** - * Free a gtpv2c message parser. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] thiz : Message parser handle. - */ - -NwRcT -nwGtpv2cMsgParserDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMsgParserT* thiz); - -NwRcT -nwGtpv2cMsgParserUpdateIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN uint8_t ieType, - NW_IN uint8_t ieInstance, - NW_IN uint8_t iePresence, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg); - - -NwRcT -nwGtpv2cMsgParserUpdateIeReadCallback( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg)); - - -NwRcT -nwGtpv2cMsgParserUpdateIeReadCallbackArg( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN void* ieReadCallbackArg); - -NwRcT -nwGtpv2cMsgParserAddIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN uint8_t ieType, - NW_IN uint8_t ieInstance, - NW_IN uint8_t iePresence, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg); - -NwRcT -nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, - NW_IN NwGtpv2cMsgHandleT hMsg, - NW_OUT uint8_t *pOffendingIeType, - NW_OUT uint8_t *pOffendingIeInstance, - NW_OUT uint16_t *pOffendingIeLength); - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_GTPV2C_MSG_PARSER_H__ */ - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h deleted file mode 100644 index a941a31905..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h +++ /dev/null @@ -1,85 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_LOG_H__ -#define __NW_LOG_H__ - -#include - -#include "NwTypes.h" - -/** - * @file NwLog.h - * @brief This header file contains global shared logging definitions. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*--------------------------------------------------------------------------- - * Log Level Definitions - *--------------------------------------------------------------------------*/ - -#define NW_LOG_LEVEL_EMER (0) /**< system is unusable */ -#define NW_LOG_LEVEL_ALER (1) /**< action must be taken immediately*/ -#define NW_LOG_LEVEL_CRIT (2) /**< critical conditions */ -#define NW_LOG_LEVEL_ERRO (3) /**< error conditions */ -#define NW_LOG_LEVEL_WARN (4) /**< warning conditions */ -#define NW_LOG_LEVEL_NOTI (5) /**< normal but signification condition */ -#define NW_LOG_LEVEL_INFO (6) /**< informational */ -#define NW_LOG_LEVEL_DEBG (7) /**< debug-level messages */ - -/*--------------------------------------------------------------------------- - * IPv4 logging macros - *--------------------------------------------------------------------------*/ - -#define NW_IPV4_ADDR "%u.%u.%u.%u" -#define NW_IPV4_ADDR_FORMAT(__addr) (uint8_t)((__addr) & 0x000000ff), \ - (uint8_t)(((__addr) & 0x0000ff00) >> 8 ), \ - (uint8_t)(((__addr) & 0x00ff0000) >> 16), \ - (uint8_t)(((__addr) & 0xff000000) >> 24) - -#define NW_IPV4_ADDR_FORMATP(__paddr) (uint8_t)(*((uint8_t*)(__paddr)) & 0x000000ff), \ - (uint8_t)(*((uint8_t*)(__paddr + 1)) & 0x000000ff), \ - (uint8_t)(*((uint8_t*)(__paddr + 2)) & 0x000000ff), \ - (uint8_t)(*((uint8_t*)(__paddr + 3)) & 0x000000ff) - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_LOG_H__ */ - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h deleted file mode 100644 index 78be53a5d0..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h +++ /dev/null @@ -1,83 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 - -#ifndef __NW_TYPES_H__ -#define __NW_TYPES_H__ - -/** - * @file NwTypes.h - * @brief This header file contains basic type definitions. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#define NW_IN /**< An input argument */ -#define NW_OUT /**< An output argument */ -#define NW_INOUT /**< An input and output argument */ - -#define NW_TRUE (1) /**< Truth value */ -#define NW_FALSE (0) /**< False value */ - -typedef unsigned char uint8_t; /**< Unsigned 1 byte */ -typedef unsigned short uint16_t; /**< Unsigned 2 byte */ -typedef unsigned int uint32_t; /**< Unsigned 4 byte */ -typedef unsigned long long uint64_t; /**< Unsigned 8 byte */ - -typedef signed char NwS8T; /**< Signed 1 byte */ -typedef signed short NwS16T; /**< Signed 2 byte */ -typedef signed int NwS32T; /**< Signed 4 byte */ -typedef signed long long NwS64T; /**< Signed 8 byte */ - -typedef char NwBoolT; /**< Use this for booleans */ - -typedef char NwCharT; /**< Use this for strings */ - -typedef signed int NwFdT; /**< Use this for file descriptor */ - -typedef uintptr_t NwPtrT; /**< Use this for generic pointers */ -typedef unsigned int NwHandleT; /**< Use this for generic handles */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __NW_TYPES_H__ */ - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h deleted file mode 100644 index a51437bce8..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h +++ /dev/null @@ -1,69 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 - -#ifndef __NW_UTILS_H__ -#define __NW_UTILS_H__ - - -/** - * @file NwUtils.h - * @brief This header file contains utility macro and function definitions. -*/ - -#define NW_ASSERT assert /**< Assertion */ - -#define NW_CHK_NULL_PTR(_ptr) NW_ASSERT(_ptr != NULL) /**< Null pointer check */ - -#define NW_HTONS(x) ( ( ((x) & 0xff00) >> 8 ) | ( ((x) & 0x00ff) << 8 ) ) - -#define NW_HTONL(x) ( ( ((x) & 0xff000000) >> 24 ) | ( ( (x) & 0x00ff0000 ) >> 8 ) | \ - ( ( (x) & 0x0000ff00 ) << 8 ) | ( ( (x) & 0x000000ff) << 24 ) ) - -#define NW_HTONLL(x) ( \ - ( ( ((uint64_t)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((uint64_t)x) & 0x00ff000000000000ULL ) >> 40 ) | \ - ( ( ((uint64_t)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((uint64_t)x) & 0x000000ff00000000ULL ) >> 8 ) | \ - ( ( ((uint64_t)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((uint64_t)x) & 0x00000000000000ffULL ) << 56 ) | \ - ( ( ((uint64_t)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((uint64_t)x) & 0x00000000ff000000ULL ) << 8 ) \ - ) - - -#define NW_NTOHS NW_HTONS -#define NW_NTOHL NW_HTONL -#define NW_NTOHLL NW_HTONLL - - -#endif /* __NW_UTILS_H__ */ - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/Makefile.am b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/Makefile.am deleted file mode 100644 index 0c12bd5984..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/Makefile.am +++ /dev/null @@ -1,46 +0,0 @@ -# this is example-file: src/mylib/Makefile.am - -# additional include paths necessary to compile the C++ library -AM_CFLAGS = -Wall -I$(top_srcdir)/src -I$(top_srcdir)/shared -I$(top_srcdir)/include @AM_CFLAGS@ - -############################################################################### -# THE LIBRARIES TO BUILD -############################################################################### - -# the library names to build (note we are building static libs only) -lib_LIBRARIES = libNwGtpv2c.a - -# where to install the headers on the system -libNwGtpv2c_adir = $(includedir)/mylib - -# the list of header files that belong to the library (to be installed later) -libNwGtpv2c_a_HEADERS = \ - $(top_srcdir)/shared/NwTypes.h\ - $(top_srcdir)/shared/NwUtils.h\ - $(top_srcdir)/shared/NwError.h\ - $(top_srcdir)/shared/NwLog.h\ - $(top_srcdir)/shared/NwGtpv2c.h\ - $(top_srcdir)/shared/NwGtpv2cMsg.h\ - $(top_srcdir)/shared/NwGtpv2cMsgParser.h\ - $(top_srcdir)/shared/NwGtpv2cIe.h\ - $(top_srcdir)/include/NwGtpv2cPrivate.h\ - $(top_srcdir)/include/NwGtpv2cTrxn.h\ - $(top_srcdir)/include/NwGtpv2cTunnel.h\ - $(top_srcdir)/include/NwGtpv2cMsgIeParseInfo.h\ - $(top_srcdir)/include/NwGtpv2cLog.h\ - $(top_srcdir)/include/queue.h\ - $(top_srcdir)/include/tree.h - -# the sources to add to the library and to add to the source distribution -libNwGtpv2c_a_SOURCES = \ - $(libNwGtpv2_a_HEADERS) \ - NwGtpv2cTrxn.c\ - NwGtpv2cTunnel.c\ - NwGtpv2cMsg.c\ - NwGtpv2cMsgIeParseInfo.c\ - NwGtpv2cMsgParser.c\ - NwGtpv2c.c - -############################################################################### - - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c deleted file mode 100644 index 123fe0932a..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c +++ /dev/null @@ -1,1811 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwUtils.h" -#include "NwError.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cTrxn.h" -#include "NwGtpv2cLog.h" - -#ifdef _NWGTPV2C_HAVE_TIMERADD -#define NW_GTPV2C_TIMER_ADD(tvp, uvp, vvp) timeradd((tvp), (uvp), (vvp)) -#define NW_GTPV2C_TIMER_SUB(tvp, uvp, vvp) timersub((tvp), (uvp), (vvp)) -#define NW_GTPV2C_TIMER_CMP_P(a, b, CMP) timercmp(a, b, CMP) -#else - -#define NW_GTPV2C_TIMER_ADD(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ - if ((vvp)->tv_usec >= 1000000) { \ - (vvp)->tv_sec++; \ - (vvp)->tv_usec -= 1000000; \ - } \ - } while (0) - -#define NW_GTPV2C_TIMER_SUB(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ - if ((vvp)->tv_usec < 0) { \ - (vvp)->tv_sec--; \ - (vvp)->tv_usec += 1000000; \ - } \ - } while (0) - -#define NW_GTPV2C_TIMER_CMP_P(a, b, CMP) \ - (((a)->tv_sec == (b)->tv_sec) ? \ - ((a)->tv_usec CMP (b)->tv_usec) : \ - ((a)->tv_sec CMP (b)->tv_sec)) - -#endif - - -#define NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(__thiz, __msgType) \ - do { \ - __thiz->pGtpv2cMsgIeParseInfo[__msgType] = \ - nwGtpv2cMsgIeParseInfoNew((NwGtpv2cStackHandleT)__thiz, __msgType);\ - } while(0) - -#define NW_GTPV2C_UDP_PORT (2123) - -#ifdef __cplusplus -extern "C" { -#endif - -static NwGtpv2cTimeoutInfoT* gpGtpv2cTimeoutInfoPool = NULL; - -typedef struct { - int currSize; - int maxSize; - NwGtpv2cTimeoutInfoT** pHeap; -} NwGtpv2cTmrMinHeapT; - -#define NW_HEAP_PARENT_INDEX(__child) ( ( (__child) - 1 ) / 2 ) - - -NwGtpv2cTmrMinHeapT* -nwGtpv2cTmrMinHeapNew(int maxSize) -{ - NwGtpv2cTmrMinHeapT* thiz = (NwGtpv2cTmrMinHeapT*) malloc (sizeof(NwGtpv2cTmrMinHeapT)); - - if(thiz) { - thiz->currSize = 0; - thiz->maxSize = maxSize; - thiz->pHeap = (NwGtpv2cTimeoutInfoT**) malloc (maxSize * sizeof(NwGtpv2cTimeoutInfoT*)); - } - - return thiz; -} - -void -nwGtpv2cTmrMinHeapDelete(NwGtpv2cTmrMinHeapT* thiz) -{ - free(thiz->pHeap); - free(thiz); -} - -static NwRcT -nwGtpv2cTmrMinHeapInsert(NwGtpv2cTmrMinHeapT* thiz, NwGtpv2cTimeoutInfoT* pTimerEvent) -{ - int holeIndex = thiz->currSize++; - - NW_ASSERT(thiz->currSize < thiz->maxSize); - - while((holeIndex > 0) && - NW_GTPV2C_TIMER_CMP_P(&(thiz->pHeap[NW_HEAP_PARENT_INDEX(holeIndex)])->tvTimeout, &(pTimerEvent->tvTimeout), >)) { - thiz->pHeap[holeIndex] = thiz->pHeap[NW_HEAP_PARENT_INDEX(holeIndex)]; - thiz->pHeap[holeIndex]->timerMinHeapIndex = holeIndex; - holeIndex = NW_HEAP_PARENT_INDEX(holeIndex); - } - - thiz->pHeap[holeIndex] = pTimerEvent; - pTimerEvent->timerMinHeapIndex = holeIndex; - - return holeIndex; -} - -#define NW_MIN_HEAP_INDEX_INVALID (0xFFFFFFFF) -static NwRcT -nwGtpv2cTmrMinHeapRemove(NwGtpv2cTmrMinHeapT* thiz, int minHeapIndex) -{ - NwGtpv2cTimeoutInfoT* pTimerEvent; - int holeIndex = minHeapIndex; - int minChild, maxChild; - - //printf("- Trying Removing %p from index %u, currSize %u, minChild %u, maxChild %u\n", thiz->pHeap[minHeapIndex], minHeapIndex, thiz->currSize, minChild, maxChild); - if(minHeapIndex == NW_MIN_HEAP_INDEX_INVALID) return NW_FAILURE; - - if(minHeapIndex < thiz->currSize) { - thiz->pHeap[minHeapIndex]->timerMinHeapIndex = NW_MIN_HEAP_INDEX_INVALID; - thiz->currSize--; - - pTimerEvent = thiz->pHeap[thiz->currSize]; - holeIndex = minHeapIndex; - minChild = ( 2 * holeIndex ) + 1; - maxChild = minChild + 1; - - //printf("- Removing %p from index %u, currSize %u, minChild %u, maxChild %u\n", thiz->pHeap[minHeapIndex], minHeapIndex, thiz->currSize, minChild, maxChild); - - while( (maxChild) <= thiz->currSize ) { - if(NW_GTPV2C_TIMER_CMP_P(&(thiz->pHeap[minChild]->tvTimeout), &(thiz->pHeap[maxChild]->tvTimeout), >)) - minChild = maxChild; - - if(NW_GTPV2C_TIMER_CMP_P(&(pTimerEvent->tvTimeout), &(thiz->pHeap[minChild]->tvTimeout), <)) { - break; - } - - thiz->pHeap[holeIndex] = thiz->pHeap[minChild]; - thiz->pHeap[holeIndex]->timerMinHeapIndex = holeIndex; - holeIndex = minChild; - minChild = ( 2 * holeIndex ) + 1; - maxChild = minChild + 1; - } - - while((holeIndex > 0) && - NW_GTPV2C_TIMER_CMP_P(&((thiz->pHeap[NW_HEAP_PARENT_INDEX(holeIndex)])->tvTimeout), &(pTimerEvent->tvTimeout), >)) { - thiz->pHeap[holeIndex] = thiz->pHeap[NW_HEAP_PARENT_INDEX(holeIndex)]; - thiz->pHeap[holeIndex]->timerMinHeapIndex = holeIndex; - holeIndex = NW_HEAP_PARENT_INDEX(holeIndex); - } - - if(holeIndex < thiz->currSize) { - thiz->pHeap[holeIndex] = pTimerEvent; - pTimerEvent->timerMinHeapIndex = holeIndex; - } - - thiz->pHeap[thiz->currSize] = NULL; - return NW_OK; - } - - return NW_FAILURE; -} - -static NwGtpv2cTimeoutInfoT* -nwGtpv2cTmrMinHeapPeek(NwGtpv2cTmrMinHeapT* thiz) -{ - if(thiz->currSize) { - //printf("- Peek Returning %p at index %u(%u)\n", thiz->pHeap[0], thiz->pHeap[0]->timerMinHeapIndex, thiz->currSize); - return thiz->pHeap[0]; - } - - return NULL; -} -/*--------------------------------------------------------------------------* - * P R I V A T E F U N C T I O N S * - *--------------------------------------------------------------------------*/ - -static void -nwGtpv2cDisplayBanner( NwGtpv2cStackT* thiz) -{ -#ifdef NW_GTPV2C_DISPLAY_LICENCE_INFO - printf(" *----------------------------------------------------------------------------*\n"); - printf(" * *\n"); - printf(" * n w - g t p v 2 c *\n"); - printf(" * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k *\n"); - printf(" * *\n"); - printf(" * *\n"); - printf(" * Copyright (c) 2010-2011 Amit Chawre *\n"); - printf(" * All rights reserved. *\n"); - printf(" * *\n"); - printf(" * Redistribution and use in source and binary forms, with or without *\n"); - printf(" * modification, are permitted provided that the following conditions *\n"); - printf(" * are met: *\n"); - printf(" * *\n"); - printf(" * 1. Redistributions of source code must retain the above copyright *\n"); - printf(" * notice, this list of conditions and the following disclaimer. *\n"); - printf(" * 2. Redistributions in binary form must reproduce the above copyright *\n"); - printf(" * notice, this list of conditions and the following disclaimer in the *\n"); - printf(" * documentation and/or other materials provided with the distribution. *\n"); - printf(" * 3. The name of the author may not be used to endorse or promote products *\n"); - printf(" * derived from this software without specific prior written permission. *\n"); - printf(" * *\n"); - printf(" * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR *\n"); - printf(" * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES *\n"); - printf(" * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. *\n"); - printf(" * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, *\n"); - printf(" * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT *\n"); - printf(" * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *\n"); - printf(" * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *\n"); - printf(" * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *\n"); - printf(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF *\n"); - printf(" * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *\n"); - printf(" *----------------------------------------------------------------------------*\n\n"); -#endif -} - -/*--------------------------------------------------------------------------- - * Tunnel RBTree Search Data Structure - *--------------------------------------------------------------------------*/ - -/** - Comparator funtion for comparing two sequence number transactions. - - @param[in] a: Pointer to session a. - @param[in] b: Pointer to session b. - @return An integer greater than, equal to or less than zero according to whether the - object pointed to by a is greater than, equal to or less than the object pointed to by b. - */ - -static inline NwS32T -nwGtpv2cCompareTunnel(struct NwGtpv2cTunnel * a, struct NwGtpv2cTunnel* b) -{ - if(a->teid > b->teid) - return 1; - - if(a->teid < b->teid) - return -1; - - if(a->ipv4AddrRemote > b->ipv4AddrRemote) - return 1; - - if(a->ipv4AddrRemote < b->ipv4AddrRemote) - return -1; - - return 0; -} - -RB_GENERATE(NwGtpv2cTunnelMap, NwGtpv2cTunnel, tunnelMapRbtNode, nwGtpv2cCompareTunnel) - -/*--------------------------------------------------------------------------- - * Transaction RBTree Search Data Structure - *--------------------------------------------------------------------------*/ - -/** - Comparator funtion for comparing two outstancing TX transactions. - - @param[in] a: Pointer to session a. - @param[in] b: Pointer to session b. - @return An integer greater than, equal to or less than zero according to whether the - object pointed to by a is greater than, equal to or less than the object pointed to by b. - */ - -static inline NwS32T -nwGtpv2cCompareOutstandingTxSeqNumTrxn(struct NwGtpv2cTrxn* a, struct NwGtpv2cTrxn* b) -{ - if(a->seqNum > b->seqNum) - return 1; - - if(a->seqNum < b->seqNum) - return -1; - - if(a->peerIp > b->peerIp) - return 1; - - if(a->peerIp < b->peerIp) - return -1; - - return 0; -} - -RB_GENERATE(NwGtpv2cOutstandingTxSeqNumTrxnMap, NwGtpv2cTrxn, outstandingTxSeqNumMapRbtNode, nwGtpv2cCompareOutstandingTxSeqNumTrxn) - -/** - Comparator funtion for comparing outstanding RX transactions. - - @param[in] a: Pointer to session a. - @param[in] b: Pointer to session b. - @return An integer greater than, equal to or less than zero according to whether the - object pointed to by a is greater than, equal to or less than the object pointed to by b. - */ - -static inline NwS32T -nwGtpv2cCompareOutstandingRxSeqNumTrxn(struct NwGtpv2cTrxn* a, struct NwGtpv2cTrxn* b) -{ - if(a->seqNum > b->seqNum) - return 1; - - if(a->seqNum < b->seqNum) - return -1; - - if(a->peerIp > b->peerIp) - return 1; - - if(a->peerIp < b->peerIp) - return -1; - - if(a->peerPort > b->peerPort) - return 1; - - if(a->peerPort < b->peerPort) - return -1; - - return 0; -} - -RB_GENERATE(NwGtpv2cOutstandingRxSeqNumTrxnMap, NwGtpv2cTrxn, outstandingRxSeqNumMapRbtNode, nwGtpv2cCompareOutstandingRxSeqNumTrxn) - -/*--------------------------------------------------------------------------- - * Timer RB-tree data structure. - *--------------------------------------------------------------------------*/ - -/** - Comparator funtion for comparing two outstancing TX transactions. - - @param[in] a: Pointer to session a. - @param[in] b: Pointer to session b. - @return An integer greater than, equal to or less than zero according to whether the - object pointed to by a is greater than, equal to or less than the object pointed to by b. - */ - -static inline NwS32T -nwGtpv2cCompareOutstandingTxRexmitTime(struct NwGtpv2cTimeoutInfo* a, struct NwGtpv2cTimeoutInfo* b) -{ - if(NW_GTPV2C_TIMER_CMP_P(&a->tvTimeout, &b->tvTimeout, >)) - return 1; - - if(NW_GTPV2C_TIMER_CMP_P(&a->tvTimeout, &b->tvTimeout, <)) - return -1; - - return 0; -} - -RB_GENERATE(NwGtpv2cActiveTimerList, NwGtpv2cTimeoutInfo, activeTimerListRbtNode, nwGtpv2cCompareOutstandingTxRexmitTime) - - - -/** - * Send msg to peer via data request to UDP Entity - * - * @param[in] thiz : Pointer to stack. - * @param[in] peerIp : Peer Ip address. - * @param[in] peerPort : Peer Ip port. - * @param[in] pMsg : Message to be sent. - * @return NW_OK on success. - */ -static NwRcT -nwGtpv2cCreateAndSendMsg(NW_IN NwGtpv2cStackT* thiz, - NW_IN uint32_t seqNum, - NW_IN uint32_t peerIp, - NW_IN uint32_t peerPort, - NW_IN NwGtpv2cMsgT *pMsg) -{ - NwRcT rc; - uint8_t* msgHdr; - - NW_ASSERT(thiz); - NW_ASSERT(pMsg); - - msgHdr = pMsg->msgBuf; - - /* Set flags in header */ - *(msgHdr++) = (pMsg->version << 5) | (pMsg->teidPresent << 3); - - /* Set msg type in header */ - *(msgHdr++) = (pMsg->msgType); - - /* Set msg length in header*/ - *((uint16_t*) msgHdr) = htons(pMsg->msgLen - 4 ); - msgHdr += 2; - - /* Set TEID, if present in header */ - if(pMsg->teidPresent) { - *((uint32_t*) msgHdr) = htonl(pMsg->teid); - msgHdr += 4; - } - - /* Set seq num in header */ - *((uint32_t*) msgHdr) = htonl(seqNum << 8); - - /* Call UDP data request callback */ - NW_ASSERT(thiz->udp.udpDataReqCallback != NULL); - rc = thiz->udp.udpDataReqCallback(thiz->udp.hUdp, - pMsg->msgBuf, - pMsg->msgLen, - peerIp, - peerPort); - NW_ASSERT(NW_OK == rc); - - return rc; -} - -/** - Send an Version Not Supported message - - @param[in] thiz : Stack pointer - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cSendVersionNotSupportedInd( NW_IN NwGtpv2cStackT* thiz, - NW_IN uint32_t peerIp, - NW_IN uint32_t peerPort, - NW_IN uint32_t seqNum) -{ - NwRcT rc; - NwGtpv2cMsgHandleT hMsg = 0; - - rc = nwGtpv2cMsgNew( (NwGtpv2cStackHandleT)thiz, - NW_FALSE, - NW_GTP_VERSION_NOT_SUPPORTED_IND, - 0x00, - seqNum, - (&hMsg)); - - NW_ASSERT(NW_OK == rc); - - NW_LOG(thiz, NW_LOG_LEVEL_NOTI, "Sending Version Not Supported Indication message to %x:%x with seq %u", peerIp, peerPort, seqNum); - - rc = nwGtpv2cCreateAndSendMsg(thiz, - seqNum, - peerIp, - peerPort, - (NwGtpv2cMsgT*) hMsg); - - rc = nwGtpv2cMsgDelete((NwGtpv2cStackHandleT)thiz, hMsg); - NW_ASSERT(NW_OK == rc); - - return rc; -} - -/** - Create a local tunnel. - - @param[in] thiz : Stack pointer - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cCreateLocalTunnel( NW_IN NwGtpv2cStackT* thiz, - NW_IN uint32_t teid, - NW_IN uint32_t ipv4Remote, - NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel, - NW_OUT NwGtpv2cTunnelHandleT *phTunnel) -{ - NwRcT rc; - NwGtpv2cTunnelT *pTunnel, *pCollision; - - NW_ENTER(thiz); - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Creating local tunnel with teid '0x%x' and peer IP 0x%x", teid, ipv4Remote); - - pTunnel = nwGtpv2cTunnelNew(thiz, teid, ipv4Remote, hUlpTunnel); - - if(pTunnel) { - pCollision = RB_INSERT(NwGtpv2cTunnelMap, &(thiz->tunnelMap), pTunnel); - - if(pCollision) { - rc = nwGtpv2cTunnelDelete(thiz, pTunnel); - NW_ASSERT(NW_OK == rc); - - *phTunnel = (NwGtpv2cTunnelHandleT) 0; - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Local tunnel creation failed for teid '0x%x' and peer IP "NW_IPV4_ADDR". Tunnel already exists!", teid, NW_IPV4_ADDR_FORMAT(ipv4Remote)); - - NW_ASSERT(0); - NW_LEAVE(thiz); - return NW_OK; - } - } else { - rc = NW_FAILURE; - } - - *phTunnel = (NwGtpv2cTunnelHandleT) pTunnel; - NW_LEAVE(thiz); - return NW_OK; -} - -/** - Delete a local tunnel. - - @param[in] thiz : Stack pointer - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cDeleteLocalTunnel( NW_IN NwGtpv2cStackT* thiz, - NW_OUT NwGtpv2cTunnelHandleT hTunnel) -{ - NwRcT rc; - NwGtpv2cTunnelT *pTunnel = (NwGtpv2cTunnelT*) hTunnel ; - - NW_ENTER(thiz); - - pTunnel = RB_REMOVE(NwGtpv2cTunnelMap, &(thiz->tunnelMap), (NwGtpv2cTunnelT*)hTunnel); - NW_ASSERT(pTunnel == (NwGtpv2cTunnelT*)hTunnel); - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Deleting local tunnel with teid '0x%x' and peer IP 0x%x", pTunnel->teid, pTunnel->ipv4AddrRemote); - - rc = nwGtpv2cTunnelDelete(thiz, pTunnel); - NW_ASSERT(NW_OK == rc); - - NW_LEAVE(thiz); - return NW_OK; -} - -/*--------------------------------------------------------------------------- - * ULP API Processing Functions - *--------------------------------------------------------------------------*/ - -/** - Process NW_GTPV2C_ULP_API_INITIAL_REQ Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpReq : Pointer to Ulp Req. - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleUlpInitialReq( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cUlpApiT *pUlpReq) -{ - NwRcT rc; - NwGtpv2cTrxnT *pTrxn; - - NW_ENTER(thiz); - - /* Create New Transaction */ - pTrxn = nwGtpv2cTrxnNew(thiz); - - if(pTrxn) { - if(!pUlpReq->apiInfo.initialReqInfo.hTunnel) { - rc = nwGtpv2cCreateLocalTunnel(thiz, - pUlpReq->apiInfo.initialReqInfo.teidLocal, - pUlpReq->apiInfo.initialReqInfo.peerIp, - pUlpReq->apiInfo.initialReqInfo.hUlpTunnel, - &pUlpReq->apiInfo.initialReqInfo.hTunnel); - NW_ASSERT(NW_OK == rc); - } - - pTrxn->pMsg = (NwGtpv2cMsgT*) pUlpReq->hMsg; - pTrxn->hTunnel = pUlpReq->apiInfo.initialReqInfo.hTunnel; - pTrxn->hUlpTrxn = pUlpReq->apiInfo.initialReqInfo.hUlpTrxn; - pTrxn->peerIp = ((NwGtpv2cTunnelT*)(pTrxn->hTunnel))->ipv4AddrRemote; - pTrxn->peerPort = NW_GTPV2C_UDP_PORT; - - if(pUlpReq->apiType & NW_GTPV2C_ULP_API_FLAG_IS_COMMAND_MESSAGE) { - pTrxn->seqNum |= 0x00100000UL; - } - - rc = nwGtpv2cCreateAndSendMsg(thiz, - pTrxn->seqNum, - pTrxn->peerIp, - pTrxn->peerPort, - pTrxn->pMsg); - - if(NW_OK == rc) { - /* Start guard timer */ - rc = nwGtpv2cTrxnStartPeerRspWaitTimer(pTrxn); - NW_ASSERT(NW_OK == rc); - - /* Insert into search tree */ - pTrxn = RB_INSERT(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), pTrxn); - NW_ASSERT(pTrxn == NULL); - } else { - rc = nwGtpv2cTrxnDelete(&pTrxn); - NW_ASSERT(NW_OK == rc); - } - } else { - rc = NW_FAILURE; - } - - NW_LEAVE(thiz); - - return rc; -} - -/** - Process NW_GTPV2C_ULP_API_TRIGGERED_REQ Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpReq : Pointer to Ulp Req. - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleUlpTriggeredReq( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cUlpApiT *pUlpReq) -{ - NwRcT rc; - NwGtpv2cTrxnT *pTrxn; - NwGtpv2cTrxnT *pReqTrxn; - - NW_ENTER(thiz); - - /* Create New Transaction */ - pTrxn = nwGtpv2cTrxnWithSeqNumNew(thiz, (((NwGtpv2cMsgT*)(pUlpReq->hMsg))->seqNum)); - - if(pTrxn) { - pReqTrxn = (NwGtpv2cTrxnT*) pUlpReq->apiInfo.triggeredReqInfo.hTrxn; - - pTrxn->hUlpTrxn = pUlpReq->apiInfo.triggeredReqInfo.hUlpTrxn; - pTrxn->peerIp = pReqTrxn->peerIp; - pTrxn->peerPort = pReqTrxn->peerPort; - pTrxn->pMsg = (NwGtpv2cMsgT*) pUlpReq->hMsg; - - rc = nwGtpv2cCreateAndSendMsg(thiz, - pTrxn->seqNum, - pTrxn->peerIp, - pTrxn->peerPort, - pTrxn->pMsg); - - if(NW_OK == rc) { - /* Start guard timer */ - rc = nwGtpv2cTrxnStartPeerRspWaitTimer(pTrxn); - NW_ASSERT(NW_OK == rc); - - /* Insert into search tree */ - RB_INSERT(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), pTrxn); - - if(!pUlpReq->apiInfo.triggeredReqInfo.hTunnel) { - rc = nwGtpv2cCreateLocalTunnel(thiz, - pUlpReq->apiInfo.triggeredReqInfo.teidLocal, - pReqTrxn->peerIp, - pUlpReq->apiInfo.triggeredReqInfo.hUlpTunnel, - &pUlpReq->apiInfo.triggeredReqInfo.hTunnel); - } - } else { - rc = nwGtpv2cTrxnDelete(&pTrxn); - NW_ASSERT(NW_OK == rc); - } - } else { - rc = NW_FAILURE; - } - - NW_LEAVE(thiz); - - return rc; -} - -/** - Process NW_GTPV2C_ULP_API_TRIGGERED_RSP Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpReq : Pointer to Ulp Req. - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleUlpTriggeredRsp( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cUlpApiT *pUlpRsp) -{ - NwRcT rc; - NwGtpv2cTrxnT *pReqTrxn; - - NW_ENTER(thiz); - - pReqTrxn = (NwGtpv2cTrxnT*) pUlpRsp->apiInfo.triggeredRspInfo.hTrxn; - NW_ASSERT(pReqTrxn != NULL); - - if(((NwGtpv2cMsgT*) pUlpRsp->hMsg)->seqNum == 0) - ((NwGtpv2cMsgT*) pUlpRsp->hMsg)->seqNum = pReqTrxn->seqNum; - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Sending response message over seq '0x%x'", pReqTrxn->seqNum); - - rc = nwGtpv2cCreateAndSendMsg(thiz, - pReqTrxn->seqNum, - pReqTrxn->peerIp, - pReqTrxn->peerPort, - (NwGtpv2cMsgT*) pUlpRsp->hMsg); - - pReqTrxn->pMsg = (NwGtpv2cMsgT*) pUlpRsp->hMsg; - - rc = nwGtpv2cTrxnStartDulpicateRequestWaitTimer(pReqTrxn); - - if((pUlpRsp->apiType & 0xFF000000) == NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL) { - rc = nwGtpv2cCreateLocalTunnel(thiz, - pUlpRsp->apiInfo.triggeredRspInfo.teidLocal, - pReqTrxn->peerIp, - pUlpRsp->apiInfo.triggeredRspInfo.hUlpTunnel, - &pUlpRsp->apiInfo.triggeredRspInfo.hTunnel); - } - - return rc; -} - -/** - Process NW_GTPV2C_ULP_CREATE_LOCAL_TUNNEL Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpReq : Pointer to Ulp Req. - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleUlpCreateLocalTunnel( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cUlpApiT *pUlpReq) -{ - NwRcT rc; - NwGtpv2cTunnelT *pTunnel, *pCollision; - - NW_ENTER(thiz); - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Creating local tunnel with teid '0x%x' and peer IP 0x%x", pUlpReq->apiInfo.createLocalTunnelInfo.teidLocal, pUlpReq->apiInfo.createLocalTunnelInfo.peerIp); - - pTunnel = nwGtpv2cTunnelNew(thiz, pUlpReq->apiInfo.createLocalTunnelInfo.teidLocal, - pUlpReq->apiInfo.createLocalTunnelInfo.peerIp, - pUlpReq->apiInfo.triggeredRspInfo.hUlpTunnel); - NW_ASSERT(pTunnel); - - pCollision = RB_INSERT(NwGtpv2cTunnelMap, &(thiz->tunnelMap), pTunnel); - - if(pCollision) { - rc = nwGtpv2cTunnelDelete(thiz, pTunnel); - NW_ASSERT(NW_OK == rc); - - pUlpReq->apiInfo.createLocalTunnelInfo.hTunnel = (NwGtpv2cTunnelHandleT) 0; - NW_LEAVE(thiz); - return NW_FAILURE; - } - - pUlpReq->apiInfo.createLocalTunnelInfo.hTunnel = (NwGtpv2cTunnelHandleT) pTunnel; - NW_LEAVE(thiz); - return NW_OK; -} - -/** - Process NW_GTPV2C_ULP_DELETE_LOCAL_TUNNEL Request from ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @param[in] pUlpReq : Pointer to Ulp Req. - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleUlpDeleteLocalTunnel( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cUlpApiT *pUlpReq) -{ - NwRcT rc; - - NW_ENTER(thiz); - - rc = nwGtpv2cDeleteLocalTunnel(thiz, pUlpReq->apiInfo.deleteLocalTunnelInfo.hTunnel); - - NW_LEAVE(thiz); - return rc; -} - -/** - Send GTPv2c Initial Request Message Indication to ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cSendInitialReqIndToUlp( NW_IN NwGtpv2cStackT *thiz, - NW_IN NwGtpv2cErrorT *pError, - NW_IN NwGtpv2cTrxnT *pTrxn, - NW_IN uint32_t hUlpTunnel, - NW_IN uint32_t msgType, - NW_IN uint32_t peerIp, - NW_IN uint16_t peerPort, - NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulpApi; - - NW_ENTER(thiz); - - ulpApi.hMsg = hMsg; - ulpApi.apiType = NW_GTPV2C_ULP_API_INITIAL_REQ_IND; - ulpApi.apiInfo.initialReqIndInfo.msgType = msgType; - ulpApi.apiInfo.initialReqIndInfo.hTrxn = (NwGtpv2cTrxnHandleT) pTrxn; - ulpApi.apiInfo.initialReqIndInfo.hUlpTunnel = hUlpTunnel; - ulpApi.apiInfo.initialReqIndInfo.peerIp = peerIp; - ulpApi.apiInfo.initialReqIndInfo.peerPort = peerPort; - - ulpApi.apiInfo.triggeredRspIndInfo.error = *pError; - - rc = thiz->ulp.ulpReqCallback(thiz->ulp.hUlp, &ulpApi); - - NW_LEAVE(thiz); - - return rc; -} - -/** - Send GTPv2c Triggered Response Indication to ULP entity. - - @param[in] hGtpcStackHandle : Stack handle - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cSendTriggeredRspIndToUlp( NW_IN NwGtpv2cStackT* thiz, - NW_IN NwGtpv2cErrorT *pError, - NW_IN uint32_t hUlpTrxn, - NW_IN uint32_t hUlpTunnel, - NW_IN uint32_t msgType, - NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulpApi; - - NW_ENTER(thiz); - - ulpApi.hMsg = hMsg; - ulpApi.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND; - ulpApi.apiInfo.triggeredRspIndInfo.msgType = msgType; - ulpApi.apiInfo.triggeredRspIndInfo.hUlpTrxn = hUlpTrxn; - ulpApi.apiInfo.triggeredRspIndInfo.hUlpTunnel = hUlpTunnel; - - ulpApi.apiInfo.triggeredRspIndInfo.error = *pError; - - rc = thiz->ulp.ulpReqCallback(thiz->ulp.hUlp, &ulpApi); - - NW_LEAVE(thiz); - - return rc; -} - -/** - Handle Echo Request from Peer Entity. - - @param[in] thiz : Stack context - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleEchoReq(NW_IN NwGtpv2cStackT *thiz, - NW_IN uint32_t msgType, - NW_IN uint8_t* msgBuf, - NW_IN uint32_t msgBufLen, - NW_IN uint16_t peerPort, - NW_IN uint32_t peerIp) -{ - NwRcT rc; - uint32_t seqNum = 0; - NwGtpv2cMsgHandleT hMsg = 0; - - seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; - - /* Send Echo Response */ - - rc = nwGtpv2cMsgNew( (NwGtpv2cStackHandleT)thiz, - NW_FALSE, /* TEID present flag */ - NW_GTP_ECHO_RSP, /* Msg Type */ - 0x00, /* TEID */ - seqNum, /* Seq Number */ - (&hMsg)); - - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgAddIeTV1(hMsg, NW_GTPV2C_IE_RECOVERY, 0, thiz->restartCounter); - - NW_LOG(thiz, NW_LOG_LEVEL_ERRO, "Sending NW_GTP_ECHO_RSP message to "NW_IPV4_ADDR":%u with seq %u", NW_IPV4_ADDR_FORMAT(peerIp), peerPort, (seqNum)); - - rc = nwGtpv2cCreateAndSendMsg(thiz, - (seqNum), - peerIp, - peerPort, - (NwGtpv2cMsgT*) hMsg); - - rc = nwGtpv2cMsgDelete((NwGtpv2cStackHandleT)thiz, hMsg); - NW_ASSERT(NW_OK == rc); - - return rc; -} - -/** - Handle Initial Request from Peer Entity. - - @param[in] thiz : Stack context - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleInitialReq(NW_IN NwGtpv2cStackT *thiz, - NW_IN uint32_t msgType, - NW_IN uint8_t* msgBuf, - NW_IN uint32_t msgBufLen, - NW_IN uint16_t peerPort, - NW_IN uint32_t peerIp) -{ - NwRcT rc; - uint32_t seqNum = 0; - uint32_t teidLocal = 0; - NwGtpv2cTrxnT *pTrxn; - NwGtpv2cTunnelT *pLocalTunnel, keyTunnel; - NwGtpv2cMsgHandleT hMsg = 0; - NwGtpv2cUlpTunnelHandleT hUlpTunnel; - NwGtpv2cErrorT error; - - teidLocal = *((uint32_t*)(msgBuf + 4)); - - if(teidLocal) { - keyTunnel.teid = ntohl(teidLocal); - keyTunnel.ipv4AddrRemote = peerIp; - pLocalTunnel = RB_FIND(NwGtpv2cTunnelMap, &(thiz->tunnelMap), &keyTunnel); - - if(!pLocalTunnel) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Request message received on non-existent teid 0x%x from peer 0x%x received! Discarding.", ntohl(teidLocal), htonl(peerIp)); - return NW_OK; - } - - hUlpTunnel = pLocalTunnel->hUlpTunnel; - } else { - hUlpTunnel = 0; - } - - seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; - pTrxn = nwGtpv2cTrxnOutstandingRxNew(thiz, ntohl(teidLocal), peerIp, peerPort, (seqNum)); - - if(pTrxn) { - - rc = nwGtpv2cMsgFromBufferNew((NwGtpv2cStackHandleT)thiz, msgBuf, msgBufLen, &(hMsg)); - - NW_ASSERT(thiz->pGtpv2cMsgIeParseInfo[msgType]); - - rc = nwGtpv2cMsgIeParse(thiz->pGtpv2cMsgIeParseInfo[msgType], hMsg, &error); - - if(rc != NW_OK) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Malformed request message received on TEID %u from peer 0x%x. Notifying ULP.", ntohl(teidLocal), htonl(peerIp)); - } - - rc = nwGtpv2cSendInitialReqIndToUlp( thiz, - &error, - pTrxn, - hUlpTunnel, - msgType, - peerIp, - peerPort, - hMsg); - } - - return NW_OK; -} - -/** - Handle Triggered Response from Peer Entity. - - @param[in] thiz : Stack context - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cHandleTriggeredRsp(NW_IN NwGtpv2cStackT *thiz, - NW_IN uint32_t msgType, - NW_IN uint8_t* msgBuf, - NW_IN uint32_t msgBufLen, - NW_IN uint16_t peerPort, - NW_IN uint32_t peerIp) -{ - NwRcT rc; - NwGtpv2cTrxnT *pTrxn, keyTrxn; - NwGtpv2cMsgHandleT hMsg = 0; - NwGtpv2cErrorT error; - - keyTrxn.seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8;; - keyTrxn.peerIp = peerIp; - - pTrxn = RB_FIND(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), &keyTrxn); - - if(pTrxn) { - uint32_t hUlpTrxn; - uint32_t hUlpTunnel; - - hUlpTrxn = pTrxn->hUlpTrxn; - hUlpTunnel = (pTrxn->hTunnel ? ((NwGtpv2cTunnelT*)(pTrxn->hTunnel))->hUlpTunnel : 0); - - RB_REMOVE(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), pTrxn); - rc = nwGtpv2cTrxnDelete(&pTrxn); - NW_ASSERT(NW_OK == rc); - - NW_ASSERT(msgBuf && msgBufLen); - rc = nwGtpv2cMsgFromBufferNew((NwGtpv2cStackHandleT)thiz, msgBuf, msgBufLen, &(hMsg)); - - NW_ASSERT(thiz->pGtpv2cMsgIeParseInfo[msgType]); - rc = nwGtpv2cMsgIeParse(thiz->pGtpv2cMsgIeParseInfo[msgType], hMsg, &error); - - if(rc != NW_OK) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Malformed message received on TEID %u from peer 0x%x. Notifying ULP.", ntohl((*((uint32_t*)(msgBuf + 4)))), htonl(peerIp)); - } - - rc = nwGtpv2cSendTriggeredRspIndToUlp( thiz, - &error, - hUlpTrxn, - hUlpTunnel, - msgType, - hMsg); - } else { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Response message without a matching outstanding request received! Discarding."); - rc = NW_OK; - } - - return rc; -} - -/*--------------------------------------------------------------------------* - * P U B L I C F U N C T I O N S * - *--------------------------------------------------------------------------*/ - -/** - * Constructor - */ - -NwRcT -nwGtpv2cInitialize( NW_INOUT NwGtpv2cStackHandleT* hGtpcStackHandle) -{ - NwRcT rc = NW_OK; - NwGtpv2cStackT* thiz; - - thiz = (NwGtpv2cStackT*) malloc( sizeof(NwGtpv2cStackT)); - - memset(thiz, 0, sizeof(NwGtpv2cStackT)); - - if(thiz) { - thiz->id = (uint32_t) thiz; - thiz->seqNum = ((uint32_t) thiz) & 0x0000FFFF; - - RB_INIT(&(thiz->tunnelMap)); - RB_INIT(&(thiz->outstandingTxSeqNumMap)); - RB_INIT(&(thiz->outstandingRxSeqNumMap)); - RB_INIT(&(thiz->activeTimerList)); - - thiz->hTmrMinHeap = (NwHandleT) nwGtpv2cTmrMinHeapNew(10000); - - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_ECHO_RSP); - - /* For S11 interface */ - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_CREATE_SESSION_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_CREATE_SESSION_RSP); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_DELETE_SESSION_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_DELETE_SESSION_RSP); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_MODIFY_BEARER_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_MODIFY_BEARER_RSP); - - /* For S10 interface */ - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_FORWARD_RELOCATION_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_FORWARD_RELOCATION_RSP); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_FORWARD_RELOCATION_COMPLETE_NTF); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_FORWARD_RELOCATION_COMPLETE_ACK); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_CONTEXT_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_CONTEXT_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_CONTEXT_ACK); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_IDENTIFICATION_REQ); - NW_GTPV2C_INIT_MSG_IE_PARSE_INFO(thiz, NW_GTP_IDENTIFICATION_RSP); - - nwGtpv2cDisplayBanner(thiz); - } else { - rc = NW_FAILURE; - } - - *hGtpcStackHandle = (NwGtpv2cStackHandleT) thiz; - return rc; -} - - -/** - * Destructor - */ - -NwRcT -nwGtpv2cFinalize( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle) -{ - if(!hGtpcStackHandle) - return NW_FAILURE; - - free((void*)hGtpcStackHandle); - return NW_OK; -} - - -/** - * Set ULP entity - */ - -NwRcT -nwGtpv2cSetUlpEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUlpEntityT* pUlpEntity) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - if(!pUlpEntity) - return NW_FAILURE; - - thiz->ulp = *(pUlpEntity); - return NW_OK; -} - -/** - * Set UDP entity - */ - -NwRcT -nwGtpv2cSetUdpEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUdpEntityT* pUdpEntity) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - if(!pUdpEntity) - return NW_FAILURE; - - thiz->udp = *(pUdpEntity); - return NW_OK; -} - -/** - * Set MEM MGR entity - */ - -NwRcT -nwGtpv2cSetMemMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMemMgrEntityT* pMemMgrEntity) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - if(!pMemMgrEntity) - return NW_FAILURE; - - thiz->memMgr = *(pMemMgrEntity); - return NW_OK; -} - -/** - * Set TMR MGR entity - */ - -NwRcT -nwGtpv2cSetTimerMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cTimerMgrEntityT* pTmrMgrEntity) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - if(!pTmrMgrEntity) - return NW_FAILURE; - - thiz->tmrMgr = *(pTmrMgrEntity); - return NW_OK; -} - - -/** - * Set LOG MGR entity - */ - -NwRcT -nwGtpv2cSetLogMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cLogMgrEntityT* pLogMgrEntity) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - if(!pLogMgrEntity) - return NW_FAILURE; - - thiz->logMgr = *(pLogMgrEntity); - return NW_OK; -} - -/** - Set log level for the stack. - */ - -NwRcT -nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint32_t logLevel) -{ - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - thiz->logLevel = logLevel; - return NW_OK; -} - -/** - * Process Request from Udp Layer - */ - -NwRcT -nwGtpv2cProcessUdpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t* udpData, - NW_IN uint32_t udpDataLen, - NW_IN uint16_t peerPort, - NW_IN uint32_t peerIp) -{ - NwRcT rc; - NwGtpv2cStackT* thiz; - uint16_t msgType; - - thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - NW_ASSERT(thiz); - - NW_ENTER(thiz); - - if(udpDataLen < NW_GTPV2C_MINIMUM_HEADER_SIZE) { - /* - * TS 29.274 Section 7.7.3: - * If a GTP entity receives a message, which is too short to - * contain the respective GTPv2 header, the GTP-PDU shall be - * silently discarded - */ - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received message too small! Discarding."); - return NW_OK; - } - - if( (ntohs(*((uint16_t*)((uint8_t*)udpData + 2))) /* Length */ - + ((*((uint8_t*)(udpData)) & 0x08) ? 4 : 0) /* Extra Header length if TEID present */) > udpDataLen) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received message with errneous length of %u against expected length of %u! Discarding", udpDataLen, - ntohs(*((uint16_t*)((uint8_t*)udpData + 2))) + ((*((uint8_t*)(udpData)) & 0x08) ? 4 : 0)); - return NW_OK; - } - - if(((*((uint8_t*)(udpData)) & 0xE0) >> 5) != NW_GTP_VERSION) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received unsupported GTP version '%u' message! Discarding.", ((*((uint8_t*)(udpData)) & 0xE0) >> 5)); - /* Send Version Not Supported Message to peer */ - rc = nwGtpv2cSendVersionNotSupportedInd( - thiz, - peerIp, - peerPort, - *((uint32_t*)(udpData + ((*((uint8_t*)(udpData)) & 0x08) ? 8 : 4))) /* Seq Num */); - - return NW_OK; - } - - msgType = *((uint8_t*)(udpData + 1)); - - switch(msgType) { - case NW_GTP_ECHO_REQ: { - rc = nwGtpv2cHandleEchoReq(thiz, msgType, udpData, udpDataLen, peerPort, peerIp); - } - break; - - case NW_GTP_CREATE_SESSION_REQ: - case NW_GTP_MODIFY_BEARER_REQ: - case NW_GTP_DELETE_SESSION_REQ: - case NW_GTP_CREATE_BEARER_REQ: - case NW_GTP_UPDATE_BEARER_REQ: - case NW_GTP_DELETE_BEARER_REQ: { - rc = nwGtpv2cHandleInitialReq(thiz, msgType, udpData, udpDataLen, peerPort, peerIp); - } - break; - - case NW_GTP_ECHO_RSP: - case NW_GTP_CREATE_SESSION_RSP: - case NW_GTP_MODIFY_BEARER_RSP: - case NW_GTP_DELETE_SESSION_RSP: - case NW_GTP_CREATE_BEARER_RSP: - case NW_GTP_UPDATE_BEARER_RSP: - case NW_GTP_DELETE_BEARER_RSP: { - rc = nwGtpv2cHandleTriggeredRsp(thiz, msgType, udpData, udpDataLen, peerPort, peerIp); - } - break; - - default: { - /* - * TS 29.274 Section 7.7.4: - * If a GTP entity receives a message with an unknown Message Type - * value, it shall silently discard the message. - */ - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received unknown message type %u from UDP! Ignoring.", msgType); - rc = NW_OK; - } - } - - NW_LEAVE(thiz); - return rc; -} - - -/* - * Process Request from Upper Layer - */ - -NwRcT -nwGtpv2cProcessUlpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cUlpApiT *pUlpReq) -{ - NwRcT rc; - NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; - - NW_ASSERT(thiz); - NW_ASSERT(pUlpReq != NULL); - - NW_ENTER(thiz); - - switch(pUlpReq->apiType & 0x00FFFFFFL) { - case NW_GTPV2C_ULP_API_INITIAL_REQ: { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received initial request from ulp"); - rc = nwGtpv2cHandleUlpInitialReq(thiz, pUlpReq); - } - break; - - case NW_GTPV2C_ULP_API_TRIGGERED_REQ: { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received triggered request from ulp"); - rc = nwGtpv2cHandleUlpTriggeredReq(thiz, pUlpReq); - } - break; - - case NW_GTPV2C_ULP_API_TRIGGERED_RSP: { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received triggered response from ulp"); - rc = nwGtpv2cHandleUlpTriggeredRsp(thiz, pUlpReq); - } - break; - - case NW_GTPV2C_ULP_CREATE_LOCAL_TUNNEL: { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received create local tunnel from ulp"); - rc = nwGtpv2cHandleUlpCreateLocalTunnel(thiz, pUlpReq); - } - break; - - case NW_GTPV2C_ULP_DELETE_LOCAL_TUNNEL: { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received delete local tunnel from ulp"); - rc = nwGtpv2cHandleUlpDeleteLocalTunnel(thiz, pUlpReq); - } - break; - - default: { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received unhandled API 0x%x from ULP! Ignoring.", pUlpReq->apiType); - rc = NW_FAILURE; - } - break; - } - - NW_LEAVE(thiz); - - return rc; -} - -/** - * Process Timer timeout Request from Timer ULP Manager - */ - -NwRcT -nwGtpv2cProcessTimeoutOld(void* arg) -{ - NwRcT rc; - NwGtpv2cStackT* thiz; - NwGtpv2cTimeoutInfoT* timeoutInfo = (NwGtpv2cTimeoutInfoT*) arg; - NwGtpv2cTimeoutInfoT* pNextTimeoutInfo; - struct timeval tv; - - NW_ASSERT(timeoutInfo != NULL); - thiz = (NwGtpv2cStackT*) (((NwGtpv2cTimeoutInfoT*) timeoutInfo)->hStack); - - NW_ASSERT(thiz != NULL); - - NW_ENTER(thiz); - - if(thiz->activeTimerInfo == timeoutInfo) { - thiz->activeTimerInfo = NULL; - RB_REMOVE(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - rc = ((timeoutInfo)->timeoutCallbackFunc) (timeoutInfo->timeoutArg); - - } else { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, - "Received timeout event from ULP for non-existent timeoutInfo 0x%p and activeTimer 0x%p!", - timeoutInfo, thiz->activeTimerInfo); - return NW_OK; - } - - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - - for ((timeoutInfo) = RB_MIN(NwGtpv2cActiveTimerList, &(thiz->activeTimerList)); - (timeoutInfo) != NULL; ) - - { - if(NW_GTPV2C_TIMER_CMP_P(&timeoutInfo->tvTimeout, &tv, >)) - break; - - pNextTimeoutInfo = RB_NEXT(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - RB_REMOVE(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - rc = ((timeoutInfo)->timeoutCallbackFunc) (timeoutInfo->timeoutArg); - - timeoutInfo = pNextTimeoutInfo; - } - - /* activeTimerInfo may be reset by the timeoutCallbackFunc call above */ - if(thiz->activeTimerInfo == NULL) { - timeoutInfo = RB_MIN(NwGtpv2cActiveTimerList, &(thiz->activeTimerList)); - - if(timeoutInfo) { - NW_GTPV2C_TIMER_SUB(&timeoutInfo->tvTimeout, &tv, &tv); - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, tv.tv_sec, tv.tv_usec, timeoutInfo->tmrType, (void*)timeoutInfo, &timeoutInfo->hTimer); - NW_ASSERT(NW_OK == rc); - - thiz->activeTimerInfo = timeoutInfo; - } - } - - NW_LEAVE(thiz); - - return rc; -} - -NwRcT -nwGtpv2cProcessTimeout(void* arg) -{ - NwRcT rc; - NwGtpv2cStackT* thiz; - NwGtpv2cTimeoutInfoT* timeoutInfo = (NwGtpv2cTimeoutInfoT*) arg; - struct timeval tv; - - NW_ASSERT(timeoutInfo != NULL); - - thiz = (NwGtpv2cStackT*) (timeoutInfo->hStack); - - NW_ASSERT(thiz != NULL); - NW_ENTER(thiz); - - if(thiz->activeTimerInfo == timeoutInfo) { - thiz->activeTimerInfo = NULL; - rc = nwGtpv2cTmrMinHeapRemove(thiz->hTmrMinHeap, timeoutInfo->timerMinHeapIndex); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - rc = ((timeoutInfo)->timeoutCallbackFunc) (timeoutInfo->timeoutArg); - } else { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received timeout event from ULP for " - "non-existent timeoutInfo 0x%p and activeTimer 0x%p!", - timeoutInfo, thiz->activeTimerInfo); - - NW_LEAVE(thiz); - - return NW_OK; - } - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - - //printf("------ Start -------\n"); - timeoutInfo = nwGtpv2cTmrMinHeapPeek(thiz->hTmrMinHeap); - - while((timeoutInfo) != NULL) { - if(NW_GTPV2C_TIMER_CMP_P(&timeoutInfo->tvTimeout, &tv, >)) - break; - - rc = nwGtpv2cTmrMinHeapRemove(thiz->hTmrMinHeap, timeoutInfo->timerMinHeapIndex); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - rc = ((timeoutInfo)->timeoutCallbackFunc) (timeoutInfo->timeoutArg); - - timeoutInfo = nwGtpv2cTmrMinHeapPeek(thiz->hTmrMinHeap); - //printf("-- %p --\n", timeoutInfo); - } - - //printf("------ End -------\n"); - - /* activeTimerInfo may be reset by the timeoutCallbackFunc call above */ - if(thiz->activeTimerInfo == NULL) { - timeoutInfo = nwGtpv2cTmrMinHeapPeek(thiz->hTmrMinHeap); - - if(timeoutInfo) { - NW_GTPV2C_TIMER_SUB(&timeoutInfo->tvTimeout, &tv, &tv); - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, tv.tv_sec, tv.tv_usec, timeoutInfo->tmrType, (void*)timeoutInfo, &timeoutInfo->hTimer); - NW_ASSERT(NW_OK == rc); - - thiz->activeTimerInfo = timeoutInfo; - } - } - - NW_LEAVE(thiz); - - return rc; -} - -/** - * Start Timer with ULP Timer Manager - */ - - - - - -NwRcT -nwGtpv2cStartTimer(NwGtpv2cStackT* thiz, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - NwRcT (*timeoutCallbackFunc)(void*), - void* timeoutCallbackArg, - NwGtpv2cTimerHandleT *phTimer) -{ - NwRcT rc = NW_OK; - struct timeval tv; - NwGtpv2cTimeoutInfoT *timeoutInfo; - NwGtpv2cTimeoutInfoT *collision; - - NW_ENTER(thiz); - - if(gpGtpv2cTimeoutInfoPool) { - timeoutInfo = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = gpGtpv2cTimeoutInfoPool->next; - } else { - NW_GTPV2C_MALLOC(thiz, sizeof(NwGtpv2cTimeoutInfoT), timeoutInfo, NwGtpv2cTimeoutInfoT*); - } - - if(timeoutInfo) { - timeoutInfo->tmrType = tmrType; - timeoutInfo->timeoutArg = timeoutCallbackArg; - timeoutInfo->timeoutCallbackFunc = timeoutCallbackFunc; - timeoutInfo->hStack = (NwGtpv2cStackHandleT)thiz; - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - NW_ASSERT(gettimeofday(&timeoutInfo->tvTimeout, NULL) == 0); - - timeoutInfo->tvTimeout.tv_sec = timeoutSec; - timeoutInfo->tvTimeout.tv_usec = timeoutUsec; - NW_GTPV2C_TIMER_ADD(&tv, &timeoutInfo->tvTimeout, &timeoutInfo->tvTimeout); - - rc = nwGtpv2cTmrMinHeapInsert(thiz->hTmrMinHeap, timeoutInfo); -#if 0 - - do { - collision = RB_INSERT(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - - if(!collision) - break; - - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "timer collision!"); - timeoutInfo->tvTimeout.tv_usec++; /* HACK: In case there is a collision, schedule this event 1 usec later */ - - if(timeoutInfo->tvTimeout.tv_usec > (999999 /*1000000 - 1*/)) { - timeoutInfo->tvTimeout.tv_usec = 0; - timeoutInfo->tvTimeout.tv_sec++; - } - } while (1); - -#endif - - if(thiz->activeTimerInfo) { - if(NW_GTPV2C_TIMER_CMP_P(&(thiz->activeTimerInfo->tvTimeout), &(timeoutInfo->tvTimeout), >)) { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - thiz->activeTimerInfo->hTimer, thiz->activeTimerInfo); - rc = thiz->tmrMgr.tmrStopCallback(thiz->tmrMgr.tmrMgrHandle, thiz->activeTimerInfo->hTimer); - NW_ASSERT(NW_OK == rc); - } else { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Already Started timer 0x%"PRIxPTR" for info 0x%p!", - thiz->activeTimerInfo->hTimer, thiz->activeTimerInfo); - *phTimer = (NwGtpv2cTimerHandleT) timeoutInfo; - NW_LEAVE(thiz); - return NW_OK; - } - } - - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, - timeoutSec, - timeoutUsec, - tmrType, - (void*)timeoutInfo, - &timeoutInfo->hTimer); - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Started timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - NW_ASSERT(NW_OK == rc); - thiz->activeTimerInfo = timeoutInfo; - - } - - *phTimer = (NwGtpv2cTimerHandleT) timeoutInfo; - NW_LEAVE(thiz); - - return rc; -} - -NwRcT -nwGtpv2cStartTimerOld(NwGtpv2cStackT* thiz, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - NwRcT (*timeoutCallbackFunc)(void*), - void* timeoutCallbackArg, - NwGtpv2cTimerHandleT *phTimer) -{ - NwRcT rc = NW_OK; - struct timeval tv; - NwGtpv2cTimeoutInfoT *timeoutInfo; - NwGtpv2cTimeoutInfoT *collision; - - NW_ASSERT(thiz != NULL); - - NW_ENTER(thiz); - - if(gpGtpv2cTimeoutInfoPool) { - timeoutInfo = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = gpGtpv2cTimeoutInfoPool->next; - } else { - NW_GTPV2C_MALLOC(thiz, sizeof(NwGtpv2cTimeoutInfoT), timeoutInfo, NwGtpv2cTimeoutInfoT*); - } - - if(timeoutInfo) { - timeoutInfo->tmrType = tmrType; - timeoutInfo->timeoutArg = timeoutCallbackArg; - timeoutInfo->timeoutCallbackFunc = timeoutCallbackFunc; - timeoutInfo->hStack = (NwGtpv2cStackHandleT)thiz; - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - NW_ASSERT(gettimeofday(&timeoutInfo->tvTimeout, NULL) == 0); - - timeoutInfo->tvTimeout.tv_sec = timeoutSec; - timeoutInfo->tvTimeout.tv_usec = timeoutUsec; - NW_GTPV2C_TIMER_ADD(&tv, &timeoutInfo->tvTimeout, &timeoutInfo->tvTimeout); - - do { - collision = RB_INSERT(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - - if(!collision) - break; - - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "timer collision!"); - timeoutInfo->tvTimeout.tv_usec++; /* HACK: In case there is a collision, schedule this event 1 usec later */ - - if(timeoutInfo->tvTimeout.tv_usec > (999999 /*1000000 - 1*/)) { - timeoutInfo->tvTimeout.tv_usec = 0; - timeoutInfo->tvTimeout.tv_sec++; - } - } while (1); - - if(thiz->activeTimerInfo) { - if(NW_GTPV2C_TIMER_CMP_P(&(thiz->activeTimerInfo->tvTimeout), &(timeoutInfo->tvTimeout), >)) { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - thiz->activeTimerInfo->hTimer, thiz->activeTimerInfo); - rc = thiz->tmrMgr.tmrStopCallback(thiz->tmrMgr.tmrMgrHandle, thiz->activeTimerInfo->hTimer); - NW_ASSERT(NW_OK == rc); - } else { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Already Started timer 0x%"PRIxPTR" for info 0x%p!", - thiz->activeTimerInfo->hTimer, thiz->activeTimerInfo); - *phTimer = (NwGtpv2cTimerHandleT) timeoutInfo; - NW_LEAVE(thiz); - return NW_OK; - } - } - - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, timeoutSec, timeoutUsec, tmrType, (void*)timeoutInfo, &timeoutInfo->hTimer); - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Started timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - NW_ASSERT(NW_OK == rc); - thiz->activeTimerInfo = timeoutInfo; - - } - - *phTimer = (NwGtpv2cTimerHandleT) timeoutInfo; - NW_LEAVE(thiz); - - return rc; -} - -/** - * Stop Timer with ULP Timer Manager - */ -NwRcT -nwGtpv2cStopTimer(NwGtpv2cStackT* thiz, - NwGtpv2cTimerHandleT hTimer) -{ - NwRcT rc = NW_OK; - struct timeval tv; - NwGtpv2cTimeoutInfoT *timeoutInfo; - - NW_ASSERT(thiz != NULL); - - NW_ENTER(thiz); - - timeoutInfo = (NwGtpv2cTimeoutInfoT*) hTimer; - - rc = nwGtpv2cTmrMinHeapRemove(thiz->hTmrMinHeap, timeoutInfo->timerMinHeapIndex); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - - if(thiz->activeTimerInfo == timeoutInfo) { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - rc = thiz->tmrMgr.tmrStopCallback(thiz->tmrMgr.tmrMgrHandle, timeoutInfo->hTimer); - thiz->activeTimerInfo = NULL; - NW_ASSERT(NW_OK == rc); - - timeoutInfo = nwGtpv2cTmrMinHeapPeek(thiz->hTmrMinHeap); - - if(timeoutInfo) { - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - - if(NW_GTPV2C_TIMER_CMP_P(&timeoutInfo->tvTimeout, &tv, <)) { - thiz->activeTimerInfo = timeoutInfo; - rc = nwGtpv2cProcessTimeout(timeoutInfo); - NW_ASSERT(NW_OK == rc); - } else { - NW_GTPV2C_TIMER_SUB(&timeoutInfo->tvTimeout, &tv, &tv); - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, tv.tv_sec, tv.tv_usec, timeoutInfo->tmrType, (void*)timeoutInfo, &timeoutInfo->hTimer); - NW_ASSERT(NW_OK == rc); - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Started timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - thiz->activeTimerInfo = timeoutInfo; - } - } - } - - NW_LEAVE(thiz); - - return rc; -} - -NwRcT -nwGtpv2cStopTimerOld(NwGtpv2cStackT* thiz, - NwGtpv2cTimerHandleT hTimer) -{ - NwRcT rc = NW_OK; - struct timeval tv; - NwGtpv2cTimeoutInfoT *timeoutInfo; - - NW_ASSERT(thiz != NULL); - - NW_ENTER(thiz); - - timeoutInfo = (NwGtpv2cTimeoutInfoT*) hTimer; - - RB_REMOVE(NwGtpv2cActiveTimerList, &(thiz->activeTimerList), timeoutInfo); - timeoutInfo->next = gpGtpv2cTimeoutInfoPool; - gpGtpv2cTimeoutInfoPool = timeoutInfo; - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - - if(thiz->activeTimerInfo == timeoutInfo) { - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Stopping active timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - rc = thiz->tmrMgr.tmrStopCallback(thiz->tmrMgr.tmrMgrHandle, timeoutInfo->hTimer); - thiz->activeTimerInfo = NULL; - NW_ASSERT(NW_OK == rc); - - timeoutInfo = RB_MIN(NwGtpv2cActiveTimerList, &(thiz->activeTimerList)); - - if(timeoutInfo) { - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - - if(NW_GTPV2C_TIMER_CMP_P(&timeoutInfo->tvTimeout, &tv, <)) { - thiz->activeTimerInfo = timeoutInfo; - rc = nwGtpv2cProcessTimeout(timeoutInfo); - NW_ASSERT(NW_OK == rc); - } else { - NW_GTPV2C_TIMER_SUB(&timeoutInfo->tvTimeout, &tv, &tv); - rc = thiz->tmrMgr.tmrStartCallback(thiz->tmrMgr.tmrMgrHandle, tv.tv_sec, tv.tv_usec, timeoutInfo->tmrType, (void*)timeoutInfo, &timeoutInfo->hTimer); - NW_ASSERT(NW_OK == rc); - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Started timer 0x%"PRIxPTR" for info 0x%p!", - timeoutInfo->hTimer, timeoutInfo); - thiz->activeTimerInfo = timeoutInfo; - } - } - } - - NW_LEAVE(thiz); - - return rc; -} - -#ifdef __cplusplus -} -#endif - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c deleted file mode 100644 index e566a08594..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c +++ /dev/null @@ -1,750 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwLog.h" -#include "NwUtils.h" -#include "NwGtpv2cLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/*----------------------------------------------------------------------------* - * P R I V A T E F U N C T I O N S * - *----------------------------------------------------------------------------*/ - -static NwGtpv2cMsgT* gpGtpv2cMsgPool = NULL; - -/*----------------------------------------------------------------------------* - * P U B L I C F U N C T I O N S * - *----------------------------------------------------------------------------*/ - -NwRcT -nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t teidPresent, - NW_IN uint8_t msgType, - NW_IN uint32_t teid, - NW_IN uint32_t seqNum, - NW_OUT NwGtpv2cMsgHandleT *phMsg) -{ - NwGtpv2cStackT* pStack = (NwGtpv2cStackT*) hGtpcStackHandle; - NwGtpv2cMsgT *pMsg; - - NW_ASSERT(pStack); - - if(gpGtpv2cMsgPool) { - pMsg = gpGtpv2cMsgPool; - gpGtpv2cMsgPool = gpGtpv2cMsgPool->next; - } else { - NW_GTPV2C_MALLOC(pStack, sizeof(NwGtpv2cMsgT), pMsg, NwGtpv2cMsgT*); - } - - if(pMsg) { - pMsg->version = NW_GTP_VERSION; - pMsg->teidPresent = teidPresent; - pMsg->msgType = msgType; - pMsg->teid = teid; - pMsg->seqNum = seqNum; - pMsg->msgLen = (NW_GTPV2C_EPC_SPECIFIC_HEADER_SIZE - (teidPresent ? 0 : 4)); - - pMsg->groupedIeEncodeStack.top = 0; - pMsg->hStack = hGtpcStackHandle; - - *phMsg = (NwGtpv2cMsgHandleT) pMsg; - NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Created message %p!", pMsg); - return NW_OK; - } - - return NW_FAILURE; -} - -NwRcT -nwGtpv2cMsgFromBufferNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t* pBuf, - NW_IN uint32_t bufLen, - NW_OUT NwGtpv2cMsgHandleT *phMsg) -{ - NwGtpv2cStackT* pStack = (NwGtpv2cStackT*) hGtpcStackHandle; - NwGtpv2cMsgT *pMsg; - - NW_ASSERT(pStack); - - if(gpGtpv2cMsgPool) { - pMsg = gpGtpv2cMsgPool; - gpGtpv2cMsgPool = gpGtpv2cMsgPool->next; - } else { - NW_GTPV2C_MALLOC(pStack, sizeof(NwGtpv2cMsgT), pMsg, NwGtpv2cMsgT*); - } - - if(pMsg) { - *phMsg = (NwGtpv2cMsgHandleT) pMsg; - memcpy(pMsg->msgBuf, pBuf, bufLen); - pMsg->msgLen = bufLen; - - pMsg->version = ((*pBuf) & 0xE0) >> 5; - pMsg->teidPresent = ((*pBuf) & 0x08) >> 3; - pBuf++; - - pMsg->msgType = *(pBuf); - pBuf += 3; - - if(pMsg->teidPresent) { - pMsg->teid = ntohl(*((uint32_t*)(pBuf))); - pBuf += 4; - } - - memcpy(((uint8_t*)&pMsg->seqNum) + 1, pBuf, 3); - pMsg->seqNum = ntohl(pMsg->seqNum); - - pMsg->hStack = hGtpcStackHandle; - NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Created message %p!", pMsg); - return NW_OK; - } - - return NW_FAILURE; -} - -NwRcT -nwGtpv2cMsgDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cStackT* pStack = (NwGtpv2cStackT*) hGtpcStackHandle; - NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Purging message %"PRIxPTR"!", hMsg); - - ((NwGtpv2cMsgT*)hMsg)->next = gpGtpv2cMsgPool; - gpGtpv2cMsgPool = (NwGtpv2cMsgT*) hMsg; - - return NW_OK; -} - -/** - * Set TEID for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] teid: TEID value. - */ - -NwRcT -nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t teid) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - thiz->teid = teid; - return NW_OK; -} - -/** - * Set TEID present flag for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] teidPesent: Flag boolean value. - */ - -NwRcT -nwGtpv2cMsgSetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwBoolT teidPresent) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - thiz->teidPresent = teidPresent; - return NW_OK; -} - -/** - * Set sequence for gtpv2c message. - * - * @param[in] hMsg : Message handle. - * @param[in] seqNum: Flag boolean value. - */ - -NwRcT -nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t seqNum) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - thiz->seqNum = seqNum; - return NW_OK; -} - -/** - * Get TEID present for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetTeid(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - return (thiz->teid); -} - -/** - * Get TEID present for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -NwBoolT -nwGtpv2cMsgGetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - return (thiz->teidPresent); -} - -/** - * Get sequence number for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - return (thiz->seqNum); -} - -/** - * Get msg type for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetMsgType(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - return (thiz->msgType); -} - -/** - * Get msg type for gtpv2c message. - * - * @param[in] hMsg : Message handle. - */ - -uint32_t -nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - return (thiz->msgLen); -} - - -NwRcT -nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint8_t value) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv1T *pIe; - - pIe = (NwGtpv2cIeTv1T*) (pMsg->msgBuf + pMsg->msgLen); - - pIe->t = type; - pIe->l = htons(0x0001); - pIe->i = instance & 0x00ff; - pIe->v = value; - - pMsg->msgLen += sizeof(NwGtpv2cIeTv1T); - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint16_t value) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv2T *pIe; - - pIe = (NwGtpv2cIeTv2T*) (pMsg->msgBuf + pMsg->msgLen); - - pIe->t = type; - pIe->l = htons(0x0002); - pIe->i = instance & 0x00ff; - pIe->v = htons(value); - - pMsg->msgLen += sizeof(NwGtpv2cIeTv2T); - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint32_t value) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv4T *pIe; - - pIe = (NwGtpv2cIeTv4T*) (pMsg->msgBuf + pMsg->msgLen); - - pIe->t = type; - pIe->l = htons(0x0004); - pIe->i = instance & 0x00ff; - pIe->v = htonl(value); - - pMsg->msgLen += sizeof(NwGtpv2cIeTv4T); - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint16_t length, - NW_IN uint8_t instance, - NW_IN uint8_t* pVal) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - - pIe = (NwGtpv2cIeTlvT*) (pMsg->msgBuf + pMsg->msgLen); - - pIe->t = type; - pIe->l = htons(length); - pIe->i = instance & 0x00ff; - - memcpy(((uint8_t*)pIe) + 4, pVal, length); - pMsg->msgLen += (4 + length); - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgGroupedIeStart(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - - pIe = (NwGtpv2cIeTlvT*) (pMsg->msgBuf + pMsg->msgLen); - - pIe->t = type; - pIe->i = instance & 0x00ff; - pMsg->msgLen += (4); - pIe->l = (pMsg->msgLen); - - NW_ASSERT(pMsg->groupedIeEncodeStack.top < NW_GTPV2C_MAX_GROUPED_IE_DEPTH); - - pMsg->groupedIeEncodeStack.pIe[pMsg->groupedIeEncodeStack.top] = pIe; - pMsg->groupedIeEncodeStack.top++; - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgGroupedIeEnd(NW_IN NwGtpv2cMsgHandleT hMsg) -{ - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - - NW_ASSERT(pMsg->groupedIeEncodeStack.top > 0); - - pMsg->groupedIeEncodeStack.top--; - pIe = pMsg->groupedIeEncodeStack.pIe[pMsg->groupedIeEncodeStack.top]; - - pIe->l = htons(pMsg->msgLen - pIe->l); - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_IN uint8_t causeValue, - NW_IN uint8_t bitFlags, - NW_IN uint8_t offendingIeType, - NW_IN uint8_t offendingIeInstance) -{ - uint8_t causeBuf[8]; - - causeBuf[0] = causeValue; - causeBuf[1] = bitFlags; - - if(offendingIeType) { - causeBuf[2] = offendingIeType; - causeBuf[3] = 0; - causeBuf[4] = 0; - causeBuf[5] = (offendingIeInstance & 0x0f); - } - - return (nwGtpv2cMsgAddIe(hMsg, NW_GTPV2C_IE_CAUSE, (offendingIeType? 6 : 2), instance, causeBuf)); -} - -NwRcT -nwGtpv2cMsgAddIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_IN uint8_t ifType, - NW_IN uint32_t teidOrGreKey, - NW_IN uint32_t ipv4Addr, - NW_IN uint8_t* pIpv6Addr) -{ - - uint8_t fteidBuf[32]; - uint8_t *pFteidBuf = fteidBuf; - - fteidBuf[0] = (ifType & 0x1F); - pFteidBuf++; - - *((uint32_t*)(pFteidBuf)) = htonl((teidOrGreKey)); - pFteidBuf += 4; - - if(ipv4Addr) { - fteidBuf[0] |= (0x01 << 7); - *((uint32_t*)(pFteidBuf)) = htonl(ipv4Addr); - pFteidBuf += 4; - } - - if(pIpv6Addr) { - fteidBuf[0] |= (0x01 << 6); - memcpy((pFteidBuf), pIpv6Addr, 16); - pFteidBuf += 16; - } - - return (nwGtpv2cMsgAddIe(hMsg, NW_GTPV2C_IE_FTEID, (pFteidBuf - fteidBuf), instance, fteidBuf)); -} - - -NwBoolT -nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - - if((NwGtpv2cIeTv1T*) thiz->pIe[type][instance]) - return NW_TRUE; - - return NW_FALSE; -} - -NwRcT -nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint8_t* pVal) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv1T *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTv1T*) thiz->pIe[type][instance]; - - if(ntohs(pIe->l) != 0x01) - return NW_GTPV2C_IE_INCORRECT; - - if(pVal) *pVal = pIe->v; - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeTV2( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint16_t* pVal) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv2T *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTv2T*) thiz->pIe[type][instance]; - - if(ntohs(pIe->l) != 0x02) - return NW_GTPV2C_IE_INCORRECT; - - if(pVal) *pVal = ntohs(pIe->v); - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeTV4( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint32_t* pVal) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv4T *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTv4T*) thiz->pIe[type][instance]; - - if(ntohs(pIe->l) != 0x04) - return NW_GTPV2C_IE_INCORRECT; - - if(pVal) *pVal = ntohl(pIe->v); - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeTV8( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint64_t* pVal) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTv8T *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTv8T*) thiz->pIe[type][instance]; - - if(ntohs(pIe->l) != 0x08) - return NW_GTPV2C_IE_INCORRECT; - - if(pVal) *pVal = NW_NTOHLL((pIe->v)); - - return NW_OK; - } - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Cannot retrieve IE of type %u instance %u !", type, instance); - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeTlv( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_IN uint16_t maxLen, - NW_OUT uint8_t* pVal, - NW_OUT uint16_t* pLen) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTlvT*) thiz->pIe[type][instance]; - - if(ntohs(pIe->l) <= maxLen) { - if(pVal) memcpy(pVal, ((uint8_t*) pIe) + 4, ntohs(pIe->l)); - - if(pLen) *pLen = ntohs(pIe->l); - - return NW_OK; - } - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeTlvP( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t type, - NW_IN uint8_t instance, - NW_OUT uint8_t** ppVal, - NW_OUT uint16_t* pLen) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[type][instance]) { - pIe = (NwGtpv2cIeTlvT*) thiz->pIe[type][instance]; - - if(ppVal) *ppVal = ((uint8_t*) pIe) + 4; - - if(pLen) *pLen = ntohs(pIe->l); - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_OUT uint8_t* causeValue, - NW_OUT uint8_t* flags, - NW_OUT uint8_t* offendingIeType, - NW_OUT uint8_t* offendingIeInstance) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[NW_GTPV2C_IE_CAUSE][instance]) { - pIe = (NwGtpv2cIeTlvT*) thiz->pIe[NW_GTPV2C_IE_CAUSE][instance]; - *causeValue = *((uint8_t*)(((uint8_t*)pIe) + 4)); - *flags = *((uint8_t*)(((uint8_t*)pIe) + 5)); - - if(pIe->l == 6) { - *offendingIeType = *((uint8_t*)(((uint8_t*)pIe) + 6)); - *offendingIeType = *((uint8_t*)(((uint8_t*)pIe) + 8)); - } - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgGetIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN uint8_t instance, - NW_OUT uint8_t* ifType, - NW_OUT uint32_t* teidOrGreKey, - NW_OUT uint32_t* ipv4Addr, - NW_OUT uint8_t* pIpv6Addr) -{ - NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; - NwGtpv2cIeTlvT *pIe; - - NW_ASSERT(instance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - if(thiz->isIeValid[NW_GTPV2C_IE_FTEID][instance]) { - pIe = (NwGtpv2cIeTlvT*) thiz->pIe[NW_GTPV2C_IE_FTEID][instance]; - uint8_t flags; - uint8_t* pIeValue = ((uint8_t*) pIe) + 4; - flags = (*pIeValue) & 0xE0; - *ifType = (*pIeValue) & 0x1F; - pIeValue += 1; - - *teidOrGreKey = ntohl(*((uint32_t*)(pIeValue))); - pIeValue += 4; - - if(flags & 0x80) { - *ipv4Addr = ntohl(*((uint32_t*)(pIeValue))); - pIeValue += 4; - } - - return NW_OK; - } - - return NW_GTPV2C_IE_MISSING; -} - -NwRcT -nwGtpv2cMsgHexDump(NwGtpv2cMsgHandleT hMsg, FILE* fp) -{ - - NwGtpv2cMsgT* pMsg = (NwGtpv2cMsgT*) hMsg; - uint8_t* data = pMsg->msgBuf; - uint32_t size = pMsg->msgLen; - - unsigned char *p = (unsigned char*)data; - unsigned char c; - int n; - char bytestr[4] = {0}; - char addrstr[10] = {0}; - char hexstr[ 16*3 + 5] = {0}; - char charstr[16*1 + 5] = {0}; - fprintf((FILE*)fp, "\n"); - - for(n=1; n<=size; n++) { - if (n%16 == 1) { - /* store address for this line */ - snprintf(addrstr, sizeof(addrstr), "%.4lx", - ((unsigned long)p-(unsigned long)data) ); - } - - c = *p; - - if (isalnum(c) == 0) { - c = '.'; - } - - /* store hex str (for left side) */ - snprintf(bytestr, sizeof(bytestr), "%02X ", *p); - strncat(hexstr, bytestr, sizeof(hexstr)-strlen(hexstr)-1); - - /* store char str (for right side) */ - snprintf(bytestr, sizeof(bytestr), "%c", c); - strncat(charstr, bytestr, sizeof(charstr)-strlen(charstr)-1); - - if(n%16 == 0) { - /* line completed */ - fprintf((FILE*)fp, "[%4.4s] %-50.50s %s\n", addrstr, hexstr, charstr); - hexstr[0] = 0; - charstr[0] = 0; - } else if(n%8 == 0) { - /* half line: add whitespaces */ - strncat(hexstr, " ", sizeof(hexstr)-strlen(hexstr)-1); - strncat(charstr, " ", sizeof(charstr)-strlen(charstr)-1); - } - - p++; /* next byte */ - } - - if (strlen(hexstr) > 0) { - /* print rest of buffer if not empty */ - fprintf((FILE*)fp, "[%4.4s] %-50.50s %s\n", addrstr, hexstr, charstr); - - } - - fprintf((FILE*)fp, "\n"); - - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c deleted file mode 100644 index 22607df8aa..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c +++ /dev/null @@ -1,703 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwLog.h" -#include "NwUtils.h" -#include "NwGtpv2cLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct NwGtpv2cMsgIeInfo { - uint8_t ieType; - uint8_t ieMinLength; - uint8_t ieInstance; - uint8_t iePresence; - struct NwGtpv2cMsgIeInfo *pGroupedIeInfo; -} NwGtpv2cMsgIeInfoT; - -static -NwGtpv2cMsgIeInfoT createSessionReqBearerCtxtTobeCreatedIeInfoTbl[] = { - { NW_GTPV2C_IE_EBI , 1, NW_GTPV2C_IE_INSTANCE_ZERO , NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_BEARER_TFT , 0, NW_GTPV2C_IE_INSTANCE_ZERO , NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_THREE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_FOUR , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - { NW_GTPV2C_IE_BEARER_LEVEL_QOS, 18, NW_GTPV2C_IE_INSTANCE_ZERO , NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - // { NW_GTPV2C_IE_IMSI , 0, NW_GTPV2C_IE_INSTANCE_ZERO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL}, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT createSessionReqBearerCtxtTobeRemovedIeInfoTbl[] = { - { NW_GTPV2C_IE_IMSI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT echoRspIeInfoTbl[] = { - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY, NULL}, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT createSessionReqIeInfoTbl[] = { - { NW_GTPV2C_IE_IMSI , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_MSISDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_MEI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_RAT_TYPE , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_INDICATION , 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_APN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_APN_RESTRICTION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_SELECTION_MODE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_PDN_TYPE , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_PAA , 5, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_AMBR , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_EBI , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_PCO , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_TRACE_INFORMATION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_FQ_CSID , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_FQ_CSID , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , createSessionReqBearerCtxtTobeCreatedIeInfoTbl}, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, createSessionReqBearerCtxtTobeRemovedIeInfoTbl}, - { NW_GTPV2C_IE_SERVING_NETWORK, 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL}, - { NW_GTPV2C_IE_RECOVERY , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_CHARGING_CHARACTERISTICS, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_LDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_LDN , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT modifyBearerReqIeInfoTbl[] = { - { NW_GTPV2C_IE_MEI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_SERVING_NETWORK, 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL}, - { NW_GTPV2C_IE_ULI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RAT_TYPE , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_INDICATION , 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT deleteSessionReqIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_EBI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_ULI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PCO , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT createSessionRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_PAA , 5, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_APN_RESTRICTION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT modifyBearerRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_PAA , 5, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_APN_RESTRICTION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT deleteSessionRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PCO , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -/* Message sent over s10 interface */ -static -NwGtpv2cMsgIeInfoT identificationReqIeInfoTbl[] = { - { NW_GTPV2C_IE_GUTI , 6, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_COMPLETE_REQUEST_MESSAGE, 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_SERVING_NETWORK, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT identificationRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_IMSI , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_MM_CONTEXT , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_TRACE_INFORMATION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT contextReqIeInfoTbl[] = { - { NW_GTPV2C_IE_IMSI , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_GUTI , 5, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_ULI , 7, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PTMSI , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_COMPLETE_REQUEST_MESSAGE, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_UDP_SOURCE_PORT_NUMBER, 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RAT_TYPE , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_HOP_COUNTER , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_SERVING_NETWORK, 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_LDN , 3, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT contextRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_IMSI , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_MM_CONTEXT , 4, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_PDN_CONNECTION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_FQDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_TRACE_INFORMATION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_IP_ADDRESS , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_IP_ADDRESS , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL , NULL }, - { NW_GTPV2C_IE_RFSP_INDEX , 2, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_RFSP_INDEX , 2, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_UE_TIME_ZONE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_LDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT contextAckIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT forwardRelocationReqIeInfoTbl[] = { - { NW_GTPV2C_IE_IMSI , 8, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_PDN_CONNECTION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_FQDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_MM_CONTEXT , 4, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_TARGET_IDENTIFICATION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_IP_ADDRESS , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_IP_ADDRESS , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_SOURCE_IDENTIFICATION, 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_SELECTED_PLMN_ID, 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_TRACE_INFORMATION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_RFSP_INDEX , 2, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_RFSP_INDEX , 2, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_CSG_ID , 4, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_CSG_MEMBERSHIP_INDICATION, 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_UE_TIME_ZONE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_LDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_ADDITIONAL_MM_CTXT_FOR_SRVCC,0,NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_ADDITIONAL_FLAGS_FOR_SRVCC, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_MSISDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL_OPTIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0 } -}; - -static -NwGtpv2cMsgIeInfoT forwardRelocationRspIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_FTEID , 9, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_BEARER_CONTEXT , 0, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_ONE , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CONTAINER , 1, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_F_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_TWO , NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_LDN , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT forwardRelocationCompleteNtfIeInfoTbl[] = { - { NW_GTPV2C_IE_INDICATION , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_CONDITIONAL, NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -static -NwGtpv2cMsgIeInfoT forwardRelocationCompleteAckIeInfoTbl[] = { - { NW_GTPV2C_IE_CAUSE , 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY , NULL }, - { NW_GTPV2C_IE_RECOVERY , 1, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - { NW_GTPV2C_IE_PRIVATE_EXTENSION, 0, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_OPTIONAL , NULL }, - - /* Do not add below this */ - { 0, 0, 0} -}; - -/*----------------------------------------------------------------------------* - * P R I V A T E F U N C T I O N S * - *----------------------------------------------------------------------------*/ - -static uint32_t -nwGtpv2cMsgGroupedIeCount(NwGtpv2cMsgIeInfoT *pMsgIeInfo) -{ - uint32_t count = 0; - NwGtpv2cMsgIeInfoT *pGroupedIeInfo = pMsgIeInfo; - - while (pGroupedIeInfo++) { - if (pGroupedIeInfo->ieType == 0) { - break; - } - - count ++; - } - - return count; -} - -static NwRcT -nwGtpv2cMsgIeParseInfoUpdate(NwGtpv2cMsgIeParseInfoT *thiz, - NwGtpv2cMsgIeInfoT *pMsgIeInfo) -{ - uint32_t i, j; - - for (i = 0; pMsgIeInfo[i].ieType; i++) { - if (pMsgIeInfo[i].pGroupedIeInfo) { - NwGtpv2cGroupedIeParseInfoT *pMsgIeParseInfo; - - NW_GTPV2C_MALLOC(thiz->hStack, sizeof(NwGtpv2cGroupedIeParseInfoT), - pMsgIeParseInfo, NwGtpv2cGroupedIeParseInfoT*); - - pMsgIeParseInfo->groupedIeType = pMsgIeInfo[i].ieType; - pMsgIeParseInfo->hStack = thiz->hStack; - - for (j = 0; pMsgIeInfo[i].pGroupedIeInfo[j].ieType; j++) { - pMsgIeParseInfo->ieParseInfo[pMsgIeInfo[i].pGroupedIeInfo[j].ieType][pMsgIeInfo[i].pGroupedIeInfo[j].ieInstance].ieMinLength = - pMsgIeInfo[i].pGroupedIeInfo[j].ieMinLength; - pMsgIeParseInfo->ieParseInfo[pMsgIeInfo[i].pGroupedIeInfo[j].ieType][pMsgIeInfo[i].pGroupedIeInfo[j].ieInstance].iePresence = - pMsgIeInfo[i].pGroupedIeInfo[j].iePresence; - - if(pMsgIeInfo[i].pGroupedIeInfo[j].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) - pMsgIeParseInfo->mandatoryIeCount++; - } - - thiz->ieParseInfo[pMsgIeInfo[i].ieType][pMsgIeInfo[i].ieInstance].pGroupedIeInfo = pMsgIeParseInfo; - } else { - thiz->ieParseInfo[pMsgIeInfo[i].ieType][pMsgIeInfo[i].ieInstance].pGroupedIeInfo = NULL; - } - - thiz->ieParseInfo[pMsgIeInfo[i].ieType][pMsgIeInfo[i].ieInstance].iePresence = pMsgIeInfo[i].iePresence; - thiz->ieParseInfo[pMsgIeInfo[i].ieType][pMsgIeInfo[i].ieInstance].ieMinLength = pMsgIeInfo[i].ieMinLength; - - if(pMsgIeInfo[i].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) - thiz->mandatoryIeCount++; - } - - return NW_OK; -} - -static NwRcT -nwGtpv2cMsgGroupedIeParse(NW_IN NwGtpv2cGroupedIeParseInfoT* thiz, - NW_IN uint8_t ieType, - NW_IN uint16_t ieLength, - NW_IN uint8_t ieInstance, - NW_IN uint8_t *pIeValue) -{ - NW_ASSERT(thiz); - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_DEBG, "Received grouped IE %u with instance %u of length %u in msg-type %u!", - ieType, ieInstance, ieLength, thiz->groupedIeType); - - return NW_OK; -} - -/*----------------------------------------------------------------------------* - * P U B L I C F U N C T I O N S * - *----------------------------------------------------------------------------*/ - -/** - * Constructor - * @return Pointer to the object on success. - */ - -NwGtpv2cMsgIeParseInfoT* -nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, uint8_t msgType) -{ - NwRcT rc; - NwGtpv2cMsgIeParseInfoT *thiz; - - NW_GTPV2C_MALLOC(hStack, sizeof(NwGtpv2cMsgIeParseInfoT), thiz, NwGtpv2cMsgIeParseInfoT*); - - if(thiz) { - memset(thiz, 0, sizeof(NwGtpv2cMsgIeParseInfoT)); - - thiz->hStack = hStack; - thiz->msgType = msgType; - - switch(msgType) { - case NW_GTP_ECHO_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, echoRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_CREATE_SESSION_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, createSessionReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_CREATE_SESSION_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, createSessionRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_DELETE_SESSION_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, deleteSessionReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_DELETE_SESSION_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, deleteSessionRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_MODIFY_BEARER_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, modifyBearerReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_MODIFY_BEARER_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, modifyBearerRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_FORWARD_RELOCATION_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, forwardRelocationReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_FORWARD_RELOCATION_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, forwardRelocationRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_FORWARD_RELOCATION_COMPLETE_NTF: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, forwardRelocationCompleteNtfIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_FORWARD_RELOCATION_COMPLETE_ACK: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, forwardRelocationCompleteAckIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_CONTEXT_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, contextReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_CONTEXT_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, contextRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_CONTEXT_ACK: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, contextAckIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_IDENTIFICATION_REQ: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, identificationReqIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - case NW_GTP_IDENTIFICATION_RSP: { - rc = nwGtpv2cMsgIeParseInfoUpdate(thiz, identificationRspIeInfoTbl); - NW_ASSERT(NW_OK == rc); - } - break; - - default: { - free(thiz); - thiz = NULL; - } - break; - } - } - - return thiz; -} - -/** - * Destructor - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cMsgIeParseInfoDelete(NwGtpv2cMsgIeParseInfoT* thiz) -{ - NW_GTPV2C_FREE(thiz->hStack, thiz); - return NW_OK; -} - -/** - * Parse message - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cMsgIeParse(NW_IN NwGtpv2cMsgIeParseInfoT* thiz, - NW_IN NwGtpv2cMsgHandleT hMsg, - NW_INOUT NwGtpv2cErrorT *pError) -{ - NwRcT rc = NW_OK; - uint16_t mandatoryIeCount =0; - uint8_t *pIeBufStart; - uint8_t *pIeBufEnd; - uint16_t ieType; - uint16_t ieLength; - uint16_t ieInstance; - NwGtpv2cIeTlvT *pIe; - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - uint8_t flags = *((uint8_t*)(pMsg->msgBuf)); - - pIeBufStart = (uint8_t *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); - pIeBufEnd = (uint8_t *) (pMsg->msgBuf + pMsg->msgLen); - - //memset(pMsg->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - memset(pMsg->isIeValid, (NW_FALSE), sizeof(uint8_t) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - - while (pIeBufStart < pIeBufEnd) { - pIe = (NwGtpv2cIeTlvT*) pIeBufStart; - ieType = pIe->t; - ieLength = ntohs(pIe->l); - ieInstance = pIe->i & 0x0F; - - NW_ASSERT(NW_GTPV2C_IE_INSTANCE_MAXIMUM >= ieInstance); - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_DEBG, "Received IE %u with instance %u of length %u in msg-type %u!", ieType, ieInstance, ieLength, thiz->msgType); - - if(pIeBufStart + 4 + ieLength > pIeBufEnd) { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Invalid length for IE of type %u and instance %u!", ieType, ieInstance); - pError->cause = NW_GTPV2C_CAUSE_INVALID_LENGTH; - pError->offendingIe.type = ieType; - pError->offendingIe.instance = ieInstance; - return NW_FAILURE; - } - - if((thiz->ieParseInfo[ieType][ieInstance].iePresence)) { - if((ieLength < (thiz->ieParseInfo[ieType][ieInstance].ieMinLength))) { - if(thiz->ieParseInfo[ieType][ieInstance].iePresence == NW_GTPV2C_IE_PRESENCE_OPTIONAL) { - /* Ignore TLV */ - pIeBufStart += (ieLength + 4); - continue; - } else { - pError->cause = NW_GTPV2C_CAUSE_MANDATORY_IE_INCORRECT; - pError->offendingIe.type = ieType; - pError->offendingIe.instance = ieInstance; - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Mandatory IE of type %u and instance %u incorrect!", ieType, ieInstance); - return NW_FAILURE; - } - } - - if(pMsg->isIeValid[ieType][ieInstance] == NW_TRUE) { - /* - * If an information element is repeated in a GTP signalling - * message in which repetition of the information element is - * not specified, only the contents of the information element - * appearing first shall be handled and all subsequent repetitions - * of the information element shall be ignored. - * TODO: Add handling for IEs for which repetition is allowed. - */ - pIeBufStart += (ieLength + 4); - continue; - } - - pMsg->pIe[ieType][ieInstance] = (uint8_t*) pIeBufStart; - pMsg->isIeValid[ieType][ieInstance] = NW_TRUE; - - if(thiz->ieParseInfo[ieType][ieInstance].pGroupedIeInfo) { - /* Parse the grouped IE */ - rc = nwGtpv2cMsgGroupedIeParse(thiz->ieParseInfo[ieType][ieInstance].pGroupedIeInfo, ieType, ieLength, ieInstance, ((uint8_t*) pIe) + 4); - - if (rc != NW_OK) { - pError->cause = NW_GTPV2C_CAUSE_MANDATORY_IE_INCORRECT; - pError->offendingIe.type = ieType; - pError->offendingIe.instance = ieInstance; - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Mandatory IE of type %u and instance %u incorrect!", ieType, ieInstance); - return NW_FAILURE; - } - } - - if(thiz->ieParseInfo[ieType][ieInstance].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) { - mandatoryIeCount++; - } - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_WARN, "Unexpected IE %u with instance %u of length %u received in msg %u!", ieType, ieInstance, ieLength, thiz->msgType); - } - - pIeBufStart += (ieLength + 4); - } - - if((NW_OK == rc) && (mandatoryIeCount != thiz->mandatoryIeCount)) { - for(ieType = 0; ieType < NW_GTPV2C_IE_TYPE_MAXIMUM; ieType++) { - for(ieInstance = 0; ieInstance < NW_GTPV2C_IE_INSTANCE_MAXIMUM; ieInstance++) { - if(thiz->ieParseInfo[ieType][ieInstance].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) { - if(pMsg->isIeValid[ieType][ieInstance] == NW_FALSE) { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Mandatory IE of type %u and instance %u missing in msg type %u", ieType, ieInstance, pMsg->msgType); - pError->cause = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - pError->offendingIe.type = ieType; - pError->offendingIe.instance = ieInstance; - return NW_FAILURE; - } - } - } - } - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_CRIT, "Unknown mandatory IE missing. Msg parser formed incorrectly!"); - pError->cause = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - pError->offendingIe.type = 0; - pError->offendingIe.instance = 0; - return NW_FAILURE; - } - - pError->cause = NW_GTPV2C_CAUSE_REQUEST_ACCEPTED; - return NW_OK; -} - - -#ifdef __cplusplus -} -#endif - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c deleted file mode 100644 index a19ddc1bcc..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c +++ /dev/null @@ -1,293 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwUtils.h" -#include "NwGtpv2cLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Allocate a gtpv2c message Parser. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] msgType : Message type for this message parser. - * @param[out] pthiz : Pointer to message parser handle. - */ - -NwRcT -nwGtpv2cMsgParserNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN uint8_t msgType, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg, - NW_IN NwGtpv2cMsgParserT **pthiz) -{ - NwGtpv2cMsgParserT* thiz; - // NW_GTPV2C_MALLOC(hGtpcStackHandle, sizeof(NwGtpv2cMsgParserT), thiz, NwGtpv2cMsgParserT*); - thiz = (NwGtpv2cMsgParserT*) malloc (sizeof(NwGtpv2cMsgParserT)); - - if(thiz) { - memset(thiz, 0, sizeof(NwGtpv2cMsgParserT)); - thiz->msgType = msgType; - thiz->hStack = hGtpcStackHandle; - *pthiz = thiz; - thiz->ieReadCallback = ieReadCallback; - thiz->ieReadCallbackArg = ieReadCallbackArg; - return NW_OK; - } - - return NW_FAILURE; -} - -/** - * Free a gtpv2c message parser. - * - * @param[in] hGtpcStackHandle : gtpv2c stack handle. - * @param[in] thiz : Message parser handle. - */ - -NwRcT -nwGtpv2cMsgParserDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwGtpv2cMsgParserT* thiz) -{ - NW_GTPV2C_FREE(hGtpcStackHandle, thiz); - return NW_OK; -} - -NwRcT -nwGtpv2cMsgParserUpdateIeReadCallback( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg)) -{ - if(thiz) { - thiz->ieReadCallback = ieReadCallback; - return NW_OK; - } - - return NW_FAILURE; -} - -NwRcT -nwGtpv2cMsgParserUpdateIeReadCallbackArg( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN void* ieReadCallbackArg) -{ - if(thiz) { - thiz->ieReadCallbackArg = ieReadCallbackArg; - return NW_OK; - } - - return NW_FAILURE; -} - -NwRcT -nwGtpv2cMsgParserAddIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN uint8_t ieType, - NW_IN uint8_t ieInstance, - NW_IN uint8_t iePresence, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg) -{ - NW_ASSERT(thiz); - - if(thiz->ieParseInfo[ieType][ieInstance].iePresence == 0) { - NW_ASSERT(ieInstance <= NW_GTPV2C_IE_INSTANCE_MAXIMUM); - - thiz->ieParseInfo[ieType][ieInstance].ieReadCallback = ieReadCallback; - thiz->ieParseInfo[ieType][ieInstance].ieReadCallbackArg = ieReadCallbackArg; - thiz->ieParseInfo[ieType][ieInstance].iePresence = iePresence; - - if (iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) { - thiz->mandatoryIeCount++; - } - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Cannot add IE to parser for type %u and instance %u. IE info already exists!", ieType, ieInstance); - } - - return NW_OK; -} - -NwRcT -nwGtpv2cMsgParserUpdateIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN uint8_t ieType, - NW_IN uint8_t ieInstance, - NW_IN uint8_t iePresence, - NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t* ieValue, - void* ieReadCallbackArg), - NW_IN void* ieReadCallbackArg) -{ - NW_ASSERT(thiz); - - if(thiz->ieParseInfo[ieType][ieInstance].iePresence) { - thiz->ieParseInfo[ieType][ieInstance].ieReadCallback = ieReadCallback; - thiz->ieParseInfo[ieType][ieInstance].ieReadCallbackArg = ieReadCallbackArg; - - thiz->ieParseInfo[ieType][ieInstance].iePresence = iePresence; - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Cannot update IE info for type %u and instance %u. IE info does not exist!", ieType, ieInstance); - } - - - return NW_OK; -} - - - -NwRcT -nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, - NW_IN NwGtpv2cMsgHandleT hMsg, - NW_OUT uint8_t *pOffendingIeType, - NW_OUT uint8_t *pOffendingIeInstance, - NW_OUT uint16_t *pOffendingIeLength) -{ - NwRcT rc = NW_OK; - uint8_t flags; - uint16_t mandatoryIeCount =0; - NwGtpv2cIeTlvT *pIe; - uint8_t *pIeStart; - uint8_t *pIeEnd; - uint16_t ieLength; - NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - - NW_ASSERT(pMsg); - flags = *((uint8_t*)(pMsg->msgBuf)); - pIeStart = (uint8_t *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); - pIeEnd = (uint8_t *) (pMsg->msgBuf + pMsg->msgLen); - - memset(thiz->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - memset(pMsg->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - - while (pIeStart < pIeEnd) { - pIe = (NwGtpv2cIeTlvT*) pIeStart; - ieLength = ntohs(pIe->l); - - if(pIeStart + 4 + ieLength > pIeEnd) { - *pOffendingIeType = pIe->t; - *pOffendingIeLength = pIe->l; - *pOffendingIeInstance = pIe->i; - return NW_GTPV2C_MSG_MALFORMED; - } - - if((thiz->ieParseInfo[pIe->t][pIe->i].iePresence)) { - thiz->pIe[pIe->t][pIe->i] = (uint8_t*) pIeStart; - pMsg->pIe[pIe->t][pIe->i] = (uint8_t*) pIeStart; - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_DEBG, "Received IE %u of length %u!", pIe->t, ieLength); - - if((thiz->ieParseInfo[pIe->t][pIe->i].ieReadCallback) != NULL ) { - rc = thiz->ieParseInfo[pIe->t][pIe->i].ieReadCallback(pIe->t, ieLength, pIe->i, pIeStart + 4, thiz->ieParseInfo[pIe->t][pIe->i].ieReadCallbackArg); - - if(NW_OK == rc) { - if(thiz->ieParseInfo[pIe->t][pIe->i].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) - mandatoryIeCount++; - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Error while parsing IE %u with instance %u and length %u!", pIe->t, pIe->i, ieLength); - break; - } - } else { - if((thiz->ieReadCallback) != NULL ) { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_DEBG, "Received IE %u of length %u!", pIe->t, ieLength); - rc = thiz->ieReadCallback(pIe->t, ieLength, pIe->i, pIeStart + 4, thiz->ieReadCallbackArg); - - if(NW_OK == rc) { - if(thiz->ieParseInfo[pIe->t][pIe->i].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) - mandatoryIeCount++; - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_ERRO, "Error while parsing IE %u of length %u!", pIe->t, ieLength); - break; - } - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_WARN, "No parse method defined for received IE type %u of length %u in message %u!", pIe->t, ieLength, thiz->msgType); - } - } - } else { - NW_LOG(thiz->hStack, NW_LOG_LEVEL_WARN, "Unexpected IE %u of length %u received in msg %u!", pIe->t, ieLength, thiz->msgType); - } - - pIeStart += (ieLength + 4); - } - - if((NW_OK == rc) && (mandatoryIeCount != thiz->mandatoryIeCount)) { - uint16_t t, i; - *pOffendingIeType = 0; - *pOffendingIeInstance = 0; - *pOffendingIeLength = 0; - - for(t = 0; t < NW_GTPV2C_IE_TYPE_MAXIMUM; t++) { - for(i = 0; i < NW_GTPV2C_IE_INSTANCE_MAXIMUM; i++) { - if(thiz->ieParseInfo[t][i].iePresence == NW_GTPV2C_IE_PRESENCE_MANDATORY) { - if(thiz->pIe[t][i] == NULL) { - *pOffendingIeType = t; - *pOffendingIeInstance = i; - return NW_GTPV2C_MANDATORY_IE_MISSING; - } - } - } - } - - NW_LOG(thiz->hStack, NW_LOG_LEVEL_WARN, "Unknown mandatory IE missing. Parser formed incorrectly! %u:%u", mandatoryIeCount, thiz->mandatoryIeCount); - return NW_GTPV2C_MANDATORY_IE_MISSING; - } - - return rc; -} - -#ifdef __cplusplus -} -#endif - - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c deleted file mode 100644 index 4d052d05f1..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c +++ /dev/null @@ -1,389 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwLog.h" -#include "NwUtils.h" -#include "NwGtpv2cLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2cTrxn.h" - -/*--------------------------------------------------------------------------* - * P R I V A T E D E C L A R A T I O N S * - *--------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -static NwGtpv2cTrxnT* gpGtpv2cTrxnPool = NULL; - -/*--------------------------------------------------------------------------* - * P R I V A T E F U N C T I O N S * - *--------------------------------------------------------------------------*/ - -/*--------------------------------------------------------------------------- - * Send msg retransmission to peer via data request to UDP Entity - *--------------------------------------------------------------------------*/ - -static NwRcT -nwGtpv2cTrxnSendMsgRetransmission(NwGtpv2cTrxnT* thiz) -{ - NwRcT rc ; - - NW_ASSERT(thiz); - - NW_ASSERT(thiz->pMsg); - - rc = thiz->pStack->udp.udpDataReqCallback(thiz->pStack->udp.hUdp, - thiz->pMsg->msgBuf, - thiz->pMsg->msgLen, - thiz->peerIp, - thiz->peerPort); - - thiz->maxRetries--; - - return rc; -} - -static NwRcT -nwGtpv2cTrxnPeerRspWaitTimeout(void* arg) -{ - NwRcT rc = NW_OK; - NwGtpv2cTrxnT* thiz; - NwGtpv2cStackT* pStack; - - thiz = ((NwGtpv2cTrxnT*)arg); - pStack = thiz->pStack; - - NW_ASSERT(pStack); - - NW_LOG(pStack, NW_LOG_LEVEL_WARN, "T3 Response timer expired for transaction 0x%p", - thiz); - - thiz->hRspTmr = 0; - - if(thiz->maxRetries) { - rc = nwGtpv2cTrxnSendMsgRetransmission(thiz); - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cStartTimer(thiz->pStack, thiz->t3Timer, 0, NW_GTPV2C_TMR_TYPE_ONE_SHOT, nwGtpv2cTrxnPeerRspWaitTimeout, thiz, &thiz->hRspTmr); - } else { - NwGtpv2cUlpApiT ulpApi; - - ulpApi.hMsg = 0; - ulpApi.apiType = NW_GTPV2C_ULP_API_RSP_FAILURE_IND; - - ulpApi.apiInfo.rspFailureInfo.hUlpTrxn = thiz->hUlpTrxn; - ulpApi.apiInfo.rspFailureInfo.hUlpTunnel = ( (thiz->hTunnel) ? ((NwGtpv2cTunnelT*)(thiz->hTunnel))->hUlpTunnel : 0 ); - - NW_LOG(pStack, NW_LOG_LEVEL_ERRO, "N3 retries expired for transaction 0x%p", - thiz); - RB_REMOVE(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(pStack->outstandingTxSeqNumMap), thiz); - rc = nwGtpv2cTrxnDelete(&thiz); - - rc = pStack->ulp.ulpReqCallback(pStack->ulp.hUlp, &ulpApi); - } - - return rc; -} - -static NwRcT -nwGtpv2cTrxnDuplicateRequestWaitTimeout(void* arg) -{ - NwRcT rc = NW_OK; - NwGtpv2cTrxnT* thiz; - NwGtpv2cStackT* pStack; - - thiz = ((NwGtpv2cTrxnT*)arg); - - NW_ASSERT(thiz); - pStack = thiz->pStack; - - NW_ASSERT(pStack); - - NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Duplicate request hold timer expired for transaction 0x%p", - thiz); - - thiz->hRspTmr = 0; - - RB_REMOVE(NwGtpv2cOutstandingRxSeqNumTrxnMap, &(pStack->outstandingRxSeqNumMap), thiz); - rc = nwGtpv2cTrxnDelete(&thiz); - NW_ASSERT(NW_OK == rc); - - return rc; -} - -/** - * Start timer to wait for rsp of a req message - * - * @param[in] thiz : Pointer to transaction - * @param[in] timeoutCallbackFunc : Timeout handler callback function. - * @return NW_OK on success. - */ - -NwRcT -nwGtpv2cTrxnStartPeerRspWaitTimer(NwGtpv2cTrxnT* thiz) -{ - NwRcT rc; - rc = nwGtpv2cStartTimer(thiz->pStack, thiz->t3Timer, 0, NW_GTPV2C_TMR_TYPE_ONE_SHOT, nwGtpv2cTrxnPeerRspWaitTimeout, thiz, &thiz->hRspTmr); - return rc; -} - -/** - Start timer to wait before pruginf a req tran for which response has been sent - - @param[in] thiz : Pointer to transaction - @return NW_OK on success. - */ - -NwRcT -nwGtpv2cTrxnStartDulpicateRequestWaitTimer(NwGtpv2cTrxnT* thiz) -{ - NwRcT rc; - - rc = nwGtpv2cStartTimer(thiz->pStack, thiz->t3Timer * thiz->maxRetries, 0, NW_GTPV2C_TMR_TYPE_ONE_SHOT, nwGtpv2cTrxnDuplicateRequestWaitTimeout, thiz, &thiz->hRspTmr); - - return rc; -} - -/** - Send timer stop request to TmrMgr Entity. - - @param[in] thiz : Pointer to transaction - @return NW_OK on success. - */ - -static NwRcT -nwGtpv2cTrxnStopPeerRspTimer(NwGtpv2cTrxnT* thiz) -{ - NwRcT rc; - - NW_ASSERT(thiz->pStack->tmrMgr.tmrStopCallback != NULL); - - rc = nwGtpv2cStopTimer(thiz->pStack, thiz->hRspTmr); - thiz->hRspTmr = 0; - - return rc; -} - -/*--------------------------------------------------------------------------* - * P U B L I C F U N C T I O N S * - *--------------------------------------------------------------------------*/ - -/** - * Constructor - * - * @param[in] thiz : Pointer to stack - * @param[out] ppTrxn : Pointer to pointer to Trxn object. - * @return NW_OK on success. - */ -NwGtpv2cTrxnT* -nwGtpv2cTrxnNew( NW_IN NwGtpv2cStackT* thiz) -{ - NwGtpv2cTrxnT *pTrxn; - - if(gpGtpv2cTrxnPool) { - pTrxn = gpGtpv2cTrxnPool; - gpGtpv2cTrxnPool = gpGtpv2cTrxnPool->next; - } else { - NW_GTPV2C_MALLOC(thiz, sizeof(NwGtpv2cTrxnT), pTrxn, NwGtpv2cTrxnT*); - } - - if (pTrxn) { - pTrxn->pStack = thiz; - pTrxn->pMsg = NULL; - pTrxn->maxRetries = 2; - pTrxn->t3Timer = 2; - pTrxn->seqNum = thiz->seqNum; - - /* Increment sequence number */ - thiz->seqNum++; - - if(thiz->seqNum == 0x800000) - thiz->seqNum = 0; - - } - - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Created transaction 0x%p", pTrxn); - - return pTrxn; -} - -/** - * Overloaded Constructor - * - * @param[in] thiz : Pointer to stack. - * @param[in] seqNum : Sequence number for this transaction. - * @return Pointer to Trxn object. - */ -NwGtpv2cTrxnT* -nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* thiz, - NW_IN uint32_t seqNum) -{ - NwGtpv2cTrxnT *pTrxn; - - if(gpGtpv2cTrxnPool) { - pTrxn = gpGtpv2cTrxnPool; - gpGtpv2cTrxnPool = gpGtpv2cTrxnPool->next; - } else { - NW_GTPV2C_MALLOC(thiz, sizeof(NwGtpv2cTrxnT), pTrxn, NwGtpv2cTrxnT*); - } - - if (pTrxn) { - pTrxn->pStack = thiz; - pTrxn->pMsg = NULL; - pTrxn->maxRetries = 2; - pTrxn->t3Timer = 2; - pTrxn->seqNum = seqNum; - pTrxn->pMsg = NULL; - } - - NW_LOG(thiz, NW_LOG_LEVEL_ERRO, "Created transaction 0x%p", pTrxn); - - return pTrxn; -} - -/** - * Another overloaded constructor. Create transaction as outstanding - * RX transaction for detecting duplicated requests. - * - * @param[in] thiz : Pointer to stack. - * @param[in] teidLocal : Trxn teid. - * @param[in] peerIp : Peer Ip address. - * @param[in] peerPort : Peer Ip port. - * @param[in] seqNum : Seq Number. - * @return NW_OK on success. - */ - -NwGtpv2cTrxnT* -nwGtpv2cTrxnOutstandingRxNew( NW_IN NwGtpv2cStackT* thiz, - NW_IN uint32_t teidLocal, - NW_IN uint32_t peerIp, - NW_IN uint32_t peerPort, - NW_IN uint32_t seqNum) -{ - NwRcT rc; - NwGtpv2cTrxnT *pTrxn, *pCollision; - - if(gpGtpv2cTrxnPool) { - pTrxn = gpGtpv2cTrxnPool; - gpGtpv2cTrxnPool = gpGtpv2cTrxnPool->next; - } else { - NW_GTPV2C_MALLOC(thiz, sizeof(NwGtpv2cTrxnT), pTrxn, NwGtpv2cTrxnT*); - } - - if (pTrxn) { - pTrxn->pStack = thiz; - pTrxn->maxRetries = 2; - pTrxn->t3Timer = 2; - pTrxn->seqNum = seqNum; - pTrxn->peerIp = peerIp; - pTrxn->peerPort = peerPort; - pTrxn->pMsg = NULL; - pTrxn->hRspTmr = 0; - - pCollision = RB_INSERT(NwGtpv2cOutstandingRxSeqNumTrxnMap, &(thiz->outstandingRxSeqNumMap), pTrxn); - - if(pCollision) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Duplicate request message received for seq num 0x%x!", - (uint32_t) seqNum); - - /* Case of duplicate request message from peer. Retransmit response. */ - if(pCollision->pMsg) { - rc = pCollision->pStack->udp.udpDataReqCallback(pCollision->pStack->udp.hUdp, - pCollision->pMsg->msgBuf, - pCollision->pMsg->msgLen, - pCollision->peerIp, - pCollision->peerPort); - } - - rc = nwGtpv2cTrxnDelete(&pTrxn); - NW_ASSERT(NW_OK == rc); - pTrxn = NULL; - } - } - - if(pTrxn) - NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Created outstanding RX transaction 0x%p", - pTrxn); - - return (pTrxn); -} - -/** - * Destructor - * - * @param[out] pthiz : Pointer to pointer to Trxn object. - * @return NW_OK on success. - */ -NwRcT -nwGtpv2cTrxnDelete( NW_INOUT NwGtpv2cTrxnT **pthiz) -{ - NwRcT rc = NW_OK; - NwGtpv2cStackT* pStack; - NwGtpv2cTrxnT *thiz = *pthiz; - - pStack = thiz->pStack; - - if(thiz->hRspTmr) { - rc = nwGtpv2cTrxnStopPeerRspTimer(thiz); - NW_ASSERT(NW_OK == rc); - } - - if(thiz->pMsg) { - rc = nwGtpv2cMsgDelete((NwGtpv2cStackHandleT)pStack, (NwGtpv2cMsgHandleT)thiz->pMsg); - NW_ASSERT(NW_OK == rc); - } - - NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Purging transaction 0x%p", thiz); - - thiz->next = gpGtpv2cTrxnPool; - gpGtpv2cTrxnPool = thiz; - - *pthiz = NULL; - return rc; -} - -#ifdef __cplusplus -} -#endif - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c deleted file mode 100644 index 865d2c155a..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c +++ /dev/null @@ -1,95 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 "NwTypes.h" -#include "NwUtils.h" -#include "NwError.h" -#include "NwGtpv2cPrivate.h" -#include "NwGtpv2cTunnel.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static NwGtpv2cTunnelT* gpGtpv2cTunnelPool = NULL; - -NwGtpv2cTunnelT* -nwGtpv2cTunnelNew(struct NwGtpv2cStack *pStack, uint32_t teid, uint32_t ipv4AddrRemote, NwGtpv2cUlpTunnelHandleT hUlpTunnel) -{ - NwGtpv2cTunnelT* thiz; - - if(gpGtpv2cTunnelPool) { - thiz = gpGtpv2cTunnelPool; - gpGtpv2cTunnelPool = gpGtpv2cTunnelPool->next; - } else { - NW_GTPV2C_MALLOC(pStack, sizeof(NwGtpv2cTunnelT), thiz, NwGtpv2cTunnelT*); - } - - if(thiz) { - memset(thiz, 0, sizeof(NwGtpv2cTunnelT)); - thiz->teid = teid; - thiz->ipv4AddrRemote = ipv4AddrRemote; - thiz->hUlpTunnel = hUlpTunnel; - } - - return thiz; -} - -NwRcT -nwGtpv2cTunnelDelete(struct NwGtpv2cStack *pStack, NwGtpv2cTunnelT* thiz) -{ - thiz->next = gpGtpv2cTunnelPool; - gpGtpv2cTunnelPool = thiz; - - return NW_OK; -} - -NwRcT -nwGtpv2cTunnelGetUlpTunnelHandle( NwGtpv2cTunnelT* thiz, NwGtpv2cUlpTunnelHandleT* phUlpTunnel) -{ - *phUlpTunnel = (thiz? thiz->hUlpTunnel : 0x00000000); - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - -/*--------------------------------------------------------------------------* - * E N D O F F I L E * - *--------------------------------------------------------------------------*/ - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/Makefile.am b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/Makefile.am deleted file mode 100644 index da32172d9a..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -# this is example-file: Makefile.am - -# the subdirectories of the project to go into -SUBDIRS = \ - nw-egtping\ - nw-helloworld diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/Makefile.am b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/Makefile.am deleted file mode 100644 index 3674445989..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -AM_CFLAGS = -D__WITH_LIBEVENT__ \ - -I$(top_srcdir)/shared \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/test-app/nw-udp \ - -I$(top_srcdir)/test-app/nw-log \ - @AM_CFLAGS@ - -if ENABLE_TESTS_APP -bin_PROGRAMS = egtping - -egtping_SOURCES = \ - NwEvt.h\ - NwMiniLogMgrEntity.h\ - NwMiniTmrMgrEntity.h\ - NwMiniUlpEntity.h\ - NwMiniUdpEntity.h\ - NwMiniLogMgrEntity.c\ - NwMiniTmrMgrEntity.c\ - NwMiniUlpEntity.c\ - NwMiniUdpEntity.c\ - NwEgtPingMain.c - -egtping_LDADD = $(top_builddir)/src/libNwGtpv2c.a -levent $(AM_LDFLAGS) -endif \ No newline at end of file diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c deleted file mode 100644 index a346ab1faf..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c +++ /dev/null @@ -1,280 +0,0 @@ -/*----------------------------------------------------------------------------* - * Copyright (C) 2010 Amit Chawre. * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwEgtPingMain.c - * @brief This is a program demostrating usage of nw-gtpv2c library for eGTP ping. -*/ - -#include -#include -#include -#include -#include "NwEvt.h" -#include "NwLog.h" -#include "NwGtpv2c.h" - -#include "NwMiniLogMgrEntity.h" -#include "NwMiniTmrMgrEntity.h" -#include "NwMiniUdpEntity.h" -#include "NwMiniUlpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - - -typedef struct NwEgtPingS { - uint8_t localIpStr[20]; - uint8_t targetIpStr[20]; - uint32_t pingInterval; - uint32_t pingCount; - NwGtpv2cNodeUlpT ulpObj; - NwGtpv2cNodeUdpT udpObj; -} NwEgtPingT; - -static NwGtpv2cNodeUlpT ulpObj; -static NwGtpv2cNodeUdpT udpObj; - -static NwEgtPingT egtPing; - -void nwEgtPingHandleSignal(int sigNum) -{ - printf("\n--- %s ("NW_IPV4_ADDR") EGTPING statistics --- ", egtPing.targetIpStr, NW_IPV4_ADDR_FORMAT(inet_addr(egtPing.targetIpStr))); - printf("\n%u requests sent, %u response received, %d%% packet loss \n\n", udpObj.packetsSent, udpObj.packetsRcvd, - (udpObj.packetsSent ? 100 * (udpObj.packetsSent - udpObj.packetsRcvd ) / udpObj.packetsSent : 0) ); - exit(sigNum); -} - -NwRcT -nwEgtPingHelp() -{ - printf("Usage: egtping [-i interval] [-c count] [-l local-ip] "); - printf("\n [-t3 t3-time] [-n3 n3-count] destination"); - printf("\n"); - printf("\n -i : Interval between two echo request messages. (Default: 1 sec)"); - printf("\n -c : Stop after sending count pings. (Default: Infinite)"); - printf("\n -t : GTP T3 timeout value. (Default: 2 sec)"); - printf("\n -n : GTP N3 count value. (Default: 2 sec)"); - printf("\n -l : Local IP adddress to use. (Default: All local IPs)"); - printf("\n -h : Show this message."); - printf("\n"); - printf("\n"); -} - -NwRcT -nwEgtPingParseCmdLineOpts(int argc, char* argv[]) -{ - NwRcT rc = NW_OK; - int i = 0; - i++; - - egtPing.pingInterval = 1; - egtPing.pingCount = 0xffffffff; - - if(argc < 2) - return NW_FAILURE; - - if( (argc == 2) && - ((strcmp("--help", argv[i]) == 0) - || (strcmp(argv[i], "-h") == 0))) - return NW_FAILURE; - - while( i < argc - 1) { - NW_LOG(NW_LOG_LEVEL_DEBG, "Processing cmdline arg %s", argv[i]); - - if((strcmp("--local-ip", argv[i]) == 0) - || (strcmp(argv[i], "-l") == 0)) { - i++; - - if(i >= (argc - 1)) - return NW_FAILURE; - - strcpy(egtPing.localIpStr, (argv[i])); - - } else if((strcmp("--interval", argv[i]) == 0) - || (strcmp(argv[i], "-i") == 0)) { - i++; - - if(i >= (argc - 1)) - return NW_FAILURE; - - egtPing.pingInterval = atoi(argv[i]); - - } else if((strcmp("--count", argv[i]) == 0) - || (strcmp(argv[i], "-c") == 0)) { - i++; - - if(i >= (argc - 1)) - return NW_FAILURE; - - egtPing.pingCount = atoi(argv[i]); - } else if((strcmp("--help", argv[i]) == 0) - || (strcmp(argv[i], "-h") == 0)) { - rc = NW_FAILURE; - } else { - return NW_FAILURE; - } - - i++; - } - - strcpy(egtPing.targetIpStr, (argv[i])); - - return rc; -} - -/*--------------------------------------------------------------------------- - * T H E M A I N F U N C T I O N - *--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - NwRcT rc; - uint32_t logLevel; - uint8_t* logLevelStr; - - NwGtpv2cStackHandleT hGtpv2cStack = 0; - - NwGtpv2cUlpEntityT ulp; - NwGtpv2cUdpEntityT udp; - NwGtpv2cTimerMgrEntityT tmrMgr; - NwGtpv2cLogMgrEntityT logMgr; - - printf("EGTPING 0.1, Copyright (C) 2011 Amit Chawre.\n"); - rc = nwEgtPingParseCmdLineOpts(argc, argv); - - if(rc != NW_OK) { - rc = nwEgtPingHelp(); - exit(rc); - } - - logLevelStr = getenv ("NW_LOG_LEVEL"); - - if(logLevelStr == NULL) { - logLevel = NW_LOG_LEVEL_INFO; - } else { - if(strncmp(logLevelStr, "EMER",4) == 0) - logLevel = NW_LOG_LEVEL_EMER; - else if(strncmp(logLevelStr, "ALER",4) == 0) - logLevel = NW_LOG_LEVEL_ALER; - else if(strncmp(logLevelStr, "CRIT",4) == 0) - logLevel = NW_LOG_LEVEL_CRIT; - else if(strncmp(logLevelStr, "ERRO",4) == 0) - logLevel = NW_LOG_LEVEL_ERRO ; - else if(strncmp(logLevelStr, "WARN",4) == 0) - logLevel = NW_LOG_LEVEL_WARN; - else if(strncmp(logLevelStr, "NOTI",4) == 0) - logLevel = NW_LOG_LEVEL_NOTI; - else if(strncmp(logLevelStr, "INFO",4) == 0) - logLevel = NW_LOG_LEVEL_INFO; - else if(strncmp(logLevelStr, "DEBG",4) == 0) - logLevel = NW_LOG_LEVEL_DEBG; - } - - /*--------------------------------------------------------------------------- - * Initialize event library - *--------------------------------------------------------------------------*/ - - NW_EVT_INIT(); - - /*--------------------------------------------------------------------------- - * Initialize Log Manager - *--------------------------------------------------------------------------*/ - nwMiniLogMgrInit(nwMiniLogMgrGetInstance(), logLevel); - - /*--------------------------------------------------------------------------- - * Initialize Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cInitialize(&hGtpv2cStack); - - if(rc != NW_OK) { - NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to create gtpv2c stack instance. Error '%u' occured", rc); - exit(1); - } - - rc = nwGtpv2cSetLogLevel(hGtpv2cStack, logLevel); - - /*--------------------------------------------------------------------------- - * Set up Ulp Entity - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cUlpInit(&ulpObj, hGtpv2cStack, egtPing.localIpStr); - NW_ASSERT(NW_OK == rc); - - ulp.hUlp = (NwGtpv2cUlpHandleT) &ulpObj; - ulp.ulpReqCallback = nwGtpv2cUlpProcessStackReqCallback; - - rc = nwGtpv2cSetUlpEntity(hGtpv2cStack, &ulp); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Udp Entity - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cUdpInit(&udpObj, hGtpv2cStack, egtPing.localIpStr); - NW_ASSERT(NW_OK == rc); - - udp.hUdp = (NwGtpv2cUdpHandleT) &udpObj; - udp.udpDataReqCallback = nwGtpv2cUdpDataReq; - - rc = nwGtpv2cSetUdpEntity(hGtpv2cStack, &udp); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Log Entity - *--------------------------------------------------------------------------*/ - tmrMgr.tmrMgrHandle = 0; - tmrMgr.tmrStartCallback = nwTimerStart; - tmrMgr.tmrStopCallback = nwTimerStop; - - rc = nwGtpv2cSetTimerMgrEntity(hGtpv2cStack, &tmrMgr); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Log Entity - *--------------------------------------------------------------------------*/ - logMgr.logMgrHandle = (NwGtpv2cLogMgrHandleT) nwMiniLogMgrGetInstance(); - logMgr.logReqCallback = nwMiniLogMgrLogRequest; - - rc = nwGtpv2cSetLogMgrEntity(hGtpv2cStack, &logMgr); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Send Message Request to Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - NW_LOG(NW_LOG_LEVEL_NOTI, "EGTPING %s ("NW_IPV4_ADDR")", egtPing.targetIpStr, NW_IPV4_ADDR_FORMAT(inet_addr(egtPing.targetIpStr))); - rc = nwGtpv2cUlpPing(&ulpObj, - inet_addr(egtPing.targetIpStr), - egtPing.pingCount, - egtPing.pingInterval, - 2, - 3); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Install signal handler - *--------------------------------------------------------------------------*/ - signal(SIGINT, nwEgtPingHandleSignal); - - /*--------------------------------------------------------------------------- - * Event loop - *--------------------------------------------------------------------------*/ - - NW_EVT_LOOP(); - NW_LOG(NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!"); - - /*--------------------------------------------------------------------------- - * Destroy Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cFinalize(hGtpv2cStack); - - if(rc != NW_OK) { - NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to finalize gtpv2c stack instance. Error '%u' occured", rc); - } - - return rc; -} diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEvt.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEvt.h deleted file mode 100644 index 6df5794a5f..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEvt.h +++ /dev/null @@ -1,80 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_EVT_H__ -#define __NW_EVT_H__ -/** - * @file NwEvt.h - * @brief -*/ - -#ifdef __WITH_LIBEVENT__ - -#include - -typedef struct event NwEventT; - -#define NW_EVT_READ (EV_READ) -#define NW_EVT_PERSIST (EV_PERSIST) -#define NW_EVT_CALLBACK(__cbFunc) __cbFunc(int fd, short event, void *arg) -#define NW_TMR_CALLBACK(__cbFunc) __cbFunc(int fd, short event, void *arg) - -#define NW_EVT_INIT event_init -#define NW_EVT_LOOP event_dispatch - -#define NW_EVENT_ADD(__ev, __evSelObj, __evCallback, __evCallbackArg, __evFlags) \ - do { \ - event_set(&(__ev), __evSelObj, __evFlags, __evCallback, __evCallbackArg); \ - event_add(&(__ev), NULL); \ - } while(0) - -#else - -#warning "Event library not defined!" - -/* HACK : Defining dummy values for compilation!*/ - -typedef struct { - int __tbd; -} NwEventT; - -#define NW_EVT_READ (0) -#define NW_EVT_PERSIST (1) -#define NW_EVT_CALLBACK(__cbFunc) __cbFunc(void *arg) -#define NW_TMR_CALLBACK(__cbFunc) __cbFunc(void *arg) - - -#define NW_EVT_INIT() do { printf("error: Event library not defined!\n"); exit (0); } while(0) -#define NW_EVT_LOOP() do { printf("error: Event library not defined!\n"); exit (0); } while(0) -#define NW_EVENT_ADD(...) do { printf("error: Event library not defined!\n"); exit (0); } while(0) - - -#endif - -#endif /* __NW_EVT_H__ */ diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c deleted file mode 100644 index 585f7fa7c7..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c +++ /dev/null @@ -1,70 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C L O G M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file hello-world.c - * @brief This file contains example of a minimalistic log manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwTypes.h" -#include "NwError.h" -#include "NwLog.h" -#include "NwGtpv2c.h" - -#include "NwMiniLogMgrEntity.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -NwMiniLogMgrT __gLogMgr; - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwMiniLogMgrT* nwMiniLogMgrGetInstance() -{ - return &(__gLogMgr); -} - -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ) -{ - thiz->logLevel = logLevel; - return NW_OK; -} - -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel) -{ - thiz->logLevel = logLevel; -} - -NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT hLogMgr, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr) -{ - NwMiniLogMgrT* thiz = (NwMiniLogMgrT*) hLogMgr; - - if(thiz->logLevel >= logLevel) - //printf("NWEGTPSTK %s - %s <%s,%u>\n", gLogLevelStr[logLevel], logStr, basename(file), line); - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h deleted file mode 100644 index 3f37dec409..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h +++ /dev/null @@ -1,89 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C L O G M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file hello-world.c - * @brief This file contains example of a minimalistic log manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_LOG_MGR_H__ -#define __NW_MINI_LOG_MGR_H__ - -#define NW_LOG( _logLevel, ...) \ - do { \ - if((nwMiniLogMgrGetInstance())->logLevel >= _logLevel) \ - { \ - char _logStr[1024]; \ - snprintf(_logStr, 1024, __VA_ARGS__); \ - printf("%s \n", _logStr);\ - } \ - } while(0) - -/** - * MiniLogMgr Class Definition - */ -typedef struct NwMiniLogMgr { - uint8_t logLevel; /*< Log level */ -} NwMiniLogMgrT; - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get global singleton MiniLogMgr instance - */ -NwMiniLogMgrT* nwMiniLogMgrGetInstance(); - -/** - * Initialize MiniLogMgr - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - */ -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ); - -/** - * Set MiniLogMgr log level - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - */ -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel); - -/** - * Process log request from stack - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - * @param file : Filename - * @param line : Line Number - * @param logStr : Log string - */ -NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT logMgrHandle, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c deleted file mode 100644 index 7b5553aa6b..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c +++ /dev/null @@ -1,97 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C T M R M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniTmrMgrEntity.c - * @brief This file ontains example of a minimalistic timer manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniTmrMgrEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -/*--------------------------------------------------------------------------- - * Private functions - *--------------------------------------------------------------------------*/ - -static void -NW_TMR_CALLBACK(nwGtpv2cNodeHandleStackTimerTimeout) -{ - NwRcT rc; - NwGtpv2cNodeTmrT *pTmr = (NwGtpv2cNodeTmrT*) arg; - - /* - * Send Timeout Request to Gtpv2c Stack Instance - */ - rc = nwGtpv2cProcessTimeout(pTmr->timeoutArg); - NW_ASSERT(NW_OK == rc); - - free(pTmr); - - return; -} - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void* timeoutArg, - NwGtpv2cTimerHandleT* hTmr) -{ - NwRcT rc = NW_OK; - NwGtpv2cNodeTmrT *pTmr; - struct timeval tv; - - pTmr = (NwGtpv2cNodeTmrT*) malloc(sizeof(NwGtpv2cNodeTmrT)); - - /* set the timevalues*/ - timerclear(&tv); - tv.tv_sec = timeoutSec; - tv.tv_usec = timeoutUsec; - - pTmr->timeoutArg = timeoutArg; - evtimer_set(&pTmr->ev, nwGtpv2cNodeHandleStackTimerTimeout, pTmr); - - /*add event*/ - - event_add(&(pTmr->ev), &tv); - - *hTmr = (NwGtpv2cTimerHandleT)pTmr; - - return rc; -} - -NwRcT nwTimerStop( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT hTmr) -{ - evtimer_del(&(((NwGtpv2cNodeTmrT*)hTmr)->ev)); - free((void*)hTmr); - return NW_OK; -} - -#ifdef __cplusplus -} -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h deleted file mode 100644 index 85970c6cc2..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h +++ /dev/null @@ -1,57 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C T M R M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniTmrMgrEntity.c - * @brief This file ontains example of a minimalistic timer manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_TMR_MGR_H__ -#define __NW_MINI_TMR_MGR_H__ - -typedef struct { - uint8_t _tbd; -} NwGtpv2cNodeTmrMgrT; - -typedef struct { - NwEventT ev; - void* timeoutArg; -} NwGtpv2cNodeTmrT; - - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void* timeoutArg, - NwGtpv2cTimerHandleT* hTmr); - - -NwRcT nwTimerStop( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT hTmr); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c deleted file mode 100644 index 16f5f2bcea..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c +++ /dev/null @@ -1,218 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U D P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniUdpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniUdpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#define MAX_UDP_PAYLOAD_LEN (4096) - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -static int yes = 1; -/*--------------------------------------------------------------------------- - * Private functions - *--------------------------------------------------------------------------*/ - -static -void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) -{ - NwRcT rc; - uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; - NwS32T bytesRead; - struct sockaddr_in peer; - uint32_t peerLen; - NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) arg; - - peerLen = sizeof(peer); - - bytesRead = recvfrom(fd, udpBuf, MAX_UDP_PAYLOAD_LEN , 0, (struct sockaddr *) &peer,(socklen_t*) &peerLen); - - if(bytesRead > 0) { - thiz->packetsRcvd++; - NW_LOG(NW_LOG_LEVEL_DEBG, "Received UDP message of size %u from peer %u.%u.%u.%u:%u", bytesRead, - (peer.sin_addr.s_addr & 0x000000ff), - (peer.sin_addr.s_addr & 0x0000ff00) >> 8, - (peer.sin_addr.s_addr & 0x00ff0000) >> 16, - (peer.sin_addr.s_addr & 0xff000000) >> 24, - ntohs(peer.sin_port)); - rc = nwGtpv2cProcessUdpReq(thiz->hGtpv2cStack, udpBuf, bytesRead, ntohs(peer.sin_port), ntohl(peer.sin_addr.s_addr)); - } else { - switch (errno) { - - case ENETUNREACH: - NW_LOG(NW_LOG_LEVEL_ERRO, "Network not reachable", errno, strerror(errno)); - break; - - case EHOSTUNREACH: - NW_LOG(NW_LOG_LEVEL_ERRO, "Host not reachable", errno, strerror(errno)); - break; - - case ECONNREFUSED: - NW_LOG(NW_LOG_LEVEL_ERRO, "Port not reachable", errno, strerror(errno)); - break; - - default: - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - } - - nwGtpv2cUdpReset(thiz); - } - - return; -} - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipAddrStr) -{ - int sd; - struct sockaddr_in addr; - - sd = socket(AF_INET, SOCK_DGRAM, 0); - - if (sd < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - addr.sin_family = AF_INET; - addr.sin_port = htons(2123); - addr.sin_addr.s_addr = (strlen(ipAddrStr) ? inet_addr(ipAddrStr) : INADDR_ANY); - memset(addr.sin_zero, '\0', sizeof (addr.sin_zero)); - - if(bind(sd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "Error - %s", strerror(errno)); - NW_ASSERT(0); - } - - yes = 1; - - if (setsockopt(sd, SOL_IP, IP_RECVERR, &yes, sizeof(yes))) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - NW_EVENT_ADD((thiz->ev), sd, nwUdpDataIndicationCallbackData, thiz, NW_EVT_READ | NW_EVT_PERSIST); - - thiz->ipv4Addr = addr.sin_addr.s_addr; - thiz->hSocket = sd; - thiz->hGtpv2cStack = hGtpv2cStack; - - return NW_OK; -} - -NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz) -{ - close(thiz->hSocket); -} - -NwRcT nwGtpv2cUdpReset(NwGtpv2cNodeUdpT* thiz) -{ - int sd; - struct sockaddr_in addr; - - event_del(&thiz->ev); - close(thiz->hSocket); - - sd = socket(AF_INET, SOCK_DGRAM, 0); - - if (sd < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - addr.sin_family = AF_INET; - addr.sin_port = htons(2123); - addr.sin_addr.s_addr = (thiz->ipv4Addr); - memset(addr.sin_zero, '\0', sizeof (addr.sin_zero)); - - if(bind(sd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - yes = 1; - - if (setsockopt(sd, SOL_IP, IP_RECVERR, &yes, sizeof(yes))) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - NW_EVENT_ADD((thiz->ev), sd, nwUdpDataIndicationCallbackData, thiz, (NW_EVT_READ | NW_EVT_PERSIST)); - - thiz->hSocket = sd; - - return NW_OK; -} - -NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - uint8_t* dataBuf, - uint32_t dataSize, - uint32_t peerIp, - uint32_t peerPort) -{ - struct sockaddr_in peerAddr; - NwS32T bytesSent; - NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) udpHandle; - - NW_LOG(NW_LOG_LEVEL_DEBG, "Sending %u bytes of data to %u.%u.%u.%u:%u", dataSize, - (peerIp & 0xff000000) >> 24, - (peerIp & 0x00ff0000) >> 16, - (peerIp & 0x0000ff00) >> 8, - (peerIp & 0x000000ff), - peerPort); - - peerAddr.sin_family = AF_INET; - peerAddr.sin_port = htons(peerPort); - peerAddr.sin_addr.s_addr = htonl(peerIp); - memset(peerAddr.sin_zero, '\0', sizeof (peerAddr.sin_zero)); - - bytesSent = sendto (thiz->hSocket, dataBuf, dataSize, 0, (struct sockaddr *) &peerAddr, sizeof(peerAddr)); - - if(bytesSent < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "sendto - %s", strerror(errno)); - } else { - thiz->packetsSent++; - } - - return NW_OK; -} - - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h deleted file mode 100644 index 37061e95e4..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h +++ /dev/null @@ -1,56 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U D P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniUdpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_UDP_ENTITY_H__ -#define __NW_MINI_UDP_ENTITY_H__ - -typedef struct { - uint32_t ipv4Addr; - uint32_t hSocket; - NwEventT ev; - NwGtpv2cStackHandleT hGtpv2cStack; - uint32_t packetsSent; - uint32_t packetsRcvd; -} NwGtpv2cNodeUdpT; - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipAddrStr); - -NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz); - -NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - uint8_t* dataBuf, - uint32_t dataSize, - uint32_t peerIp, - uint32_t peerPort); - -NwRcT nwGtpv2cUdpReset(NwGtpv2cNodeUdpT* thiz); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c deleted file mode 100644 index fc5cc809d0..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c +++ /dev/null @@ -1,220 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U L P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniUlpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniUlpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -/*--------------------------------------------------------------------------- - * Public Functions - *--------------------------------------------------------------------------*/ - -NwRcT -nwGtpv2cUlpInit(NwGtpv2cNodeUlpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, char* peerIpStr) -{ - NwRcT rc; - thiz->hGtpv2cStack = hGtpv2cStack; - strcpy(thiz->peerIpStr, peerIpStr); - return NW_OK; -} - -NwRcT -nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz) -{ - NW_ASSERT(thiz); - memset(thiz, 0, sizeof(NwGtpv2cNodeUlpT)); - return NW_OK; -} - -typedef struct NwGtpv2cPeerS { - uint32_t ipv4Addr; - uint32_t pingCount; - uint32_t pingInterval; - uint32_t t3Time; - uint32_t n3Count; - - uint32_t sendTimeStamp; - NwGtpv2cTunnelHandleT hTunnel; -} NwGtpv2cPeerT; - -NwGtpv2cPeerT* -nwGtpv2cUlpCreatePeerContext(NwGtpv2cNodeUlpT* thiz, uint32_t peerIp) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulpReq; - NwGtpv2cPeerT *pPeer = (NwGtpv2cPeerT*) malloc(sizeof(NwGtpv2cPeerT)); - - if(pPeer) { - pPeer->ipv4Addr = peerIp; - - /* - * Send Message Request to Gtpv2c Stack Instance - */ - - ulpReq.apiType = NW_GTPV2C_ULP_CREATE_LOCAL_TUNNEL; - - ulpReq.apiInfo.createLocalTunnelInfo.hTunnel = 0; - ulpReq.apiInfo.createLocalTunnelInfo.hUlpTunnel = (NwGtpv2cUlpTrxnHandleT)thiz; - ulpReq.apiInfo.createLocalTunnelInfo.teidLocal = (NwGtpv2cUlpTrxnHandleT)0; - ulpReq.apiInfo.createLocalTunnelInfo.peerIp = htonl(peerIp); - - rc = nwGtpv2cProcessUlpReq(thiz->hGtpv2cStack, &ulpReq); - NW_ASSERT(NW_OK == rc); - pPeer->hTunnel = ulpReq.apiInfo.createLocalTunnelInfo.hTunnel; - } - - return pPeer; - -} - -NwRcT -nwGtpv2cUlpSendEchoRequestToPeer(NwGtpv2cNodeUlpT* thiz, NwGtpv2cPeerT *pPeer) -{ - NwRcT rc; - struct timeval tv; - NwGtpv2cUlpApiT ulpReq; - /* - * Send Message Request to Gtpv2c Stack Instance - */ - - ulpReq.apiType = NW_GTPV2C_ULP_API_INITIAL_REQ; - - ulpReq.apiInfo.initialReqInfo.hTunnel = pPeer->hTunnel; - ulpReq.apiInfo.initialReqInfo.hUlpTrxn = (NwGtpv2cUlpTrxnHandleT)pPeer; - ulpReq.apiInfo.initialReqInfo.hUlpTunnel = (NwGtpv2cUlpTunnelHandleT)pPeer; - - rc = nwGtpv2cMsgNew( thiz->hGtpv2cStack, - NW_FALSE, - NW_GTP_ECHO_REQ, - 0, - 0, - &(ulpReq.hMsg)); - - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgAddIeTV1((ulpReq.hMsg), NW_GTPV2C_IE_RECOVERY, 0, thiz->restartCounter); - NW_ASSERT(NW_OK == rc); - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - pPeer->sendTimeStamp = (tv.tv_sec * 1000000) + tv.tv_usec; - - rc = nwGtpv2cProcessUlpReq(thiz->hGtpv2cStack, &ulpReq); - NW_ASSERT(NW_OK == rc); - - return NW_OK; -} - -NwRcT -nwGtpv2cUlpPing(NwGtpv2cNodeUlpT* thiz, - uint32_t peerIp, - uint32_t pingCount, - uint32_t pingInterval, - uint32_t t3Time, - uint32_t n3Count) -{ - NwRcT rc; - NwGtpv2cPeerT *pPeer; - NwGtpv2cUlpApiT ulpReq; - - pPeer = nwGtpv2cUlpCreatePeerContext(thiz, peerIp); - - pPeer->pingCount = pingCount; - pPeer->pingInterval = pingInterval; - pPeer->t3Time = t3Time; - pPeer->n3Count = n3Count; - /* - * Send Echo Request to peer - */ - - rc = nwGtpv2cUlpSendEchoRequestToPeer(thiz, pPeer); - - return rc; -} - -NwRcT -nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc; - uint32_t seqNum; - uint32_t len; - uint32_t recvTimeStamp; - struct timeval tv; - NwGtpv2cPeerT *pPeer; - NwGtpv2cNodeUlpT* thiz; - NW_ASSERT(pUlpApi != NULL); - - thiz = (NwGtpv2cNodeUlpT*) hUlp; - - switch(pUlpApi->apiType) { - case NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND: { - pPeer = (NwGtpv2cPeerT*)pUlpApi->apiInfo.triggeredRspIndInfo.hUlpTrxn; - - if(pUlpApi->apiInfo.triggeredRspIndInfo.msgType == NW_GTP_ECHO_RSP) { - seqNum = nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg); - len = nwGtpv2cMsgGetLength(pUlpApi->hMsg); - - NW_ASSERT(gettimeofday(&tv, NULL) == 0); - recvTimeStamp = (tv.tv_sec * 1000000) + tv.tv_usec; - - NW_LOG(NW_LOG_LEVEL_NOTI, "%u bytes of response from "NW_IPV4_ADDR": gtp_seq=%u time=%2.2f ms", len, NW_IPV4_ADDR_FORMAT(pPeer->ipv4Addr), seqNum, - (float) (recvTimeStamp - pPeer->sendTimeStamp) / 1000 ); - - if(pPeer->pingCount) { - sleep(pPeer->pingInterval); - rc = nwGtpv2cUlpSendEchoRequestToPeer(thiz, pPeer); - - if(pPeer->pingCount != 0xffffffff) pPeer->pingCount--; - } - } - - } - break; - - case NW_GTPV2C_ULP_API_RSP_FAILURE_IND: { - pPeer = (NwGtpv2cPeerT*)pUlpApi->apiInfo.rspFailureInfo.hUlpTrxn; - NW_LOG(NW_LOG_LEVEL_DEBG, "No response from "NW_IPV4_ADDR" (2123)!", NW_IPV4_ADDR_FORMAT(pPeer->ipv4Addr)); - rc = nwGtpv2cUlpSendEchoRequestToPeer(thiz, pPeer); - } - break; - - default: - NW_LOG(NW_LOG_LEVEL_WARN, "Received undefined UlpApi from gtpv2c stack!"); - } - - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h deleted file mode 100644 index 3f56bf58e8..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h +++ /dev/null @@ -1,54 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U L P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniUlpEntity.h - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef __NW_MINI_ULP_H__ -#define __NW_MINI_ULP_H__ - -typedef struct { - uint8_t peerIpStr[16]; - uint32_t restartCounter; - NwGtpv2cStackHandleT hGtpv2cStack; -} NwGtpv2cNodeUlpT; - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT -nwGtpv2cUlpInit(NwGtpv2cNodeUlpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, char* peerIpStr ); - -NwRcT -nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz); - -NwRcT -nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, - NwGtpv2cUlpApiT *pUlpApi); - -NwRcT -nwGtpv2cUlpPing(NwGtpv2cNodeUlpT* thiz, - uint32_t peerIp, - uint32_t pingCount, - uint32_t pingInterval, - uint32_t t3Time, - uint32_t n3Count); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/Makefile.am b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/Makefile.am deleted file mode 100644 index 0cf90d9111..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -AM_CFLAGS = -D__WITH_LIBEVENT__ \ - -I$(top_srcdir)/shared -I$(top_srcdir)/include \ - -I$(top_srcdir)/test-app/nw-udp -I$(top_srcdir)/test-app/nw-log \ - @AM_CFLAGS@ - -if ENABLE_TESTS_APP -bin_PROGRAMS = helloworld -helloworld_SOURCES = \ - NwEvt.h\ - NwMiniLogMgrEntity.h\ - NwMiniTmrMgrEntity.h\ - NwMiniUlpEntity.h\ - NwMiniUdpEntity.h\ - NwMiniLogMgrEntity.c\ - NwMiniTmrMgrEntity.c\ - NwMiniUlpEntity.c\ - NwMiniUdpEntity.c\ - helloworld.c - -helloworld_LDADD = $(top_builddir)/src/libNwGtpv2c.a -levent $(AM_LDFLAGS) -endif \ No newline at end of file diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwEvt.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwEvt.h deleted file mode 100644 index 6df5794a5f..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwEvt.h +++ /dev/null @@ -1,80 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * Copyright (c) 2010-2011 Amit Chawre * - * All rights reserved. * - * * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright * - * notice, this list of conditions and the following disclaimer. * - * 2. 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. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR 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 __NW_EVT_H__ -#define __NW_EVT_H__ -/** - * @file NwEvt.h - * @brief -*/ - -#ifdef __WITH_LIBEVENT__ - -#include - -typedef struct event NwEventT; - -#define NW_EVT_READ (EV_READ) -#define NW_EVT_PERSIST (EV_PERSIST) -#define NW_EVT_CALLBACK(__cbFunc) __cbFunc(int fd, short event, void *arg) -#define NW_TMR_CALLBACK(__cbFunc) __cbFunc(int fd, short event, void *arg) - -#define NW_EVT_INIT event_init -#define NW_EVT_LOOP event_dispatch - -#define NW_EVENT_ADD(__ev, __evSelObj, __evCallback, __evCallbackArg, __evFlags) \ - do { \ - event_set(&(__ev), __evSelObj, __evFlags, __evCallback, __evCallbackArg); \ - event_add(&(__ev), NULL); \ - } while(0) - -#else - -#warning "Event library not defined!" - -/* HACK : Defining dummy values for compilation!*/ - -typedef struct { - int __tbd; -} NwEventT; - -#define NW_EVT_READ (0) -#define NW_EVT_PERSIST (1) -#define NW_EVT_CALLBACK(__cbFunc) __cbFunc(void *arg) -#define NW_TMR_CALLBACK(__cbFunc) __cbFunc(void *arg) - - -#define NW_EVT_INIT() do { printf("error: Event library not defined!\n"); exit (0); } while(0) -#define NW_EVT_LOOP() do { printf("error: Event library not defined!\n"); exit (0); } while(0) -#define NW_EVENT_ADD(...) do { printf("error: Event library not defined!\n"); exit (0); } while(0) - - -#endif - -#endif /* __NW_EVT_H__ */ diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c deleted file mode 100644 index 3ebc6a3a23..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c +++ /dev/null @@ -1,71 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C L O G M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file hello-world.c - * @brief This file contains example of a minimalistic log manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwTypes.h" -#include "NwError.h" -#include "NwLog.h" -#include "NwGtpv2c.h" - -#include "NwMiniLogMgrEntity.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -NwMiniLogMgrT __gLogMgr; - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwMiniLogMgrT* nwMiniLogMgrGetInstance() -{ - return &(__gLogMgr); -} - -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ) -{ - thiz->logLevel = logLevel; - return NW_OK; -} - -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel) -{ - thiz->logLevel = logLevel; -} - -NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT hLogMgr, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr) -{ - NwMiniLogMgrT* thiz = (NwMiniLogMgrT*) hLogMgr; - - if(thiz->logLevel >= logLevel) - printf("NWGTPV2C-STK %s - %s <%s,%u>\n", gLogLevelStr[logLevel], logStr, basename(file), line); - - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h deleted file mode 100644 index 361a2c6d95..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h +++ /dev/null @@ -1,89 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C L O G M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file hello-world.c - * @brief This file contains example of a minimalistic log manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_LOG_MGR_H__ -#define __NW_MINI_LOG_MGR_H__ - -#define NW_LOG( _logLevel, ...) \ - do { \ - if((nwMiniLogMgrGetInstance())->logLevel >= _logLevel) \ - { \ - char _logStr[1024]; \ - snprintf(_logStr, 1024, __VA_ARGS__); \ - printf("NWGTPV2C-APP %s - %s <%s,%u>\n", gLogLevelStr[_logLevel], _logStr, basename(__FILE__), __LINE__);\ - } \ - } while(0) - -/** - * MiniLogMgr Class Definition - */ -typedef struct NwMiniLogMgr { - uint8_t logLevel; /*< Log level */ -} NwMiniLogMgrT; - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get global singleton MiniLogMgr instance - */ -NwMiniLogMgrT* nwMiniLogMgrGetInstance(); - -/** - * Initialize MiniLogMgr - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - */ -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ); - -/** - * Set MiniLogMgr log level - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - */ -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel); - -/** - * Process log request from stack - * @param thiz : Pointer to global singleton MiniLogMgr instance - * @param logLevel : Log Level - * @param file : Filename - * @param line : Line Number - * @param logStr : Log string - */ -NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT logMgrHandle, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c deleted file mode 100644 index 38d2ee6374..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c +++ /dev/null @@ -1,100 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C T M R M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniTmrMgrEntity.c - * @brief This file ontains example of a minimalistic timer manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniTmrMgrEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -/*--------------------------------------------------------------------------- - * Private functions - *--------------------------------------------------------------------------*/ - -static void -NW_TMR_CALLBACK(nwGtpv2cNodeHandleStackTimerTimeout) -{ - NwRcT rc; - NwGtpv2cNodeTmrT *pTmr = (NwGtpv2cNodeTmrT*) arg; - - /* - * Send Timeout Request to Gtpv2c Stack Instance - */ - rc = nwGtpv2cProcessTimeout(pTmr->timeoutArg); - NW_ASSERT(NW_OK == rc); - - free(pTmr); - - return; -} - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void* timeoutArg, - NwGtpv2cTimerHandleT* hTmr) -{ - NwRcT rc = NW_OK; - NwGtpv2cNodeTmrT *pTmr; - struct timeval tv; - - NW_LOG(NW_LOG_LEVEL_DEBG, "Received start timer request from stack with timer type %u, arg %x, for %u sec and %u usec", tmrType, timeoutArg, timeoutSec, timeoutUsec); - - pTmr = (NwGtpv2cNodeTmrT*) malloc(sizeof(NwGtpv2cNodeTmrT)); - - /* set the timevalues*/ - timerclear(&tv); - tv.tv_sec = timeoutSec; - tv.tv_usec = timeoutUsec; - - pTmr->timeoutArg = timeoutArg; - evtimer_set(&pTmr->ev, nwGtpv2cNodeHandleStackTimerTimeout, pTmr); - - /*add event*/ - - event_add(&(pTmr->ev), &tv); - - *hTmr = (NwGtpv2cTimerHandleT)pTmr; - - return rc; -} - -NwRcT nwTimerStop( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT hTmr) -{ - NW_LOG(NW_LOG_LEVEL_DEBG, "Received stop timer request from stack for timer handle %u", hTmr); - evtimer_del(&(((NwGtpv2cNodeTmrT*)hTmr)->ev)); - free((void*)hTmr); - return NW_OK; -} - -#ifdef __cplusplus -} -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h deleted file mode 100644 index 85970c6cc2..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h +++ /dev/null @@ -1,57 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C T M R M G R E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniTmrMgrEntity.c - * @brief This file ontains example of a minimalistic timer manager entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_TMR_MGR_H__ -#define __NW_MINI_TMR_MGR_H__ - -typedef struct { - uint8_t _tbd; -} NwGtpv2cNodeTmrMgrT; - -typedef struct { - NwEventT ev; - void* timeoutArg; -} NwGtpv2cNodeTmrT; - - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void* timeoutArg, - NwGtpv2cTimerHandleT* hTmr); - - -NwRcT nwTimerStop( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT hTmr); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c deleted file mode 100644 index a5352349f5..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c +++ /dev/null @@ -1,149 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U D P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniUdpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniUdpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#define MAX_UDP_PAYLOAD_LEN (4096) - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -/*--------------------------------------------------------------------------- - * Private functions - *--------------------------------------------------------------------------*/ - -static -void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) -{ - NwRcT rc; - uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; - NwS32T bytesRead; - uint32_t peerLen; - struct sockaddr_in peer; - NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) arg; - - peerLen = sizeof(peer); - - bytesRead = recvfrom(fd, udpBuf, MAX_UDP_PAYLOAD_LEN , 0, (struct sockaddr *) &peer,(socklen_t*) &peerLen); - - if(bytesRead) { - uint32_t peerIp = (peer.sin_addr.s_addr); - NW_LOG(NW_LOG_LEVEL_DEBG, "Received UDP message of size %u from peer %u.%u.%u.%u:%u", bytesRead, - (peerIp & 0x000000ff), - (peerIp & 0x0000ff00) >> 8, - (peerIp & 0x00ff0000) >> 16, - (peerIp & 0xff000000) >> 24, - ntohs(peer.sin_port)); - rc = nwGtpv2cProcessUdpReq(thiz->hGtpv2cStack, udpBuf, bytesRead, ntohs(peer.sin_port), ntohl(peer.sin_addr.s_addr)); - } else { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - } -} - - -/*--------------------------------------------------------------------------- - * Public functions - *--------------------------------------------------------------------------*/ - -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipv4Addr) -{ - int sd; - struct sockaddr_in addr; - - sd = socket(AF_INET, SOCK_DGRAM, 0); - - if (sd < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - addr.sin_family = AF_INET; - addr.sin_port = htons(2123); - addr.sin_addr.s_addr = inet_addr(ipv4Addr); - memset(addr.sin_zero, '\0', sizeof (addr.sin_zero)); - - if(bind(sd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - NW_EVENT_ADD((thiz->ev), sd, nwUdpDataIndicationCallbackData, thiz, NW_EVT_READ | NW_EVT_PERSIST); - - thiz->hSocket = sd; - thiz->hGtpv2cStack = hGtpv2cStack; - - return NW_OK; -} - -NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz) -{ - close(thiz->hSocket); -} - -NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - uint8_t* dataBuf, - uint32_t dataSize, - uint32_t peerIp, - uint32_t peerPort) -{ - struct sockaddr_in peerAddr; - NwS32T bytesSent; - NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) udpHandle; - - NW_LOG(NW_LOG_LEVEL_DEBG, "Sending buf of size %u for on handle %x to peer %u.%u.%u.%u:%u", dataSize, udpHandle, - (peerIp & 0xff000000) >> 24, - (peerIp & 0x00ff0000) >> 16, - (peerIp & 0x0000ff00) >> 8, - (peerIp & 0x000000ff), - peerPort); - - peerAddr.sin_family = AF_INET; - peerAddr.sin_port = htons(peerPort); - peerAddr.sin_addr.s_addr = htonl(peerIp); - memset(peerAddr.sin_zero, '\0', sizeof (peerAddr.sin_zero)); - - bytesSent = sendto (thiz->hSocket, dataBuf, dataSize, 0, (struct sockaddr *) &peerAddr, sizeof(peerAddr)); - - if(bytesSent < 0) { - NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno)); - NW_ASSERT(0); - } - - return NW_OK; -} - - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h deleted file mode 100644 index 4f1bb3eef9..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h +++ /dev/null @@ -1,51 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U D P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file NwMiniUdpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifndef __NW_MINI_UDP_ENTITY_H__ -#define __NW_MINI_UDP_ENTITY_H__ - -typedef struct { - uint32_t hSocket; - NwEventT ev; - NwGtpv2cStackHandleT hGtpv2cStack; -} NwGtpv2cNodeUdpT; - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipv4Addr); - -NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz); - -NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - uint8_t* dataBuf, - uint32_t dataSize, - uint32_t peerIp, - uint32_t peerPort); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c deleted file mode 100644 index 82bc6580af..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c +++ /dev/null @@ -1,278 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U L P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniUlpEntity.c - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include -#include "NwEvt.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" -#include "NwMiniLogMgrEntity.h" -#include "NwMiniUlpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -static NwRcT -nwGtpv2cCreateSessionRequestIeIndication(uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* arg) -{ - NW_LOG(NW_LOG_LEVEL_DEBG, "Received IE Parse Indication for of type %u, length %u, instance %u!", ieType, ieLength, ieInstance); - return NW_OK; -} - -/*--------------------------------------------------------------------------- - * Public Functions - *--------------------------------------------------------------------------*/ - -NwRcT -nwGtpv2cUlpInit(NwGtpv2cNodeUlpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, char* peerIpStr) -{ - NwRcT rc; - thiz->hGtpv2cStack = hGtpv2cStack; - strcpy(thiz->peerIpStr, peerIpStr); - return NW_OK; -} - -NwRcT -nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz) -{ - NW_ASSERT(thiz); - memset(thiz, 0, sizeof(NwGtpv2cNodeUlpT)); - return NW_OK; -} - -NwRcT -nwGtpv2cUlpSenEchoRequestToPeer(NwGtpv2cNodeUlpT* thiz, uint32_t peerIp) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulpReq; - /* - * Send Message Request to Gtpv2c Stack Instance - */ - - ulpReq.apiType = NW_GTPV2C_ULP_API_INITIAL_REQ; - - ulpReq.apiInfo.initialReqInfo.hTunnel = 0; - ulpReq.apiInfo.initialReqInfo.hUlpTrxn = (NwGtpv2cUlpTrxnHandleT)thiz; - ulpReq.apiInfo.initialReqInfo.hUlpTunnel = (NwGtpv2cUlpTrxnHandleT)thiz; - ulpReq.apiInfo.initialReqInfo.teidLocal = (NwGtpv2cUlpTrxnHandleT)0; - ulpReq.apiInfo.initialReqInfo.peerIp = htonl(peerIp); - - rc = nwGtpv2cMsgNew( thiz->hGtpv2cStack, - NW_FALSE, - NW_GTP_ECHO_REQ, - 0, - 0, - &(ulpReq.hMsg)); - - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgAddIeTV1((ulpReq.hMsg), NW_GTPV2C_IE_RECOVERY, 0, thiz->restartCounter); - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cProcessUlpReq(thiz->hGtpv2cStack, &ulpReq); - NW_ASSERT(NW_OK == rc); - - return NW_OK; -} - -NwRcT -nwGtpv2cUlpCreateSessionRequestToPeer(NwGtpv2cNodeUlpT* thiz) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulpReq; - - /* - * Send Message Request to Gtpv2c Stack Instance - */ - - ulpReq.apiType = (NW_GTPV2C_ULP_API_INITIAL_REQ | NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL); - - ulpReq.apiInfo.initialReqInfo.hUlpTrxn = (NwGtpv2cUlpTrxnHandleT)thiz; - ulpReq.apiInfo.initialReqInfo.teidLocal = (NwGtpv2cUlpTrxnHandleT)thiz; - ulpReq.apiInfo.initialReqInfo.peerIp = ntohl(inet_addr(thiz->peerIpStr)); - - rc = nwGtpv2cMsgNew( thiz->hGtpv2cStack, - NW_TRUE, - NW_GTP_CREATE_SESSION_REQ, - 0, - 0, - &(ulpReq.hMsg)); - - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgAddIeTV1((ulpReq.hMsg), NW_GTPV2C_IE_RECOVERY, 0, thiz->restartCounter); - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cProcessUlpReq(thiz->hGtpv2cStack, &ulpReq); - NW_ASSERT(NW_OK == rc); - - return NW_OK; -} - -NwRcT -nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc; - NwGtpv2cNodeUlpT* thiz; - NW_ASSERT(pUlpApi != NULL); - - thiz = (NwGtpv2cNodeUlpT*) hUlp; - - switch(pUlpApi->apiType) { - - case NW_GTPV2C_ULP_API_INITIAL_REQ_IND: { - NwGtpv2cUlpApiT ulpReq; - NwGtpv2cMsgParserT *pMsgParser; - NW_LOG(NW_LOG_LEVEL_DEBG, "Received NW_GTPV2C_ULP_API_INITIAL_REQ_IND from gtpv2c stack! %X:%u", pUlpApi->apiInfo.initialReqIndInfo.peerIp, pUlpApi->apiInfo.initialReqIndInfo.peerPort); - - rc = nwGtpv2cMsgParserNew(thiz->hGtpv2cStack, NW_GTP_CREATE_SESSION_REQ, nwGtpv2cCreateSessionRequestIeIndication, NULL, &pMsgParser); - NW_ASSERT(NW_OK == rc); - - if(pUlpApi->apiInfo.initialReqIndInfo.msgType == NW_GTP_CREATE_SESSION_REQ) { - - struct { - uint8_t causeValue; - uint8_t spare:5; - uint8_t pce:1; - uint8_t bce:1; - uint8_t cs:1; - } cause; - - - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_RECOVERY, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY, nwGtpv2cCreateSessionRequestIeIndication, NULL); - NW_ASSERT(NW_OK == rc); - - uint8_t offendingIeType, OffendingIeLength; - rc = nwGtpv2cMsgParserRun(pMsgParser, (pUlpApi->hMsg), &offendingIeType, &OffendingIeLength); - - if( rc != NW_OK ) { - switch(rc) { - case NW_GTPV2C_MANDATORY_IE_MISSING: - NW_LOG(NW_LOG_LEVEL_ERRO, "Mandatory IE type '%u' of instance '%u' missing!", offendingIeType, OffendingIeLength); - cause.causeValue = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - break; - - default: - NW_LOG(NW_LOG_LEVEL_ERRO, "Unknown message parse error!"); - cause.causeValue = 0; - break; - } - - } else { - cause.causeValue = NW_GTPV2C_CAUSE_REQUEST_ACCEPTED; - } - - /* - * Send Message Request to Gtpv2c Stack Instance - */ - ulpReq.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulpReq.apiInfo.triggeredRspInfo.hTrxn = pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - - rc = nwGtpv2cMsgNew( thiz->hGtpv2cStack, - NW_TRUE, - NW_GTP_CREATE_SESSION_RSP, - 0, - nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg), - &(ulpReq.hMsg)); - - rc = nwGtpv2cMsgAddIe((ulpReq.hMsg), NW_GTPV2C_IE_CAUSE, 2, 0, (uint8_t*)&cause); - NW_ASSERT(NW_OK == rc); - - NW_LOG(NW_LOG_LEVEL_NOTI, "Received NW_GTP_CREATE_SESSION_REQ, Sending NW_GTP_CREATE_SESSION_RSP!"); - rc = nwGtpv2cProcessUlpReq(thiz->hGtpv2cStack, &ulpReq); - NW_ASSERT(NW_OK == rc); - } - - rc = nwGtpv2cMsgParserDelete(thiz->hGtpv2cStack, pMsgParser); - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(thiz->hGtpv2cStack, (pUlpApi->hMsg)); - NW_ASSERT(NW_OK == rc); - - } - break; - - case NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND: { - NwGtpv2cUlpApiT ulpReq; - NwGtpv2cMsgParserT *pMsgParser; - NW_LOG(NW_LOG_LEVEL_DEBG, "Received NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND from gtpv2c stack!", pUlpApi->apiInfo.triggeredRspIndInfo, pUlpApi->apiInfo.triggeredRspIndInfo); - - rc = nwGtpv2cMsgParserNew(thiz->hGtpv2cStack, NW_GTP_CREATE_SESSION_REQ, nwGtpv2cCreateSessionRequestIeIndication, NULL, &pMsgParser); - NW_ASSERT(NW_OK == rc); - - if(pUlpApi->apiInfo.triggeredRspIndInfo.msgType == NW_GTP_CREATE_SESSION_RSP) { - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_CAUSE, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY, nwGtpv2cCreateSessionRequestIeIndication, NULL); - NW_ASSERT(NW_OK == rc); - - uint8_t offendingIeType, OffendingIeLength; - rc = nwGtpv2cMsgParserRun(pMsgParser, (pUlpApi->hMsg), &offendingIeType, &OffendingIeLength); - - if( rc != NW_OK ) { - switch(rc) { - case NW_GTPV2C_MANDATORY_IE_MISSING: - NW_LOG(NW_LOG_LEVEL_ERRO, "Mandatory IE Missing!"); - break; - - default: - NW_LOG(NW_LOG_LEVEL_ERRO, "Unknown message parse error!"); - break; - - } - - } - - /* - * Send Message Request to Gtpv2c Stack Instance - */ - NW_LOG(NW_LOG_LEVEL_NOTI, "Received NW_GTP_CREATE_SESSION_RSP, Sending NW_GTP_CREATE_SESSION_REQ!"); - nwGtpv2cUlpCreateSessionRequestToPeer(thiz); - } - - rc = nwGtpv2cMsgParserDelete(thiz->hGtpv2cStack, pMsgParser); - NW_ASSERT(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(thiz->hGtpv2cStack, (pUlpApi->hMsg)); - NW_ASSERT(NW_OK == rc); - - } - break; - - case NW_GTPV2C_ULP_API_RSP_FAILURE_IND: { - NW_LOG(NW_LOG_LEVEL_ERRO, "Received NW_GTPV2C_ULP_API_RSP_FAILURE from gtpv2c stack for transaction '%x'!", thiz); - } - break; - - default: - NW_LOG(NW_LOG_LEVEL_WARN, "Received undefined UlpApi from gtpv2c stack!"); - } - - return NW_OK; -} - -#ifdef __cplusplus -} -#endif - diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h deleted file mode 100644 index e92a6ba6bc..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h +++ /dev/null @@ -1,49 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * M I N I M A L I S T I C U L P E N T I T Y * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - -/** - * @file NwMiniUlpEntity.h - * @brief This file contains example of a minimalistic ULP entity. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" - -#ifndef __NW_MINI_ULP_H__ -#define __NW_MINI_ULP_H__ - -typedef struct { - uint8_t peerIpStr[16]; - uint32_t restartCounter; - NwGtpv2cStackHandleT hGtpv2cStack; -} NwGtpv2cNodeUlpT; - -#ifdef __cplusplus -extern "C" { -#endif - -NwRcT -nwGtpv2cUlpInit(NwGtpv2cNodeUlpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, char* peerIpStr ); - -NwRcT -nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz); - -NwRcT -nwGtpv2cUlpCreateSessionRequestToPeer(NwGtpv2cNodeUlpT* thiz); - -NwRcT -nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, - NwGtpv2cUlpApiT *pUlpApi); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c deleted file mode 100644 index 2b78e104e2..0000000000 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c +++ /dev/null @@ -1,179 +0,0 @@ -/*----------------------------------------------------------------------------* - * * - * n w - g t p v 2 c * - * G P R S T u n n e l i n g P r o t o c o l v 2 c S t a c k * - * * - * M I N I M A L I S T I C D E M O N S T R A T I O N * - * * - * Copyright (C) 2010 Amit Chawre. * - * * - *----------------------------------------------------------------------------*/ - - -/** - * @file hello-world.c - * @brief This is a test program demostrating usage of nw-gtpv2c library. -*/ - -#include -#include -#include "NwEvt.h" -#include "NwLog.h" -#include "NwGtpv2c.h" - -#include "NwMiniLogMgrEntity.h" -#include "NwMiniTmrMgrEntity.h" -#include "NwMiniUdpEntity.h" -#include "NwMiniUlpEntity.h" - -#ifndef NW_ASSERT -#define NW_ASSERT assert -#endif - -static -NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; - -/*--------------------------------------------------------------------------- - * T H E M A I N F U N C T I O N - *--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - NwRcT rc; - uint32_t logLevel; - uint8_t* logLevelStr; - - NwGtpv2cStackHandleT hGtpv2cStack = 0; - - NwGtpv2cNodeUlpT ulpObj; - NwGtpv2cNodeUdpT udpObj; - - - NwGtpv2cUlpEntityT ulp; - NwGtpv2cUdpEntityT udp; - NwGtpv2cTimerMgrEntityT tmrMgr; - NwGtpv2cLogMgrEntityT logMgr; - - if(argc != 3) { - printf("Usage: %s \n", argv[0]); - exit(0); - } - - logLevelStr = getenv ("NW_LOG_LEVEL"); - - if(logLevelStr == NULL) { - logLevel = NW_LOG_LEVEL_INFO; - } else { - if(strncmp(logLevelStr, "EMER",4) == 0) - logLevel = NW_LOG_LEVEL_EMER; - else if(strncmp(logLevelStr, "ALER",4) == 0) - logLevel = NW_LOG_LEVEL_ALER; - else if(strncmp(logLevelStr, "CRIT",4) == 0) - logLevel = NW_LOG_LEVEL_CRIT; - else if(strncmp(logLevelStr, "ERRO",4) == 0) - logLevel = NW_LOG_LEVEL_ERRO ; - else if(strncmp(logLevelStr, "WARN",4) == 0) - logLevel = NW_LOG_LEVEL_WARN; - else if(strncmp(logLevelStr, "NOTI",4) == 0) - logLevel = NW_LOG_LEVEL_NOTI; - else if(strncmp(logLevelStr, "INFO",4) == 0) - logLevel = NW_LOG_LEVEL_INFO; - else if(strncmp(logLevelStr, "DEBG",4) == 0) - logLevel = NW_LOG_LEVEL_DEBG; - } - - /*--------------------------------------------------------------------------- - * Initialize event library - *--------------------------------------------------------------------------*/ - - NW_EVT_INIT(); - - /*--------------------------------------------------------------------------- - * Initialize Log Manager - *--------------------------------------------------------------------------*/ - nwMiniLogMgrInit(nwMiniLogMgrGetInstance(), logLevel); - - /*--------------------------------------------------------------------------- - * Initialize Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cInitialize(&hGtpv2cStack); - - if(rc != NW_OK) { - NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to create gtpv2c stack instance. Error '%u' occured", rc); - exit(1); - } - - NW_LOG(NW_LOG_LEVEL_INFO, "Gtpv2c Stack Handle '%X' Creation Successful!", hGtpv2cStack); - - rc = nwGtpv2cSetLogLevel(hGtpv2cStack, logLevel); - - /*--------------------------------------------------------------------------- - * Set up Ulp Entity - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cUlpInit(&ulpObj, hGtpv2cStack, argv[2]); - NW_ASSERT(NW_OK == rc); - - ulp.hUlp = (NwGtpv2cUlpHandleT) &ulpObj; - ulp.ulpReqCallback = nwGtpv2cUlpProcessStackReqCallback; - - rc = nwGtpv2cSetUlpEntity(hGtpv2cStack, &ulp); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Udp Entity - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cUdpInit(&udpObj, hGtpv2cStack, (argv[1])); - NW_ASSERT(NW_OK == rc); - - udp.hUdp = (NwGtpv2cUdpHandleT) &udpObj; - udp.udpDataReqCallback = nwGtpv2cUdpDataReq; - - rc = nwGtpv2cSetUdpEntity(hGtpv2cStack, &udp); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Log Entity - *--------------------------------------------------------------------------*/ - tmrMgr.tmrMgrHandle = 0; - tmrMgr.tmrStartCallback = nwTimerStart; - tmrMgr.tmrStopCallback = nwTimerStop; - - rc = nwGtpv2cSetTimerMgrEntity(hGtpv2cStack, &tmrMgr); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Set up Log Entity - *--------------------------------------------------------------------------*/ - logMgr.logMgrHandle = (NwGtpv2cLogMgrHandleT) nwMiniLogMgrGetInstance(); - logMgr.logReqCallback = nwMiniLogMgrLogRequest; - - rc = nwGtpv2cSetLogMgrEntity(hGtpv2cStack, &logMgr); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Send Message Request to Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - //rc = nwGtpv2cUlpCreateSessionRequestToPeer(&ulpObj); - rc = nwGtpv2cUlpSenEchoRequestToPeer(&ulpObj, inet_addr(argv[2])); - NW_ASSERT(NW_OK == rc); - - /*--------------------------------------------------------------------------- - * Event loop - *--------------------------------------------------------------------------*/ - - NW_EVT_LOOP(); - NW_LOG(NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!"); - - /*--------------------------------------------------------------------------- - * Destroy Gtpv2c Stack Instance - *--------------------------------------------------------------------------*/ - rc = nwGtpv2cFinalize(hGtpv2cStack); - - if(rc != NW_OK) { - NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to finalize gtpv2c stack instance. Error '%u' occured", rc); - } else { - NW_LOG(NW_LOG_LEVEL_INFO, "Gtpv2c Stack Handle '%X' Finalize Successful!", hGtpv2cStack); - } - - return rc; -} diff --git a/openair-cn/INSTALL b/openair-cn/INSTALL deleted file mode 100644 index 2099840756..0000000000 --- a/openair-cn/INSTALL +++ /dev/null @@ -1,370 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, -Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command `./configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf limitation. Until the limitation is lifted, you can use -this workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. diff --git a/openair-cn/MME_APP/COPYING b/openair-cn/MME_APP/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/MME_APP/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/MME_APP/Makefile.am b/openair-cn/MME_APP/Makefile.am deleted file mode 100644 index c736fb38ba..0000000000 --- a/openair-cn/MME_APP/Makefile.am +++ /dev/null @@ -1,59 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/S1AP \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/S6A \ - -I$(top_srcdir)/SCTP \ - -I$(top_srcdir)/SECU \ - -I$(top_srcdir)/UTILS - -noinst_LTLIBRARIES = libmmeapp.la -libmmeapp_la_LDFLAGS = -all-static - -libmmeapp_la_SOURCES = \ - mme_app_capabilities.c \ - mme_app_context.c \ - mme_app_main.c mme_app_defs.h \ - mme_app_bearer.c \ - mme_app_authentication.c \ - mme_app_location.c \ - mme_app_statistics.c mme_app_statistics.h \ - mme_app_defs.h mme_app_extern.h \ - mme_app_itti_messaging.h \ - s6a_2_nas_cause.c diff --git a/openair-cn/MME_APP/mme_app_authentication.c b/openair-cn/MME_APP/mme_app_authentication.c deleted file mode 100644 index d10e7d645b..0000000000 --- a/openair-cn/MME_APP/mme_app_authentication.c +++ /dev/null @@ -1,365 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#include -#include -#include -#include - -#include "msc.h" -#include "intertask_interface.h" -#include "mme_app_itti_messaging.h" - -#include "mme_config.h" - -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" -#include "mcc_mnc_itu.h" - -#include "assertions.h" - -static -int mme_app_request_authentication_info(const char *imsi, - const uint8_t nb_of_vectors, - const plmn_t *plmn, - const uint8_t *auts); - -static -int mme_app_request_authentication_info(const char *imsi, - const uint8_t nb_of_vectors, - const plmn_t *plmn, - const uint8_t *auts) -{ - s6a_auth_info_req_t *auth_info_req = NULL; - MessageDef *message_p = NULL; - int imsi_length = strlen(imsi); - - DevAssert(plmn != NULL); - - message_p = itti_alloc_new_message(TASK_MME_APP, S6A_AUTH_INFO_REQ); - - auth_info_req = &message_p->ittiMsg.s6a_auth_info_req; - memset(auth_info_req, 0, sizeof(*auth_info_req)); - - strncpy(auth_info_req->imsi, imsi, imsi_length); - auth_info_req->imsi_length = imsi_length; - //MME_APP_IMSI_TO_STRING(imsi, auth_info_req->imsi); - - memcpy(&auth_info_req->visited_plmn, plmn, sizeof(plmn_t)); - MME_APP_DEBUG("%s visited_plmn MCC %X%X%X MNC %X%X%X\n", - __FUNCTION__, - auth_info_req->visited_plmn.MCCdigit1, - auth_info_req->visited_plmn.MCCdigit2, - auth_info_req->visited_plmn.MCCdigit3, - auth_info_req->visited_plmn.MNCdigit1, - auth_info_req->visited_plmn.MNCdigit2, - auth_info_req->visited_plmn.MNCdigit3); - uint8_t *ptr = (uint8_t *)&auth_info_req->visited_plmn; - MME_APP_DEBUG("%s visited_plmn %02X%02X%02X\n", - __FUNCTION__, - ptr[0], - ptr[1], - ptr[2]); - - auth_info_req->nb_of_vectors = nb_of_vectors; - - if (auts != NULL) { - auth_info_req->re_synchronization = 1; - memcpy(auth_info_req->auts, auts, sizeof(auth_info_req->auts)); - } else { - auth_info_req->re_synchronization = 0; - memset(auth_info_req->auts, 0, sizeof(auth_info_req->auts)); - } - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S6A_MME, - NULL,0, - "0 S6A_AUTH_INFO_REQ IMSI %s visited_plmn %02X%02X%02X re_sync %u", - imsi,ptr[0],ptr[1],ptr[2],auth_info_req->re_synchronization); - - return itti_send_msg_to_task(TASK_S6A, INSTANCE_DEFAULT, message_p); -} - -int mme_app_handle_nas_auth_resp(const nas_auth_resp_t * const nas_auth_resp_pP) -{ - struct ue_context_s *ue_context = NULL; - uint64_t imsi = 0; - - DevAssert(nas_auth_resp_pP != NULL); - - MME_APP_STRING_TO_IMSI((char *)nas_auth_resp_pP->imsi, &imsi); - - MME_APP_DEBUG("Handling imsi %"IMSI_FORMAT"\n", imsi); - - - if ((ue_context = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, - imsi)) == NULL) { - MME_APP_ERROR("That's embarrassing as we don't know this IMSI\n"); - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 NAS_AUTH_RESP Unknown imsi %"IMSI_FORMAT,imsi); - AssertFatal(0, "That's embarrassing as we don't know this IMSI\n"); - return -1; - } - - /* Consider the UE authenticated */ - ue_context->imsi_auth = IMSI_AUTHENTICATED; - - /* TODO: Get keys... */ - - /* Now generate S6A ULR */ - { - MessageDef *message_p = NULL; - s6a_update_location_req_t *s6a_ulr = NULL; - - message_p = itti_alloc_new_message(TASK_MME_APP, S6A_UPDATE_LOCATION_REQ); - - if (message_p == NULL) { - return -1; - } - - s6a_ulr = &message_p->ittiMsg.s6a_update_location_req; - - memcpy(s6a_ulr->imsi, nas_auth_resp_pP->imsi, 16); - s6a_ulr->initial_attach = INITIAL_ATTACH; - s6a_ulr->rat_type = RAT_EUTRAN; - /* Check if we already have UE data */ - s6a_ulr->skip_subscriber_data = 0; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S6A_MME, - NULL,0, - " S6A_UPDATE_LOCATION_REQ IMSI %s RAT_EUTRAN", - imsi); - - return itti_send_msg_to_task(TASK_S6A, INSTANCE_DEFAULT, message_p); - } - return -1; -} - -int -mme_app_handle_authentication_info_answer( - const s6a_auth_info_ans_t * const s6a_auth_info_ans_pP) -{ - struct ue_context_s *ue_context = NULL; - uint64_t imsi = 0; - - DevAssert(s6a_auth_info_ans_pP != NULL); - - MME_APP_STRING_TO_IMSI((char *)s6a_auth_info_ans_pP->imsi, &imsi); - - MME_APP_DEBUG("Handling imsi %"IMSI_FORMAT"\n", imsi); - - - if ((ue_context = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, - imsi)) == NULL) { - MME_APP_ERROR("That's embarrassing as we don't know this IMSI\n"); - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 S6A_AUTH_INFO_ANS Unknown imsi %"IMSI_FORMAT,imsi); - return -1; - } - - if ((s6a_auth_info_ans_pP->result.present == S6A_RESULT_BASE) && - (s6a_auth_info_ans_pP->result.choice.base == DIAMETER_SUCCESS)) { - /* S6A procedure has succeeded. - * We have to request UE authentication. - */ - - /* Check that list is not empty and contain only one element */ - DevCheck(s6a_auth_info_ans_pP->auth_info.nb_of_vectors == 1, - s6a_auth_info_ans_pP->auth_info.nb_of_vectors, 1, 0); - - if (ue_context->vector_list == NULL) { - ue_context->vector_list = malloc(sizeof(eutran_vector_t)); - DevAssert(ue_context->vector_list != NULL); - } else { - /* Some vector already exist */ - ue_context->vector_list = realloc( - ue_context->vector_list, - (ue_context->nb_of_vectors + s6a_auth_info_ans_pP->auth_info.nb_of_vectors) * sizeof(eutran_vector_t)); - - DevAssert(ue_context->vector_list != NULL); - } - - memcpy(&ue_context->vector_list[ue_context->nb_of_vectors], - &s6a_auth_info_ans_pP->auth_info.eutran_vector, sizeof(eutran_vector_t)); - - ue_context->vector_in_use = &ue_context->vector_list[ue_context->nb_of_vectors]; - - ue_context->nb_of_vectors += s6a_auth_info_ans_pP->auth_info.nb_of_vectors; - - MME_APP_DEBUG("INFORMING NAS ABOUT AUTH RESP SUCCESS got %u vector(s)\n", - s6a_auth_info_ans_pP->auth_info.nb_of_vectors); - - mme_app_itti_auth_rsp(ue_context->ue_id, - 1, - &s6a_auth_info_ans_pP->auth_info.eutran_vector); - } else { - MME_APP_ERROR("INFORMING NAS ABOUT AUTH RESP ERROR CODE\n"); - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 S6A_AUTH_INFO_ANS S6A Failure imsi %"IMSI_FORMAT,imsi); - - - - /* Inform NAS layer with the right failure */ - if (s6a_auth_info_ans_pP->result.present == S6A_RESULT_BASE) { - mme_app_itti_auth_fail(ue_context->ue_id, s6a_error_2_nas_cause( - s6a_auth_info_ans_pP->result.choice.base, 0)); - } else { - mme_app_itti_auth_fail(ue_context->ue_id, s6a_error_2_nas_cause( - s6a_auth_info_ans_pP->result.choice.experimental, 1)); - } - } - - return 0; -} - - -void -mme_app_handle_nas_auth_param_req( - const nas_auth_param_req_t * const nas_auth_param_req_pP) -{ - plmn_t *visited_plmn = NULL; - struct ue_context_s *ue_context = NULL; - uint64_t imsi = 0; - int mnc_length = 0; - plmn_t visited_plmn_from_req = { - .MCCdigit3 = 0, - .MCCdigit2 = 0, - .MCCdigit1 = 0, - .MNCdigit1 = 0, - .MNCdigit2 = 0, - .MNCdigit3 = 0, - }; - DevAssert(nas_auth_param_req_pP != NULL); - - visited_plmn = &visited_plmn_from_req; - - visited_plmn_from_req.MCCdigit1 = nas_auth_param_req_pP->imsi[0]; - visited_plmn_from_req.MCCdigit2 = nas_auth_param_req_pP->imsi[1]; - visited_plmn_from_req.MCCdigit3 = nas_auth_param_req_pP->imsi[2]; - - mnc_length = find_mnc_length( - nas_auth_param_req_pP->imsi[0], - nas_auth_param_req_pP->imsi[1], - nas_auth_param_req_pP->imsi[2], - nas_auth_param_req_pP->imsi[3], - nas_auth_param_req_pP->imsi[4], - nas_auth_param_req_pP->imsi[5] - ); - - if (mnc_length == 2) { - visited_plmn_from_req.MNCdigit1 = nas_auth_param_req_pP->imsi[3]; - visited_plmn_from_req.MNCdigit2 = nas_auth_param_req_pP->imsi[4]; - visited_plmn_from_req.MNCdigit3 = 15; - } else if (mnc_length == 3) { - visited_plmn_from_req.MNCdigit1 = nas_auth_param_req_pP->imsi[3]; - visited_plmn_from_req.MNCdigit2 = nas_auth_param_req_pP->imsi[4]; - visited_plmn_from_req.MNCdigit3 = nas_auth_param_req_pP->imsi[5]; - } else { - AssertFatal(0, "MNC Not found (mcc_mnc_list)"); - } - - if (mnc_length == 3) { - MME_APP_DEBUG("%s visited_plmn_from_req %1d%1d%1d.%1d%1d%1d\n", - __FUNCTION__, - visited_plmn_from_req.MCCdigit1, - visited_plmn_from_req.MCCdigit2, - visited_plmn_from_req.MCCdigit3, - visited_plmn_from_req.MNCdigit1, - visited_plmn_from_req.MNCdigit2, - visited_plmn_from_req.MNCdigit3); - } else { - MME_APP_DEBUG("%s visited_plmn_from_req %1d%1d%1d.%1d%1d\n", - __FUNCTION__, - visited_plmn_from_req.MCCdigit1, - visited_plmn_from_req.MCCdigit2, - visited_plmn_from_req.MCCdigit3, - visited_plmn_from_req.MNCdigit1, - visited_plmn_from_req.MNCdigit2); - } - - MME_APP_STRING_TO_IMSI(nas_auth_param_req_pP->imsi, &imsi); - - MME_APP_DEBUG("%s Handling imsi %"IMSI_FORMAT"\n", __FUNCTION__, imsi); - MME_APP_DEBUG("%s Handling imsi from req %s (mnc length %d)\n", - __FUNCTION__, - nas_auth_param_req_pP->imsi, - mnc_length); - - /* Fetch the context associated with this IMSI */ - ue_context = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, imsi); - - if (ue_context == NULL) { - /* Currently no context available -> trigger an authentication request - * to the HSS. - */ - MME_APP_DEBUG("UE context search by IMSI failed, try by ue id\n"); - ue_context = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, nas_auth_param_req_pP->ue_id); - - if (ue_context == NULL) { - // should have been created by initial ue message - MME_APP_ERROR("UE context doesn't exist -> create one\n"); - - if ((ue_context = mme_create_new_ue_context()) == NULL) { - /* Error during ue context malloc */ - /* TODO */ - DevMessage("mme_create_new_ue_context"); - return; - } - - ue_context->ue_id = nas_auth_param_req_pP->ue_id; - ue_context->mme_ue_s1ap_id = nas_auth_param_req_pP->ue_id; - DevAssert(mme_insert_ue_context(&mme_app_desc.mme_ue_contexts, ue_context) == 0); - } - - ue_context->imsi = imsi; - - /* We have no vector for this UE, send an authentication request - * to the HSS. - */ - - /* Acquire the current time */ - time(&ue_context->cell_age); - - memcpy(&ue_context->guti.gummei.plmn, visited_plmn, sizeof(plmn_t)); - MME_APP_DEBUG("and we have no auth. vector for it, request" - " authentication information\n"); - mme_app_request_authentication_info(nas_auth_param_req_pP->imsi, 1, visited_plmn, NULL); - } else { - memcpy(&ue_context->guti.gummei.plmn, visited_plmn, sizeof(plmn_t)); - - mme_app_request_authentication_info(nas_auth_param_req_pP->imsi, 1, visited_plmn, nas_auth_param_req_pP->auts); - } -} diff --git a/openair-cn/MME_APP/mme_app_bearer.c b/openair-cn/MME_APP/mme_app_bearer.c deleted file mode 100644 index fd909b198e..0000000000 --- a/openair-cn/MME_APP/mme_app_bearer.c +++ /dev/null @@ -1,906 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file mme_app_bearer.c -* \brief -* \author Sebastien ROUX, Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" - -#include "mme_app_extern.h" -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" -#include "sgw_lite_ie_defs.h" - -#include "secu_defs.h" - -#include "assertions.h" -#include "common_types.h" -#include "msc.h" - - -//------------------------------------------------------------------------------ -int -mme_app_send_s11_release_access_bearers_req( - struct ue_context_s * const ue_context_pP) -//------------------------------------------------------------------------------ -{ - uint8_t i = 0; - task_id_t to_task = TASK_UNKNOWN; - /* Keep the identifier to the default APN */ - context_identifier_t context_identifier; - MessageDef *message_p = NULL; - SgwReleaseAccessBearersRequest *release_access_bearers_request_p = NULL; - - - DevAssert(ue_context_pP != NULL); - -#if !defined(ENABLE_STANDALONE_EPC) - to_task = TASK_S11; -#else - to_task = TASK_SPGW_APP; -#endif - - message_p = itti_alloc_new_message(TASK_MME_APP, SGW_RELEASE_ACCESS_BEARERS_REQUEST); - release_access_bearers_request_p = &message_p->ittiMsg.sgwReleaseAccessBearersRequest; - memset(release_access_bearers_request_p, 0, sizeof(SgwReleaseAccessBearersRequest)); - - release_access_bearers_request_p->teid = ue_context_pP->sgw_s11_teid; - release_access_bearers_request_p->num_rabs = 1; - release_access_bearers_request_p->list_of_rabs[0] = ue_context_pP->default_bearer_id; - release_access_bearers_request_p->originating_node = NODE_TYPE_MME; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - (to_task == TASK_S11) ? MSC_S11_MME:MSC_SP_GWAPP_MME, - NULL,0, - "0 SGW_RELEASE_ACCESS_BEARERS_REQUEST teid %u ebi %u", - release_access_bearers_request_p->teid, - release_access_bearers_request_p->list_of_rabs[0]); - - itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); -} - - - -//------------------------------------------------------------------------------ -int -mme_app_send_s11_create_session_req( - struct ue_context_s * const ue_context_pP) -//------------------------------------------------------------------------------ -{ - uint8_t i = 0; - task_id_t to_task = TASK_UNKNOWN; - /* Keep the identifier to the default APN */ - context_identifier_t context_identifier; - MessageDef *message_p = NULL; - SgwCreateSessionRequest *session_request_p = NULL; - struct apn_configuration_s *default_apn_p = NULL; - - - DevAssert(ue_context_pP != NULL); - -#if !defined(ENABLE_STANDALONE_EPC) - to_task = TASK_S11; -#else - to_task = TASK_SPGW_APP; -#endif - - - MME_APP_DEBUG("Handling imsi %"IMSI_FORMAT"\n", ue_context_pP->imsi); - - if (ue_context_pP->sub_status != SS_SERVICE_GRANTED) { - /* HSS rejected the bearer creation or roaming is not allowed for this - * UE. This result will trigger an ESM Failure message sent to UE. - */ - DevMessage("Not implemented: ACCESS NOT GRANTED, send ESM Failure to NAS\n"); - } - - message_p = itti_alloc_new_message(TASK_MME_APP, SGW_CREATE_SESSION_REQUEST); - - /* WARNING: - * Some parameters should be provided by NAS Layer: - * - ue_time_zone - * - mei - * - uli - * - uci - * Some parameters should be provided by HSS: - * - PGW address for CP - * - paa - * - ambr - * and by MME Application layer: - * - selection_mode - * Set these parameters with random values for now. - */ - - session_request_p = &message_p->ittiMsg.sgwCreateSessionRequest; - memset(session_request_p, 0, sizeof(SgwCreateSessionRequest)); - - /* As the create session request is the first exchanged message and as - * no tunnel had been previously setup, the distant teid is set to 0. - * The remote teid will be provided in the response message. - */ - session_request_p->teid = 0; - - MME_APP_IMSI_TO_STRING(ue_context_pP->imsi, (char *)session_request_p->imsi.digit); - // message content was set to 0 - session_request_p->imsi.length = strlen((const char *)session_request_p->imsi.digit); - - /* Copy the MSISDN */ - memcpy( - session_request_p->msisdn.digit, - ue_context_pP->msisdn, - ue_context_pP->msisdn_length); - session_request_p->msisdn.length = ue_context_pP->msisdn_length; - - session_request_p->rat_type = RAT_EUTRAN; - - /* Copy the subscribed ambr to the sgw create session request message */ - memcpy( - &session_request_p->ambr, - &ue_context_pP->subscribed_ambr, - sizeof(ambr_t)); - - if (ue_context_pP->apn_profile.nb_apns == 0) { - DevMessage("No APN returned by the HSS"); - } - - context_identifier = ue_context_pP->apn_profile.context_identifier; - - for (i = 0; i < ue_context_pP->apn_profile.nb_apns; i++) { - default_apn_p = &ue_context_pP->apn_profile.apn_configuration[i]; - - /* OK we got our default APN */ - if (default_apn_p->context_identifier == context_identifier) - break; - } - - if (!default_apn_p) { - /* Unfortunately we didn't find our default APN... */ - DevMessage("No default APN found"); - } - - memcpy(&session_request_p->bearer_to_create.bearer_level_qos.gbr, - &default_apn_p->ambr, sizeof(ambr_t)); - memcpy(&session_request_p->bearer_to_create.bearer_level_qos.mbr, - &default_apn_p->ambr, sizeof(ambr_t)); - - session_request_p->bearer_to_create.bearer_level_qos.qci = - default_apn_p->subscribed_qos.qci; - - session_request_p->bearer_to_create.bearer_level_qos.pvi = - default_apn_p->subscribed_qos.allocation_retention_priority.pre_emp_vulnerability; - session_request_p->bearer_to_create.bearer_level_qos.pci = - default_apn_p->subscribed_qos.allocation_retention_priority.pre_emp_capability; - session_request_p->bearer_to_create.bearer_level_qos.pl = - default_apn_p->subscribed_qos.allocation_retention_priority.priority_level; - - /* Asking for default bearer in initial UE message. - * Use the address of ue_context as unique TEID: Need to find better here - * and will generate unique id only for 32 bits platforms. - */ - session_request_p->sender_fteid_for_cp.teid = (uint32_t)ue_context_pP; - session_request_p->sender_fteid_for_cp.interface_type = S11_MME_GTP_C; - session_request_p->bearer_to_create.eps_bearer_id = 5; - - ue_context_pP->mme_s11_teid = session_request_p->sender_fteid_for_cp.teid; - ue_context_pP->sgw_s11_teid = 0; - - memcpy(session_request_p->apn, default_apn_p->service_selection, - default_apn_p->service_selection_length); - - /* Set PDN type for pdn_type and PAA even if this IE is redundant */ - session_request_p->pdn_type = default_apn_p->pdn_type; - session_request_p->paa.pdn_type = default_apn_p->pdn_type; - - if (default_apn_p->nb_ip_address == 0) { - /* UE DHCPv4 allocated ip address */ - memset(session_request_p->paa.ipv4_address, 0, 4); - memset(session_request_p->paa.ipv6_address, 0, 16); - } else { - uint8_t j; - - for (j = 0; j < default_apn_p->nb_ip_address; j++) { - ip_address_t *ip_address; - ip_address = &default_apn_p->ip_address[j]; - - if (ip_address->pdn_type == IPv4) { - memcpy(session_request_p->paa.ipv4_address, ip_address->address.ipv4_address, 4); - } else if (ip_address->pdn_type == IPv6) { - memcpy(session_request_p->paa.ipv6_address, ip_address->address.ipv6_address, 16); - } - - // free(ip_address); - } - } - - if ((ue_context_pP->pending_pdn_connectivity_req_pco.length >= PCO_MIN_LENGTH) && (ue_context_pP->pending_pdn_connectivity_req_pco.length <= PCO_MAX_LENGTH)) { - memcpy(&session_request_p->pco.byte[0], - &ue_context_pP->pending_pdn_connectivity_req_pco.byte[0], - ue_context_pP->pending_pdn_connectivity_req_pco.length); - session_request_p->pco.length = ue_context_pP->pending_pdn_connectivity_req_pco.length; - } - - config_read_lock(&mme_config); - session_request_p->peer_ip = mme_config.ipv4.sgw_ip_address_for_S11; - config_unlock(&mme_config); - - session_request_p->serving_network.mcc[0] = ue_context_pP->e_utran_cgi.plmn.MCCdigit1; - session_request_p->serving_network.mcc[1] = ue_context_pP->e_utran_cgi.plmn.MCCdigit2; - session_request_p->serving_network.mcc[2] = ue_context_pP->e_utran_cgi.plmn.MCCdigit3; - - session_request_p->serving_network.mnc[0] = ue_context_pP->e_utran_cgi.plmn.MNCdigit1; - session_request_p->serving_network.mnc[1] = ue_context_pP->e_utran_cgi.plmn.MNCdigit2; - session_request_p->serving_network.mnc[2] = ue_context_pP->e_utran_cgi.plmn.MNCdigit3; - - session_request_p->selection_mode = MS_O_N_P_APN_S_V; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - (to_task == TASK_S11) ? MSC_S11_MME:MSC_SP_GWAPP_MME, - NULL,0, - "0 SGW_CREATE_SESSION_REQUEST imsi %"IMSI_FORMAT,ue_context_pP->imsi); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); -} - - - -//------------------------------------------------------------------------------ -int -mme_app_handle_nas_pdn_connectivity_req( - nas_pdn_connectivity_req_t * const nas_pdn_connectivity_req_pP) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - uint64_t imsi = 0; - - MME_APP_DEBUG("Received NAS_PDN_CONNECTIVITY_REQ from NAS\n"); - DevAssert(nas_pdn_connectivity_req_pP != NULL); - - MME_APP_STRING_TO_IMSI((char *)nas_pdn_connectivity_req_pP->imsi, &imsi); - - MME_APP_DEBUG("Handling imsi %"IMSI_FORMAT"\n", imsi); - - - if ((ue_context_p = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, - imsi)) == NULL) { - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "NAS_PDN_CONNECTIVITY_REQ Unknown imsi %"IMSI_FORMAT,imsi); - MME_APP_ERROR("That's embarrassing as we don't know this IMSI\n"); - return -1; - } - - /* Consider the UE authenticated */ - ue_context_p->imsi_auth = IMSI_AUTHENTICATED; - - // Temp: save request, in near future merge wisely params in context - memset(ue_context_p->pending_pdn_connectivity_req_imsi,0, 16); - AssertFatal((nas_pdn_connectivity_req_pP->imsi_length > 0) && - (nas_pdn_connectivity_req_pP->imsi_length < 16), - "BAD IMSI LENGTH %d", nas_pdn_connectivity_req_pP->imsi_length); - - AssertFatal((nas_pdn_connectivity_req_pP->imsi_length > 0) && - (nas_pdn_connectivity_req_pP->imsi_length < 16), - "STOP ON IMSI LENGTH %d", nas_pdn_connectivity_req_pP->imsi_length); - memcpy(ue_context_p->pending_pdn_connectivity_req_imsi, - nas_pdn_connectivity_req_pP->imsi, - nas_pdn_connectivity_req_pP->imsi_length); - ue_context_p->pending_pdn_connectivity_req_imsi_length = nas_pdn_connectivity_req_pP->imsi_length; - DUP_OCTET_STRING(nas_pdn_connectivity_req_pP->apn, ue_context_p->pending_pdn_connectivity_req_apn); - FREE_OCTET_STRING(nas_pdn_connectivity_req_pP->apn) - // dup OctetString - DUP_OCTET_STRING(nas_pdn_connectivity_req_pP->pdn_addr, ue_context_p->pending_pdn_connectivity_req_pdn_addr); - FREE_OCTET_STRING(nas_pdn_connectivity_req_pP->pdn_addr) - ue_context_p->pending_pdn_connectivity_req_pti = nas_pdn_connectivity_req_pP->pti; - ue_context_p->pending_pdn_connectivity_req_ue_id = nas_pdn_connectivity_req_pP->ue_id; - - memcpy(&ue_context_p->pending_pdn_connectivity_req_pco.byte[0], - &nas_pdn_connectivity_req_pP->pco.byte[0], - nas_pdn_connectivity_req_pP->pco.length); - ue_context_p->pending_pdn_connectivity_req_pco.length = nas_pdn_connectivity_req_pP->pco.length; - - memcpy(&ue_context_p->pending_pdn_connectivity_req_qos, - &nas_pdn_connectivity_req_pP->qos, - sizeof(network_qos_t)); - ue_context_p->pending_pdn_connectivity_req_proc_data = nas_pdn_connectivity_req_pP->proc_data; - nas_pdn_connectivity_req_pP->proc_data = NULL; - ue_context_p->pending_pdn_connectivity_req_request_type = nas_pdn_connectivity_req_pP->request_type; - - //if ((nas_pdn_connectivity_req_pP->apn.value == NULL) || (nas_pdn_connectivity_req_pP->apn.length == 0)) { - /* TODO: Get keys... */ - /* Now generate S6A ULR */ - return mme_app_send_s6a_update_location_req(ue_context_p); - //} else { - //return mme_app_send_s11_create_session_req(ue_context_p); - - //} - //return -1; -} - - - -// sent by NAS -//------------------------------------------------------------------------------ -void -mme_app_handle_conn_est_cnf( - const nas_conn_est_cnf_t * const nas_conn_est_cnf_pP) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - MessageDef *message_p = NULL; - mme_app_connection_establishment_cnf_t *establishment_cnf_p = NULL; - bearer_context_t *current_bearer_p = NULL; - ebi_t bearer_id = 0; - uint8_t keNB[32]; - - MME_APP_DEBUG("Received NAS_CONNECTION_ESTABLISHMENT_CNF from NAS\n"); - - ue_context_p = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, nas_conn_est_cnf_pP->UEid); - - - if (ue_context_p == NULL) { - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "NAS_CONNECTION_ESTABLISHMENT_CNF Unknown ue %u",nas_conn_est_cnf_pP->UEid); - MME_APP_ERROR("UE context doesn't exist for UE %06"PRIX32"/dec%u\n", - nas_conn_est_cnf_pP->UEid, - nas_conn_est_cnf_pP->UEid); - return; - } - - message_p = itti_alloc_new_message(TASK_MME_APP, MME_APP_CONNECTION_ESTABLISHMENT_CNF); - establishment_cnf_p = &message_p->ittiMsg.mme_app_connection_establishment_cnf; - memset(establishment_cnf_p, 0, sizeof(mme_app_connection_establishment_cnf_t)); - - memcpy(&establishment_cnf_p->nas_conn_est_cnf, - nas_conn_est_cnf_pP, - sizeof(nas_conn_est_cnf_t)); - - bearer_id = ue_context_p->default_bearer_id; - current_bearer_p = &ue_context_p->eps_bearers[bearer_id]; - establishment_cnf_p->eps_bearer_id = bearer_id; - - establishment_cnf_p->bearer_s1u_sgw_fteid.interface_type = S1_U_SGW_GTP_U; - establishment_cnf_p->bearer_s1u_sgw_fteid.teid = current_bearer_p->s_gw_teid; - - if ((current_bearer_p->s_gw_address.pdn_type == IPv4) || - (current_bearer_p->s_gw_address.pdn_type == IPv4_AND_v6)) { - establishment_cnf_p->bearer_s1u_sgw_fteid.ipv4 = 1; - memcpy(&establishment_cnf_p->bearer_s1u_sgw_fteid.ipv4_address, - current_bearer_p->s_gw_address.address.ipv4_address, - 4); - } - - if ((current_bearer_p->s_gw_address.pdn_type == IPv6) || - (current_bearer_p->s_gw_address.pdn_type == IPv4_AND_v6)) { - establishment_cnf_p->bearer_s1u_sgw_fteid.ipv6 = 1; - memcpy(establishment_cnf_p->bearer_s1u_sgw_fteid.ipv6_address, - current_bearer_p->s_gw_address.address.ipv6_address, - 16); - } - - establishment_cnf_p->bearer_qos_qci = current_bearer_p->qci; - establishment_cnf_p->bearer_qos_prio_level = current_bearer_p->prio_level; - establishment_cnf_p->bearer_qos_pre_emp_vulnerability = current_bearer_p->pre_emp_vulnerability; - establishment_cnf_p->bearer_qos_pre_emp_capability = current_bearer_p->pre_emp_capability; -#warning "Check ue_context_p ambr" - establishment_cnf_p->ambr.br_ul = ue_context_p->subscribed_ambr.br_ul; - establishment_cnf_p->ambr.br_dl = ue_context_p->subscribed_ambr.br_dl; - - establishment_cnf_p->security_capabilities_encryption_algorithms = nas_conn_est_cnf_pP->selected_encryption_algorithm; - establishment_cnf_p->security_capabilities_integrity_algorithms = nas_conn_est_cnf_pP->selected_integrity_algorithm; - MME_APP_DEBUG("security_capabilities_encryption_algorithms 0x%04X\n", establishment_cnf_p->security_capabilities_encryption_algorithms); - MME_APP_DEBUG("security_capabilities_integrity_algorithms 0x%04X\n", establishment_cnf_p->security_capabilities_integrity_algorithms); - - MME_APP_DEBUG("Derive keNB with UL NAS COUNT %x\n", nas_conn_est_cnf_pP->ul_nas_count); - derive_keNB(ue_context_p->vector_in_use->kasme, nas_conn_est_cnf_pP->ul_nas_count, keNB); //156 - memcpy(establishment_cnf_p->keNB, keNB, 32); - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S1AP_MME, - NULL,0, - "0 MME_APP_CONNECTION_ESTABLISHMENT_CNF ebi %u s1u_sgw teid %u qci %u prio level %u sea 0x%x sia 0x%x", - establishment_cnf_p->eps_bearer_id, - establishment_cnf_p->bearer_s1u_sgw_fteid.teid, - establishment_cnf_p->bearer_qos_qci, - establishment_cnf_p->bearer_qos_prio_level, - establishment_cnf_p->security_capabilities_encryption_algorithms, - establishment_cnf_p->security_capabilities_integrity_algorithms); - - itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - - - -// sent by S1AP -//------------------------------------------------------------------------------ -void -mme_app_handle_conn_est_ind( - const mme_app_connection_establishment_ind_t * const conn_est_ind_pP) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - MessageDef *message_p = NULL; - - MME_APP_DEBUG("Received MME_APP_CONNECTION_ESTABLISHMENT_IND from S1AP\n"); - - ue_context_p = mme_ue_context_exists_mme_ue_s1ap_id( - &mme_app_desc.mme_ue_contexts, - conn_est_ind_pP->mme_ue_s1ap_id); - - - - if (ue_context_p == NULL) { - MME_APP_DEBUG("We didn't find this mme_ue_s1ap_id in list of UE: %06"PRIX32"/dec%u\n", - conn_est_ind_pP->mme_ue_s1ap_id, - conn_est_ind_pP->mme_ue_s1ap_id); - MME_APP_DEBUG("UE context doesn't exist -> create one\n"); - - if ((ue_context_p = mme_create_new_ue_context()) == NULL) { - /* Error during ue context malloc */ - /* TODO */ - DevMessage("mme_create_new_ue_context"); - return; - } - - // S1AP UE ID AND NAS UE ID ARE THE SAME - ue_context_p->mme_ue_s1ap_id = conn_est_ind_pP->mme_ue_s1ap_id; - ue_context_p->ue_id = conn_est_ind_pP->mme_ue_s1ap_id; - DevAssert(mme_insert_ue_context(&mme_app_desc.mme_ue_contexts, ue_context_p) == 0); - - // tests - ue_context_p = mme_ue_context_exists_mme_ue_s1ap_id( - &mme_app_desc.mme_ue_contexts, - conn_est_ind_pP->mme_ue_s1ap_id); - AssertFatal(ue_context_p != NULL, "mme_ue_context_exists_mme_ue_s1ap_id Failed"); - ue_context_p = mme_ue_context_exists_nas_ue_id( - &mme_app_desc.mme_ue_contexts, - conn_est_ind_pP->mme_ue_s1ap_id); - AssertFatal(ue_context_p != NULL, "mme_ue_context_exists_nas_ue_id Failed"); - } - - message_p = itti_alloc_new_message(TASK_MME_APP, NAS_CONNECTION_ESTABLISHMENT_IND); - memcpy(&NAS_CONN_EST_IND(message_p).nas, - &conn_est_ind_pP->nas, - sizeof (nas_establish_ind_t)); - - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_CONNECTION_ESTABLISHMENT_IND"); - - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - - - -//------------------------------------------------------------------------------ -int -mme_app_handle_create_sess_resp( - const SgwCreateSessionResponse * const create_sess_resp_pP) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - bearer_context_t *current_bearer_p = NULL; - MessageDef *message_p = NULL; - - int16_t bearer_id; - - DevAssert(create_sess_resp_pP != NULL); - - MME_APP_DEBUG("Received SGW_CREATE_SESSION_RESPONSE from S+P-GW\n"); - - ue_context_p = mme_ue_context_exists_s11_teid(&mme_app_desc.mme_ue_contexts, - create_sess_resp_pP->teid); - - - if (ue_context_p == NULL) { - MME_APP_DEBUG("We didn't find this teid in list of UE: %08x\n", - create_sess_resp_pP->teid); - return -1; - } - - /* Store the S-GW teid */ - ue_context_p->sgw_s11_teid = create_sess_resp_pP->s11_sgw_teid.teid; - - //--------------------------------------------------------- - // Process SgwCreateSessionResponse.bearer_context_created - //--------------------------------------------------------- - bearer_id = create_sess_resp_pP->bearer_context_created.eps_bearer_id/* - 5*/; - /* Depending on s11 result we have to send reject or accept for bearers */ - DevCheck((bearer_id < BEARERS_PER_UE) && (bearer_id >= 0), - bearer_id, - BEARERS_PER_UE, - 0); - ue_context_p->default_bearer_id = bearer_id; - - if (create_sess_resp_pP->bearer_context_created.cause != REQUEST_ACCEPTED) { - DevMessage("Cases where bearer cause != REQUEST_ACCEPTED are not handled\n"); - } - - DevAssert(create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.interface_type == S1_U_SGW_GTP_U); - - /* Updating statistics */ - mme_app_desc.mme_ue_contexts.nb_bearers_managed++; - mme_app_desc.mme_ue_contexts.nb_bearers_since_last_stat++; - - current_bearer_p = &ue_context_p->eps_bearers[bearer_id]; - current_bearer_p->s_gw_teid = create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.teid; - - switch (create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv4 + - (create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv6 << 1)) { - default: - case 0: { - /* No address provided: impossible case */ - DevMessage("No ip address for user-plane provided...\n"); - } - break; - - case 1: { - /* Only IPv4 address */ - current_bearer_p->s_gw_address.pdn_type = IPv4; - memcpy(current_bearer_p->s_gw_address.address.ipv4_address, - &create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv4_address, 4); - } - break; - - case 2: { - /* Only IPv6 address */ - current_bearer_p->s_gw_address.pdn_type = IPv6; - memcpy(current_bearer_p->s_gw_address.address.ipv6_address, - create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv6_address, 16); - } - break; - - case 3: { - /* Both IPv4 and Ipv6 */ - current_bearer_p->s_gw_address.pdn_type = IPv4_AND_v6; - memcpy(current_bearer_p->s_gw_address.address.ipv4_address, - &create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv4_address, 4); - memcpy(current_bearer_p->s_gw_address.address.ipv6_address, - create_sess_resp_pP->bearer_context_created.s1u_sgw_fteid.ipv6_address, 16); - } - break; - } - - current_bearer_p->p_gw_teid = create_sess_resp_pP->bearer_context_created.s5_s8_u_pgw_fteid.teid; - memset(¤t_bearer_p->p_gw_address,0, sizeof(ip_address_t)); - - if (create_sess_resp_pP->bearer_context_created.bearer_level_qos != NULL) { - current_bearer_p->qci = create_sess_resp_pP->bearer_context_created.bearer_level_qos->qci; - current_bearer_p->prio_level = create_sess_resp_pP->bearer_context_created.bearer_level_qos->pl; - current_bearer_p->pre_emp_vulnerability = create_sess_resp_pP->bearer_context_created.bearer_level_qos->pvi; - current_bearer_p->pre_emp_capability = create_sess_resp_pP->bearer_context_created.bearer_level_qos->pci; - MME_APP_DEBUG("%s set qci %u in bearer %u\n", - __FUNCTION__, - current_bearer_p->qci, - ue_context_p->default_bearer_id); - } else { - // if null, it is not modified - //current_bearer_p->qci = ue_context_p->pending_pdn_connectivity_req_qos.qci; -#warning "may force QCI here to 9" - current_bearer_p->qci = 9; - current_bearer_p->prio_level = 1; - current_bearer_p->pre_emp_vulnerability = 0; - current_bearer_p->pre_emp_capability = 0; - MME_APP_DEBUG("%s set qci %u in bearer %u (qos not modified by S/P-GW)\n", - __FUNCTION__, - current_bearer_p->qci, - ue_context_p->default_bearer_id); - } - - mme_app_dump_ue_contexts(&mme_app_desc.mme_ue_contexts); - - { - //uint8_t *keNB = NULL; - - message_p = itti_alloc_new_message(TASK_MME_APP, NAS_PDN_CONNECTIVITY_RSP); - memset((void*)&message_p->ittiMsg.nas_pdn_connectivity_rsp, - 0, - sizeof(nas_pdn_connectivity_rsp_t)); - - // moved to NAS_CONNECTION_ESTABLISHMENT_CONF, keNB not handled in NAS MME - //derive_keNB(ue_context_p->vector_in_use->kasme, 156, &keNB); - //memcpy(NAS_PDN_CONNECTIVITY_RSP(message_p).keNB, keNB, 32); - - //free(keNB); - - NAS_PDN_CONNECTIVITY_RSP(message_p).pti = ue_context_p->pending_pdn_connectivity_req_pti; // NAS internal ref - NAS_PDN_CONNECTIVITY_RSP(message_p).ue_id = ue_context_p->pending_pdn_connectivity_req_ue_id; // NAS internal ref - - // TO REWORK: - if ((ue_context_p->pending_pdn_connectivity_req_apn.value != NULL) - && (ue_context_p->pending_pdn_connectivity_req_apn.length != 0)) { - DUP_OCTET_STRING( - ue_context_p->pending_pdn_connectivity_req_apn, - NAS_PDN_CONNECTIVITY_RSP(message_p).apn); - MME_APP_DEBUG("SET APN FROM NAS PDN CONNECTIVITY CREATE: %s\n", NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value); - } else { - int i; - context_identifier_t context_identifier = ue_context_p->apn_profile.context_identifier; - - for (i = 0; i < ue_context_p->apn_profile.nb_apns; i++) { - if (ue_context_p->apn_profile.apn_configuration[i].context_identifier == context_identifier) { - AssertFatal(ue_context_p->apn_profile.apn_configuration[i].service_selection_length > 0, "Bad APN string (len = 0)"); - - if (ue_context_p->apn_profile.apn_configuration[i].service_selection_length > 0) { - NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value = malloc(ue_context_p->apn_profile.apn_configuration[i].service_selection_length + 1); - NAS_PDN_CONNECTIVITY_RSP(message_p).apn.length = ue_context_p->apn_profile.apn_configuration[i].service_selection_length; - AssertFatal(ue_context_p->apn_profile.apn_configuration[i].service_selection_length <= APN_MAX_LENGTH, - "Bad APN string length %d", - ue_context_p->apn_profile.apn_configuration[i].service_selection_length); - memcpy(NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value, - ue_context_p->apn_profile.apn_configuration[i].service_selection, - ue_context_p->apn_profile.apn_configuration[i].service_selection_length); - NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value[ue_context_p->apn_profile.apn_configuration[i].service_selection_length] = '\0'; - MME_APP_DEBUG("SET APN FROM HSS ULA: %s\n", NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value); - break; - } - } - } - } - - MME_APP_DEBUG("APN: %s\n", NAS_PDN_CONNECTIVITY_RSP(message_p).apn.value); - - switch (create_sess_resp_pP->paa.pdn_type) { - case IPv4: - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length = 4; - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value = malloc(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length+1); - DevAssert(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value != NULL); - memcpy( - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value, - create_sess_resp_pP->paa.ipv4_address, - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length); - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value[NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length] = '0'; - break; - - case IPv6: - DevAssert(create_sess_resp_pP->paa.ipv6_prefix_length == 64); // NAS seems to only support 64 bits - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length = create_sess_resp_pP->paa.ipv6_prefix_length/8; - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value = malloc(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length+1); - DevAssert(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value != NULL); - memcpy( - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value, - create_sess_resp_pP->paa.ipv6_address, - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length); - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value[NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length] = '0'; - break; - - case IPv4_AND_v6: - DevAssert(create_sess_resp_pP->paa.ipv6_prefix_length == 64); // NAS seems to only support 64 bits - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length = 4 + create_sess_resp_pP->paa.ipv6_prefix_length/8; - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value = malloc(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length+1); - DevAssert(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value != NULL); - memcpy( - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value, - create_sess_resp_pP->paa.ipv4_address, - 4); - memcpy( - &NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value[4], - create_sess_resp_pP->paa.ipv6_address, - create_sess_resp_pP->paa.ipv6_prefix_length/8); - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value[NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length] = '0'; - break; - - case IPv4_OR_v6: - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length = 4; - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value = malloc(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length+1); - DevAssert(NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value != NULL); - memcpy( - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value, - create_sess_resp_pP->paa.ipv4_address, - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length); - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.value[NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_addr.length] = '0'; - break; - - default: - DevAssert(0); - } - - NAS_PDN_CONNECTIVITY_RSP(message_p).pdn_type = create_sess_resp_pP->paa.pdn_type; - NAS_PDN_CONNECTIVITY_RSP(message_p).proc_data = ue_context_p->pending_pdn_connectivity_req_proc_data; // NAS internal ref - ue_context_p->pending_pdn_connectivity_req_proc_data = NULL; - -#warning "QOS hardcoded here" - //memcpy(&NAS_PDN_CONNECTIVITY_RSP(message_p).qos, - // &ue_context_p->pending_pdn_connectivity_req_qos, - // sizeof(network_qos_t)); - NAS_PDN_CONNECTIVITY_RSP(message_p).qos.gbrUL = 64; /* 64=64kb/s Guaranteed Bit Rate for uplink */ - NAS_PDN_CONNECTIVITY_RSP(message_p).qos.gbrDL = 120; /* 120=512kb/s Guaranteed Bit Rate for downlink */ - NAS_PDN_CONNECTIVITY_RSP(message_p).qos.mbrUL = 72; /* 72=128kb/s Maximum Bit Rate for uplink */ - NAS_PDN_CONNECTIVITY_RSP(message_p).qos.mbrDL = 135; /*135=1024kb/s Maximum Bit Rate for downlink */ - NAS_PDN_CONNECTIVITY_RSP(message_p).qos.qci = 9; /* QoS Class Identifier */ - - NAS_PDN_CONNECTIVITY_RSP(message_p).request_type = ue_context_p->pending_pdn_connectivity_req_request_type; // NAS internal ref - ue_context_p->pending_pdn_connectivity_req_request_type = 0; - - // here at this point OctetString are saved in resp, no loss of memory (apn, pdn_addr) - - NAS_PDN_CONNECTIVITY_RSP(message_p).eNB_ue_s1ap_id = ue_context_p->eNB_ue_s1ap_id; - NAS_PDN_CONNECTIVITY_RSP(message_p).mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - - NAS_PDN_CONNECTIVITY_RSP(message_p).ebi = bearer_id; - - NAS_PDN_CONNECTIVITY_RSP(message_p).qci = current_bearer_p->qci; - NAS_PDN_CONNECTIVITY_RSP(message_p).prio_level = current_bearer_p->prio_level; - NAS_PDN_CONNECTIVITY_RSP(message_p).pre_emp_vulnerability = current_bearer_p->pre_emp_vulnerability; - NAS_PDN_CONNECTIVITY_RSP(message_p).pre_emp_capability = current_bearer_p->pre_emp_capability; - - NAS_PDN_CONNECTIVITY_RSP(message_p).sgw_s1u_teid = current_bearer_p->s_gw_teid; - memcpy(&NAS_PDN_CONNECTIVITY_RSP(message_p).sgw_s1u_address, - ¤t_bearer_p->s_gw_address, sizeof(ip_address_t)); - - NAS_PDN_CONNECTIVITY_RSP(message_p).ambr.br_ul = ue_context_p->subscribed_ambr.br_ul; - NAS_PDN_CONNECTIVITY_RSP(message_p).ambr.br_dl = ue_context_p->subscribed_ambr.br_dl; - - - memcpy(&NAS_PDN_CONNECTIVITY_RSP(message_p).pco.byte[0], - &create_sess_resp_pP->pco.byte[0], - create_sess_resp_pP->pco.length); - NAS_PDN_CONNECTIVITY_RSP(message_p).pco.length = create_sess_resp_pP->pco.length; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_PDN_CONNECTIVITY_RSP sgw_s1u_teid %u ebi %u qci %u prio %u", - current_bearer_p->s_gw_teid, - bearer_id, - current_bearer_p->qci, - current_bearer_p->prio_level); - - return itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); - } - return 0; -} - - - -//------------------------------------------------------------------------------ -void -mme_app_handle_initial_context_setup_rsp( - const mme_app_initial_context_setup_rsp_t * const initial_ctxt_setup_rsp_pP) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - MessageDef *message_p = NULL; - task_id_t to_task = TASK_UNKNOWN; - - MME_APP_DEBUG("Received MME_APP_INITIAL_CONTEXT_SETUP_RSP from S1AP\n"); - - ue_context_p = mme_ue_context_exists_mme_ue_s1ap_id( - &mme_app_desc.mme_ue_contexts, - initial_ctxt_setup_rsp_pP->mme_ue_s1ap_id); - - - if (ue_context_p == NULL) { - MME_APP_DEBUG("We didn't find this mme_ue_s1ap_id in list of UE: %08x %d(dec)\n", - initial_ctxt_setup_rsp_pP->mme_ue_s1ap_id, - initial_ctxt_setup_rsp_pP->mme_ue_s1ap_id); - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "MME_APP_INITIAL_CONTEXT_SETUP_RSP Unknown ue %u",initial_ctxt_setup_rsp_pP->mme_ue_s1ap_id); - return; - } - -#if !defined(ENABLE_STANDALONE_EPC) - to_task = TASK_S11; -#else - to_task = TASK_SPGW_APP; -#endif - - message_p = itti_alloc_new_message(TASK_MME_APP, SGW_MODIFY_BEARER_REQUEST); - - AssertFatal(message_p != NULL, "itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.sgwModifyBearerRequest, - 0, - sizeof(SgwModifyBearerRequest)); - - SGW_MODIFY_BEARER_REQUEST(message_p).teid = ue_context_p->sgw_s11_teid; - - /* Delay Value in integer multiples of 50 millisecs, or zero */ - SGW_MODIFY_BEARER_REQUEST(message_p).delay_dl_packet_notif_req = 0; // TO DO - - SGW_MODIFY_BEARER_REQUEST(message_p).bearer_context_to_modify.eps_bearer_id = initial_ctxt_setup_rsp_pP->eps_bearer_id; - memcpy(&SGW_MODIFY_BEARER_REQUEST(message_p).bearer_context_to_modify.s1_eNB_fteid, - &initial_ctxt_setup_rsp_pP->bearer_s1u_enb_fteid, - sizeof(SGW_MODIFY_BEARER_REQUEST(message_p).bearer_context_to_modify.s1_eNB_fteid)); - - SGW_MODIFY_BEARER_REQUEST(message_p).mme_fq_csid.node_id_type = GLOBAL_UNICAST_IPv4; // TO DO - SGW_MODIFY_BEARER_REQUEST(message_p).mme_fq_csid.csid = 0; // TO DO ... - SGW_MODIFY_BEARER_REQUEST(message_p).indication_flags = 0; // TO DO - SGW_MODIFY_BEARER_REQUEST(message_p).rat_type = RAT_EUTRAN; - - /* S11 stack specific parameter. Not used in standalone epc mode */ - SGW_MODIFY_BEARER_REQUEST(message_p).trxn = NULL; - - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - (to_task == TASK_S11) ? MSC_S11_MME:MSC_SP_GWAPP_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_REQUEST teid %u ebi %u", - SGW_MODIFY_BEARER_REQUEST(message_p).teid, - SGW_MODIFY_BEARER_REQUEST(message_p).bearer_context_to_modify.eps_bearer_id); - - - itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); -} - - - -//------------------------------------------------------------------------------ -void mme_app_handle_release_access_bearers_resp( - const SgwReleaseAccessBearersResponse * const rel_access_bearers_rsp_pP) -//------------------------------------------------------------------------------ -{ - MessageDef *message_p = NULL; - struct ue_context_s *ue_context_p = NULL; - - ue_context_p = mme_ue_context_exists_s11_teid(&mme_app_desc.mme_ue_contexts, - rel_access_bearers_rsp_pP->teid); - - - if (ue_context_p == NULL) { - MME_APP_DEBUG("We didn't find this teid in list of UE: %06"PRIX32"\n", - rel_access_bearers_rsp_pP->teid); - return; - } - - message_p = itti_alloc_new_message(TASK_MME_APP, S1AP_UE_CONTEXT_RELEASE_COMMAND); - - AssertFatal(message_p != NULL, "itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.s1ap_ue_context_release_command, - 0, - sizeof(s1ap_ue_context_release_command_t)); - - S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S1AP_MME, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_COMMAND mme_ue_s1ap_id %06"PRIX32" ", - S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id); - - - itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - diff --git a/openair-cn/MME_APP/mme_app_capabilities.c b/openair-cn/MME_APP/mme_app_capabilities.c deleted file mode 100755 index 83a857ce91..0000000000 --- a/openair-cn/MME_APP/mme_app_capabilities.c +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file mme_app_capabilities.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" - -#include "mme_app_extern.h" -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" - -#include "secu_defs.h" - -#include "assertions.h" -#include "common_types.h" - -int -mme_app_handle_s1ap_ue_capabilities_ind( - const s1ap_ue_cap_ind_t const * s1ap_ue_cap_ind_pP) -{ - DevAssert(s1ap_ue_cap_ind_pP != NULL); - //unsigned eNB_ue_s1ap_id:24; - //uint32_t mme_ue_s1ap_id; - //uint8_t radio_capabilities[100]; - //uint32_t radio_capabilities_length; - return 0; -} diff --git a/openair-cn/MME_APP/mme_app_config.c b/openair-cn/MME_APP/mme_app_config.c deleted file mode 100755 index 2fabb43ab1..0000000000 --- a/openair-cn/MME_APP/mme_app_config.c +++ /dev/null @@ -1,307 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file mme_app_config.c - * \brief - * \author Lionel GAUTHIER - * \version 1.0 - * \company Eurecom - * \email: lionel.gauthier@eurecom.fr - */ -#define MME_APP -#define MME_APP_CONFIG_C - -#include -#include -#include "mme_app_config.h" - -int mme_app_config_init(char* lib_config_file_name_pP, mme_app_config_t* config_pP) -{ - - config_t cfg; - config_setting_t *setting_sgw = NULL; - char *sgw_interface_name_for_S1u_S12_S4_up = NULL; - char *sgw_ipv4_address_for_S1u_S12_S4_up = NULL; - char *sgw_interface_name_for_S5_S8_up = NULL; - char *sgw_ipv4_address_for_S5_S8_up = NULL; - char *sgw_interface_name_for_S11 = NULL; - char *sgw_ipv4_address_for_S11 = NULL; - - config_setting_t *setting_pgw = NULL; - config_setting_t *subsetting = NULL; - config_setting_t *sub2setting = NULL; - char *pgw_interface_name_for_S5_S8 = NULL; - char *pgw_ipv4_address_for_S5_S8 = NULL; - char *pgw_interface_name_for_SGI = NULL; - char *pgw_ipv4_address_for_SGI = NULL; - - char *delimiters=NULL; - char *saveptr1= NULL; - char *astring = NULL; - char *atoken = NULL; - char *atoken2 = NULL; - char *address = NULL; - char *cidr = NULL; - char *mask = NULL; - int num = 0; - int i = 0; - int jh, jn; - unsigned char buf_in6_addr[sizeof(struct in6_addr)]; - struct in6_addr addr6_start; - struct in6_addr addr6_mask; - int prefix_mask; - uint64_t counter64; - unsigned char buf_in_addr[sizeof(struct in_addr)]; - struct in_addr addr_start; - struct in_addr addr_end; - - - memset((char*)config_pP, 0 , sizeof(mme_app_config_t)); - - config_init(&cfg); - - if(lib_config_file_name_pP != NULL) { - /* Read the file. If there is an error, report it and exit. */ - if(! config_read_file(&cfg, lib_config_file_name_pP)) { - MME_APP_ERROR("%s:%d - %s\n", lib_config_file_name_pP, config_error_line(&cfg), config_error_text(&cfg)); - config_destroy(&cfg); - AssertFatal (1 == 0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP); - } - } else { - SPGW_APP_ERROR("No SP-GW configuration file provided!\n"); - config_destroy(&cfg); - AssertFatal (0, "No SP-GW configuration file provided!\n"); - } - - setting_sgw = config_lookup(&cfg, SGW_CONFIG_STRING_SGW_CONFIG); - - if(setting_sgw != NULL) { - subsetting = config_setting_get_member (setting_sgw, SGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); - - if(subsetting != NULL) { - if( ( - config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP, (const char **)&sgw_interface_name_for_S1u_S12_S4_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP, (const char **)&sgw_ipv4_address_for_S1u_S12_S4_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S5_S8_UP, (const char **)&sgw_interface_name_for_S5_S8_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S5_S8_UP, (const char **)&sgw_ipv4_address_for_S5_S8_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S11, (const char **)&sgw_interface_name_for_S11) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S11, (const char **)&sgw_ipv4_address_for_S11) - ) - ) { - config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up = strdup(sgw_interface_name_for_S1u_S12_S4_up); - cidr = strdup(sgw_ipv4_address_for_S1u_S12_S4_up); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up, "BAD IP ADDRESS FORMAT FOR S1u_S12_S4 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S1u_S12_S4_up = atoi(mask); - free(cidr); - - config_pP->sgw_config.ipv4.sgw_interface_name_for_S5_S8_up = strdup(sgw_interface_name_for_S5_S8_up); - cidr = strdup(sgw_ipv4_address_for_S5_S8_up); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S5_S8_up, "BAD IP ADDRESS FORMAT FOR S5_S8 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S5_S8_up = atoi(mask); - free(cidr); - - config_pP->sgw_config.ipv4.sgw_interface_name_for_S11 = strdup(sgw_interface_name_for_S11); - cidr = strdup(sgw_ipv4_address_for_S11); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S11, "BAD IP ADDRESS FORMAT FOR S11 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S11 = atoi(mask); - free(cidr); - } - } - } - - setting_pgw = config_lookup(&cfg, PGW_CONFIG_STRING_PGW_CONFIG); - - if(setting_pgw != NULL) { - subsetting = config_setting_get_member (setting_pgw, SGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); - - if(subsetting != NULL) { - if( ( - config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_S5_S8, - (const char **)&pgw_interface_name_for_S5_S8) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_IPV4_ADDRESS_FOR_S5_S8, - (const char **)&pgw_ipv4_address_for_S5_S8) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_SGI, - (const char **)&pgw_interface_name_for_SGI) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_IPV4_ADDR_FOR_SGI, - (const char **)&pgw_ipv4_address_for_SGI) - ) - ) { - config_pP->pgw_config.ipv4.pgw_interface_name_for_S5_S8 = strdup(pgw_interface_name_for_S5_S8); - cidr = strdup(pgw_ipv4_address_for_S5_S8); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->pgw_config.ipv4.pgw_ipv4_address_for_S5_S8, "BAD IP ADDRESS FORMAT FOR S5_S8 !\n" ) - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_S5_S8 = atoi(mask); - free(cidr); - - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI = strdup(pgw_interface_name_for_SGI); - cidr = strdup(pgw_ipv4_address_for_SGI); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI, "BAD IP ADDRESS FORMAT FOR SGI !\n" ) - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_SGI = atoi(mask); - free(cidr); - } - } - - subsetting = config_setting_get_member (setting_pgw, PGW_CONFIG_STRING_IP_ADDRESS_POOL); - - if(subsetting != NULL) { - sub2setting = config_setting_get_member (subsetting, PGW_CONFIG_STRING_IPV4_ADDRESS_LIST); - - if(sub2setting != NULL) { - num = config_setting_length(sub2setting); - - for (i = 0; i < num; i++) { - astring = config_setting_get_string_elem(sub2setting,i); - - if (astring != NULL) { - trim(astring, strlen(astring)+1); - - if (inet_pton(AF_INET, astring, buf_in_addr) < 1) { - // failure, test if there is a range specified in the string - atoken = strtok(astring, PGW_CONFIG_STRING_IP_ADDRESS_RANGE_DELIMITERS); - - if (inet_pton(AF_INET, astring, buf_in_addr) == 1) { - memcpy (&addr_start, buf_in_addr, sizeof(struct in_addr)); - // valid address - atoken2 = strtok(NULL, PGW_CONFIG_STRING_IP_ADDRESS_RANGE_DELIMITERS); - - if (inet_pton(AF_INET, atoken2, buf_in_addr) == 1) { - memcpy (&addr_end, buf_in_addr, sizeof(struct in_addr)); - - // valid address - for (jh = ntohl(addr_start.s_addr); jh <= ntohl(addr_end.s_addr); jh++) { - DevAssert(PGW_MAX_ALLOCATED_PDN_ADDRESSES > config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses); - jn = htonl(jh); - - if (IN_CLASSA(addr_start.s_addr)) { - if ((jh & 0xFF) && (jh & 0xFF) != 0xFF) { - config_pP->pgw_config.pool_pdn_addresses.ipv4_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses++].s_addr = jn; - } - } else if (IN_CLASSB(addr_start.s_addr)) { - if ((jh & 0xFF) && (jh & 0xFF) != 0xFF) { - config_pP->pgw_config.pool_pdn_addresses.ipv4_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses++].s_addr = jn; - } - } else if (IN_CLASSC(addr_start.s_addr)) { - if ((jh & 0xFF) && (jh & 0xFF) != 0xFF) { - config_pP->pgw_config.pool_pdn_addresses.ipv4_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses++].s_addr = jn; - } - } else { - printf("ERROR ON ADDRESS CLASS %d.%d.%d.%d\n", NIPADDR(jn)); - } - } - } - } - } else { - DevAssert(PGW_MAX_ALLOCATED_PDN_ADDRESSES > config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses); - memcpy (&addr_start, buf_in_addr, sizeof(struct in_addr)); - config_pP->pgw_config.pool_pdn_addresses.ipv4_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv4_addresses++].s_addr = addr_start.s_addr; - } - } - } - } - - sub2setting = config_setting_get_member (subsetting, PGW_CONFIG_STRING_IPV6_ADDRESS_LIST); - - if(sub2setting != NULL) { - num = config_setting_length(sub2setting); - - for (i = 0; i < num; i++) { - astring = config_setting_get_string_elem(sub2setting,i); - - if (astring != NULL) { - trim(astring, strlen(astring)+1); - - if (inet_pton(AF_INET6, astring, buf_in6_addr) < 1) { - // failure, test if there is a range specified in the string - atoken = strtok(astring, PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER); - - if (inet_pton(AF_INET6, astring, buf_in6_addr) == 1) { - atoken2 = strtok(NULL, PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER); - prefix_mask = atoi(atoken2); - // arbitrary values - DevAssert((prefix_mask < 128) && (prefix_mask >= 64)); - - memcpy (&addr6_start, buf_in6_addr, sizeof(struct in6_addr)); - memcpy (&addr6_mask, buf_in6_addr, sizeof(struct in6_addr)); - sgw_ipv6_mask_in6_addr(&addr6_mask, prefix_mask); - - if (memcmp(&addr6_start, &addr6_mask, sizeof(struct in6_addr)) != 0) { - AssertFatal(0, "BAD IPV6 ADDR CONFIG/MASK PAIRING %s/%d\n", astring, prefix_mask); - } - - counter64 = 0xFFFFFFFFFFFFFFFF >> prefix_mask; // address Prefix_mask/0..0 not valid - - do { - addr6_start.s6_addr32[3] = addr6_start.s6_addr32[3] + htonl(1); - - if (addr6_start.s6_addr32[3] == 0) { - addr6_start.s6_addr32[2] = addr6_start.s6_addr32[2] + htonl(1); - - if (addr6_start.s6_addr32[2] == 0) { - // should not happen since mask is no less than 64 - addr6_start.s6_addr32[1] = addr6_start.s6_addr32[1] + htonl(1); - - if (addr6_start.s6_addr32[1] == 0) { - addr6_start.s6_addr32[0] = addr6_start.s6_addr32[0] + htonl(1); - } - } - } - - memcpy (&config_pP->pgw_config.pool_pdn_addresses.ipv6_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv6_addresses++], - &addr6_start, - sizeof(struct in6_addr)); - counter64 = counter64 - 1; - } while (counter64 > 0); - } - } else { - DevAssert(PGW_MAX_ALLOCATED_PDN_ADDRESSES > config_pP->pgw_config.pool_pdn_addresses.num_ipv6_addresses); - memcpy (&config_pP->pgw_config.pool_pdn_addresses.ipv6_addresses[config_pP->pgw_config.pool_pdn_addresses.num_ipv6_addresses++], - buf_in6_addr, - sizeof(struct in6_addr)); - } - } - } - } - } - } - - return 0; -} diff --git a/openair-cn/MME_APP/mme_app_config.h b/openair-cn/MME_APP/mme_app_config.h deleted file mode 100755 index 047678d60d..0000000000 --- a/openair-cn/MME_APP/mme_app_config.h +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file mme_app_config.h - * \brief - * \author Lionel GAUTHIER - * \version 1.0 - * \company Eurecom - * \email: lionel.gauthier@eurecom.fr - */ -#ifndef MME_APP_CONFIG_H_ -#define MME_APP_CONFIG_H_ - - -#endif /* MME_APP_CONFIG_H_ */ diff --git a/openair-cn/MME_APP/mme_app_context.c b/openair-cn/MME_APP/mme_app_context.c deleted file mode 100644 index f7ca54f8da..0000000000 --- a/openair-cn/MME_APP/mme_app_context.c +++ /dev/null @@ -1,555 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#include -#include -#include -#include -#include -#include - -#include - -#include "intertask_interface.h" -#include "mme_config.h" - -#include "assertions.h" -#include "conversions.h" -#include "tree.h" -#include "enum_string.h" -#include "common_types.h" - -#include "mme_app_extern.h" -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" -#include "msc.h" - -int ue_context_compare_identifiers(struct ue_context_s *p1, - struct ue_context_s *p2); - -RB_PROTOTYPE(ue_context_map, ue_context_s, rb_entry, - ue_context_compare_identifiers); - -RB_GENERATE(ue_context_map, ue_context_s, rb_entry, - ue_context_compare_identifiers); - -//------------------------------------------------------------------------------ -extern inline int ue_context_compare_identifiers( - struct ue_context_s *p1, struct ue_context_s *p2) -//------------------------------------------------------------------------------ -{ - MME_APP_DEBUG(" ue_context_compare_identifiers IMSI %"SCNu64"\n", p1->imsi); - MME_APP_DEBUG(" ue_context_compare_identifiers mme_s11_teid %08x\n" , p1->mme_s11_teid); - MME_APP_DEBUG(" ue_context_compare_identifiers mme_ue_s1ap_id %08x\n" , p1->mme_ue_s1ap_id); - MME_APP_DEBUG(" ue_context_compare_identifiers ue_id %08x\n" , p1->ue_id); - - if (p1->imsi > 0) { - MME_APP_DEBUG(" with IMSI %"SCNu64"\n", p2->imsi); - - /* if IMSI provided */ - if (p1->imsi > p2->imsi) { - return 1; - } - - if (p1->imsi < p2->imsi) { - return -1; - } - } else if (p1->mme_s11_teid > 0) { - MME_APP_DEBUG(" with mme_s11_teid %08x\n", p2->mme_s11_teid); - - /* if s11 teid provided */ - if (p1->mme_s11_teid > p2->mme_s11_teid) { - return 1; - } - - if (p1->mme_s11_teid < p2->mme_s11_teid) { - return -1; - } - } else if (p1->mme_ue_s1ap_id > 0) { - MME_APP_DEBUG(" with mme_ue_s1ap_id %08x\n", p2->mme_ue_s1ap_id); - - /* if s1ap ue id provided */ - if (p1->mme_ue_s1ap_id > p2->mme_ue_s1ap_id) { - return 1; - } - - if (p1->mme_ue_s1ap_id < p2->mme_ue_s1ap_id) { - return -1; - } - } else if (p1->ue_id > 0) { - MME_APP_DEBUG(" with ue_id %08x\n", p2->ue_id); - - /* if nas ue_id provided */ - if (p1->ue_id > p2->ue_id) { - return 1; - } - - if (p1->ue_id < p2->ue_id) { - return -1; - } - } else { - uint16_t mcc1; - uint16_t mnc1; - uint16_t mnc1_len; - uint16_t mcc2; - uint16_t mnc2; - uint16_t mnc2_len; - - PLMN_T_TO_MCC_MNC(p1->guti.gummei.plmn, mcc1, mnc1, mnc1_len); - PLMN_T_TO_MCC_MNC(p1->guti.gummei.plmn, mcc2, mnc2, mnc2_len); - - /* else compare by GUTI */ - if ((p1->guti.m_tmsi < p2->guti.m_tmsi) && - (p1->guti.gummei.MMEcode < p2->guti.gummei.MMEcode) && - (p1->guti.gummei.MMEgid < p2->guti.gummei.MMEgid) && - (mcc1 < mcc2) && - (mnc1 < mnc2) && - (mnc1_len < mnc2_len)) - return 1; - - if ((p1->guti.m_tmsi > p2->guti.m_tmsi) && - (p1->guti.gummei.MMEcode > p2->guti.gummei.MMEcode) && - (p1->guti.gummei.MMEgid > p2->guti.gummei.MMEgid) && - (mcc1 > mcc2) && - (mnc1 > mnc2) && - (mnc1_len > mnc2_len)) - return -1; - } - - /* Match -> return 0 */ - return 0; -} - -//------------------------------------------------------------------------------ -ue_context_t *mme_create_new_ue_context(void) -//------------------------------------------------------------------------------ -{ - ue_context_t *new_p; - - new_p = malloc(sizeof(ue_context_t)); - - if (new_p == NULL) { - return NULL; - } - - memset(new_p, 0, sizeof(ue_context_t)); - return new_p; -} - - -//------------------------------------------------------------------------------ -struct ue_context_s *mme_ue_context_exists_imsi(mme_ue_context_t *mme_ue_context, - mme_app_imsi_t imsi) -//------------------------------------------------------------------------------ -{ - struct ue_context_s reference; - - DevAssert(mme_ue_context != NULL); - - memset(&reference, 0, sizeof(struct ue_context_s)); - reference.imsi = imsi; - return RB_FIND(ue_context_map, &mme_ue_context->ue_context_tree, - &reference); -} - - -//------------------------------------------------------------------------------ -struct ue_context_s *mme_ue_context_exists_s11_teid(mme_ue_context_t *mme_ue_context, - uint32_t teid) -//------------------------------------------------------------------------------ -{ - struct ue_context_s reference; - - DevAssert(mme_ue_context != NULL); - - memset(&reference, 0, sizeof(struct ue_context_s)); - reference.mme_s11_teid = teid; - return RB_FIND(ue_context_map, &mme_ue_context->ue_context_tree, - &reference); -} - - - -//------------------------------------------------------------------------------ -ue_context_t *mme_ue_context_exists_mme_ue_s1ap_id( - mme_ue_context_t *mme_ue_context, - uint32_t mme_ue_s1ap_id) -//------------------------------------------------------------------------------ -{ - struct ue_context_s reference; - - DevAssert(mme_ue_context != NULL); - - memset(&reference, 0, sizeof(struct ue_context_s)); - reference.mme_ue_s1ap_id = mme_ue_s1ap_id; - return RB_FIND(ue_context_map, &mme_ue_context->ue_context_tree, - &reference); -} - - - -//------------------------------------------------------------------------------ -ue_context_t *mme_ue_context_exists_nas_ue_id( - mme_ue_context_t *mme_ue_context, - uint32_t nas_ue_id) -//------------------------------------------------------------------------------ -{ - struct ue_context_s reference; - - DevAssert(mme_ue_context != NULL); - - memset(&reference, 0, sizeof(struct ue_context_s)); - reference.ue_id = nas_ue_id; - return RB_FIND(ue_context_map, &mme_ue_context->ue_context_tree, - &reference); -} - - - - -//------------------------------------------------------------------------------ -ue_context_t *mme_ue_context_exists_guti(mme_ue_context_t *mme_ue_context, - GUTI_t guti) -//------------------------------------------------------------------------------ -{ - struct ue_context_s reference; - - DevAssert(mme_ue_context != NULL); - - memset(&reference, 0, sizeof(struct ue_context_s)); - - memcpy(&reference.guti, &guti, sizeof(GUTI_t)); - - return RB_FIND(ue_context_map, &mme_ue_context->ue_context_tree, - &reference); -} - -//------------------------------------------------------------------------------ -int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s *ue_context_p) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *collision_p = NULL; - - DevAssert(mme_ue_context != NULL); - DevAssert(ue_context_p != NULL); - - /* Updating statistics */ - mme_ue_context->nb_ue_managed++; - mme_ue_context->nb_ue_since_last_stat++; - - collision_p = RB_INSERT(ue_context_map, &mme_ue_context->ue_context_tree, - ue_context_p); - - if (collision_p != NULL) { - fprintf(stderr, "This ue context already exists...\n"); - return -1; - } - - return 0; -} - - - -//------------------------------------------------------------------------------ -void mme_remove_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s *ue_context_p) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *collision_p = NULL; - - DevAssert(mme_ue_context != NULL); - DevAssert(ue_context_p != NULL); - - /* Updating statistics */ - mme_ue_context->nb_ue_managed++; - mme_ue_context->nb_ue_since_last_stat++; - - collision_p = RB_REMOVE(ue_context_map, &mme_ue_context->ue_context_tree, - ue_context_p); -#warning "TODO mme_ue_context_free_content" - //TODO mme_ue_context_free_content(ue_context_p); - free(ue_context_p); - return 0; -} - -//------------------------------------------------------------------------------ -void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *context_p; - - MME_APP_DEBUG("-----------------------UE contexts-----------------------\n"); - RB_FOREACH(context_p, ue_context_map, &mme_ue_context->ue_context_tree) { - uint8_t j; - - MME_APP_DEBUG(" - IMSI ...........: %"SCNu64"\n", context_p->imsi); - MME_APP_DEBUG(" | m_tmsi | mmec | mmegid | mcc | mnc |\n"); - MME_APP_DEBUG(" - GUTI............: | %08x | %02x | %04x | %03u | %03u |\n", - context_p->guti.m_tmsi, context_p->guti.gummei.MMEcode, - context_p->guti.gummei.MMEgid, - /* TODO check if two or three digits MNC... */ - context_p->guti.gummei.plmn.MCCdigit3 * 100 + - context_p->guti.gummei.plmn.MCCdigit2 * 10 + - context_p->guti.gummei.plmn.MCCdigit1, - context_p->guti.gummei.plmn.MNCdigit3 * 100 + - context_p->guti.gummei.plmn.MNCdigit2 * 10 + - context_p->guti.gummei.plmn.MNCdigit1); - MME_APP_DEBUG(" - Authenticated ..: %s\n", - (context_p->imsi_auth == IMSI_UNAUTHENTICATED) ? "FALSE": "TRUE"); - MME_APP_DEBUG(" - eNB UE s1ap ID .: %08x\n", context_p->eNB_ue_s1ap_id); - MME_APP_DEBUG(" - MME UE s1ap ID .: %08x\n", context_p->mme_ue_s1ap_id); - MME_APP_DEBUG(" - MME S11 TEID ...: %08x\n", context_p->mme_s11_teid); - MME_APP_DEBUG(" - SGW S11 TEID ...: %08x\n", context_p->sgw_s11_teid); - MME_APP_DEBUG(" | mcc | mnc | cell id |\n"); - MME_APP_DEBUG(" - E-UTRAN CGI ....: | %03u | %03u | %08x |\n", - context_p->e_utran_cgi.plmn.MCCdigit3 * 100 + - context_p->e_utran_cgi.plmn.MCCdigit2 * 10 + - context_p->e_utran_cgi.plmn.MCCdigit1, - context_p->e_utran_cgi.plmn.MNCdigit3 * 100 + - context_p->e_utran_cgi.plmn.MNCdigit2 * 10 + - context_p->e_utran_cgi.plmn.MNCdigit1, - context_p->e_utran_cgi.cell_identity); - /* Ctime return a \n in the string */ - MME_APP_DEBUG(" - Last acquired ..: %s", ctime(&context_p->cell_age)); - - /* Display UE info only if we know them */ - if (context_p->subscription_known == SUBSCRIPTION_KNOWN) { - MME_APP_DEBUG(" - Status .........: %s\n", - (context_p->sub_status == SS_SERVICE_GRANTED) ? "Granted" : "Barred"); -#define DISPLAY_BIT_MASK_PRESENT(mASK) \ - ((context_p->access_restriction_data & mASK) ? 'X' : 'O') - MME_APP_DEBUG(" (O = allowed, X = !O) |UTRAN|GERAN|GAN|HSDPA EVO|E_UTRAN|HO TO NO 3GPP|\n"); - MME_APP_DEBUG(" - Access restriction | %c | %c | %c | %c | %c | %c |\n", - DISPLAY_BIT_MASK_PRESENT(ARD_UTRAN_NOT_ALLOWED), - DISPLAY_BIT_MASK_PRESENT(ARD_GERAN_NOT_ALLOWED), - DISPLAY_BIT_MASK_PRESENT(ARD_GAN_NOT_ALLOWED), - DISPLAY_BIT_MASK_PRESENT(ARD_I_HSDPA_EVO_NOT_ALLOWED), - DISPLAY_BIT_MASK_PRESENT(ARD_E_UTRAN_NOT_ALLOWED), - DISPLAY_BIT_MASK_PRESENT(ARD_HO_TO_NON_3GPP_NOT_ALLOWED)); - MME_APP_DEBUG(" - Access Mode ....: %s\n", - ACCESS_MODE_TO_STRING(context_p->access_mode)); - MME_APP_DEBUG(" - MSISDN .........: %-*s\n", - MSISDN_LENGTH, context_p->msisdn); - MME_APP_DEBUG(" - RAU/TAU timer ..: %u\n", context_p->rau_tau_timer); - MME_APP_DEBUG(" - IMEISV .........: %*s\n", 15, - context_p->me_identity.imeisv); - MME_APP_DEBUG(" - AMBR (bits/s) ( Downlink | Uplink )\n"); - MME_APP_DEBUG(" Subscribed ...: (%010"PRIu64"|%010"PRIu64")\n", - context_p->subscribed_ambr.br_dl, - context_p->subscribed_ambr.br_ul); - MME_APP_DEBUG(" Allocated ....: (%010"PRIu64"|%010"PRIu64")\n", - context_p->used_ambr.br_dl, context_p->used_ambr.br_ul); - MME_APP_DEBUG(" - Known vectors ..: %u\n", context_p->nb_of_vectors); - - for (j = 0; j < context_p->nb_of_vectors; j++) { - int k; - char xres_string[3 * XRES_LENGTH_MAX + 1]; - eutran_vector_t *vector_p; - - vector_p = &context_p->vector_list[j]; - - MME_APP_DEBUG(" - RAND ..: "RAND_FORMAT"\n", - RAND_DISPLAY(vector_p->rand)); - MME_APP_DEBUG(" - AUTN ..: "AUTN_FORMAT"\n", - AUTN_DISPLAY(vector_p->autn)); - MME_APP_DEBUG(" - KASME .: "KASME_FORMAT"\n", - KASME_DISPLAY_1(vector_p->kasme)); - MME_APP_DEBUG(" "KASME_FORMAT"\n", - KASME_DISPLAY_2(vector_p->kasme)); - - for (k = 0; k < vector_p->xres.size; k++) { - sprintf(&xres_string[k * 3], "%02x,", vector_p->xres.data[k]); - } - - xres_string[k * 3 - 1] = '\0'; - MME_APP_DEBUG(" - XRES ..: %s\n", xres_string); - } - - MME_APP_DEBUG(" - PDN List:\n"); - - for (j = 0; j < context_p->apn_profile.nb_apns; j++) { - struct apn_configuration_s *apn_config_p; - - apn_config_p = &context_p->apn_profile.apn_configuration[j]; - - /* Default APN ? */ - MME_APP_DEBUG(" - Default APN ...: %s\n", - (apn_config_p->context_identifier == context_p->apn_profile.context_identifier) - ? "TRUE" : "FALSE"); - MME_APP_DEBUG(" - APN ...........: %s\n", apn_config_p->service_selection); - MME_APP_DEBUG(" - AMBR (bits/s) ( Downlink | Uplink )\n"); - MME_APP_DEBUG(" (%010"PRIu64"|%010"PRIu64")\n", - apn_config_p->ambr.br_dl, apn_config_p->ambr.br_ul); - MME_APP_DEBUG(" - PDN type ......: %s\n", - PDN_TYPE_TO_STRING(apn_config_p->pdn_type)); - MME_APP_DEBUG(" - QOS\n"); - MME_APP_DEBUG(" QCI .........: %u\n", - apn_config_p->subscribed_qos.qci); - MME_APP_DEBUG(" Prio level ..: %u\n", - apn_config_p->subscribed_qos.allocation_retention_priority.priority_level); - MME_APP_DEBUG(" Pre-emp vul .: %s\n", - (apn_config_p->subscribed_qos.allocation_retention_priority.pre_emp_vulnerability - == PRE_EMPTION_VULNERABILITY_ENABLED) ? "ENABLED" : "DISABLED"); - MME_APP_DEBUG(" Pre-emp cap .: %s\n", - (apn_config_p->subscribed_qos.allocation_retention_priority.pre_emp_capability - == PRE_EMPTION_CAPABILITY_ENABLED) ? "ENABLED" : "DISABLED"); - - if (apn_config_p->nb_ip_address == 0) { - MME_APP_DEBUG(" IP addr .....: Dynamic allocation\n"); - } else { - int i; - MME_APP_DEBUG(" IP addresses :\n"); - - for (i = 0; i < apn_config_p->nb_ip_address; i++) { - if (apn_config_p->ip_address[i].pdn_type == IPv4) { - MME_APP_DEBUG(" ["IPV4_ADDR"]\n", - IPV4_ADDR_DISPLAY_8(apn_config_p->ip_address[i].address.ipv4_address)); - } else { - char ipv6[40]; - inet_ntop(AF_INET6, apn_config_p->ip_address[i].address.ipv6_address,ipv6, 40); - MME_APP_DEBUG(" [%s]\n", ipv6); - } - } - } - - MME_APP_DEBUG("\n"); - } - - MME_APP_DEBUG(" - Bearer List:\n"); - - for (j = 0; j < BEARERS_PER_UE; j++) { - bearer_context_t *bearer_context_p; - - bearer_context_p = &context_p->eps_bearers[j]; - - if (bearer_context_p->s_gw_teid != 0) { - MME_APP_DEBUG(" Bearer id .......: %02u\n", j); - MME_APP_DEBUG(" S-GW TEID (UP)...: %08x\n", bearer_context_p->s_gw_teid); - MME_APP_DEBUG(" P-GW TEID (UP)...: %08x\n", bearer_context_p->p_gw_teid); - MME_APP_DEBUG(" QCI .............: %u\n", - bearer_context_p->qci); - MME_APP_DEBUG(" Priority level ..: %u\n", - bearer_context_p->prio_level); - MME_APP_DEBUG(" Pre-emp vul .....: %s\n", - (bearer_context_p->pre_emp_vulnerability - == PRE_EMPTION_VULNERABILITY_ENABLED) ? "ENABLED" : "DISABLED"); - MME_APP_DEBUG(" Pre-emp cap .....: %s\n", - (bearer_context_p->pre_emp_capability - == PRE_EMPTION_CAPABILITY_ENABLED) ? "ENABLED" : "DISABLED"); - } - } - } - } - MME_APP_DEBUG("---------------------------------------------------------\n"); -} - - -//------------------------------------------------------------------------------ -void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_req_t const *s1ap_ue_context_release_req) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - MessageDef *message_p = NULL; - - MME_APP_DEBUG("Received S1AP_UE_CONTEXT_RELEASE_REQ from S1AP\n"); - ue_context_p = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, s1ap_ue_context_release_req->mme_ue_s1ap_id); - - if (ue_context_p == NULL) { - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 S1AP_UE_CONTEXT_RELEASE_REQ Unknown mme_ue_s1ap_id 0x%06"PRIX32" ",s1ap_ue_context_release_req->mme_ue_s1ap_id); - MME_APP_ERROR("UE context doesn't exist for UE 0x%06"PRIX32"/dec%u\n", - s1ap_ue_context_release_req->mme_ue_s1ap_id, - s1ap_ue_context_release_req->mme_ue_s1ap_id); - return; - } - if ((ue_context_p->mme_s11_teid == 0) && - (ue_context_p->sgw_s11_teid == 0)) { - // no session was created, no need for releasing bearers in SGW - message_p = itti_alloc_new_message(TASK_MME_APP, S1AP_UE_CONTEXT_RELEASE_COMMAND); - - AssertFatal(message_p != NULL, "itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.s1ap_ue_context_release_command, - 0, - sizeof(s1ap_ue_context_release_command_t)); - - S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S1AP_MME, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_COMMAND mme_ue_s1ap_id %06"PRIX32" ", - S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id); - - - itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); - } else { - mme_app_send_s11_release_access_bearers_req(ue_context_p); - } -} - - -//------------------------------------------------------------------------------ -void mme_app_handle_s1ap_ue_context_release_complete(const s1ap_ue_context_release_complete_t const *s1ap_ue_context_release_complete) -//------------------------------------------------------------------------------ -{ - struct ue_context_s *ue_context_p = NULL; - MessageDef *message_p = NULL; - - MME_APP_DEBUG("Received S1AP_UE_CONTEXT_RELEASE_COMPLETE from S1AP\n"); - - ue_context_p = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, s1ap_ue_context_release_complete->mme_ue_s1ap_id); - - if (ue_context_p == NULL) { - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 S1AP_UE_CONTEXT_RELEASE_COMPLETE Unknown mme_ue_s1ap_id 0x%06"PRIX32" ",s1ap_ue_context_release_complete->mme_ue_s1ap_id); - MME_APP_ERROR("UE context doesn't exist for mme_ue_s1ap_id 0x%06"PRIX32"/dec%u\n", - s1ap_ue_context_release_complete->mme_ue_s1ap_id, - s1ap_ue_context_release_complete->mme_ue_s1ap_id); - return; - } - message_p = itti_alloc_new_message(TASK_MME_APP, S1AP_DEREGISTER_UE_REQ); - memset((void*)&message_p->ittiMsg.s1ap_deregister_ue_req, - 0, - sizeof(s1ap_deregister_ue_req_t)); - - S1AP_DEREGISTER_UE_REQ(message_p).mme_ue_s1ap_id = s1ap_ue_context_release_complete->mme_ue_s1ap_id; - - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_NAS_MME, - NULL,0, - "0 S1AP_DEREGISTER_UE_REQ"); - - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); - - mme_remove_ue_context(&mme_app_desc.mme_ue_contexts, ue_context_p); -} diff --git a/openair-cn/MME_APP/mme_app_defs.h b/openair-cn/MME_APP/mme_app_defs.h deleted file mode 100644 index 11fbfdc2c8..0000000000 --- a/openair-cn/MME_APP/mme_app_defs.h +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -/* This file contains definitions related to mme applicative layer and should - * not be included within other layers. - * Use mme_app_extern.h to expose mme applicative layer procedures/data. - */ - -#include "intertask_interface.h" -#include "mme_app_ue_context.h" - -#ifndef MME_APP_DEFS_H_ -#define MME_APP_DEFS_H_ - -#ifndef MME_APP_DEBUG -# define MME_APP_DEBUG(x, args...) do { fprintf(stdout, "[MMEA][D]"x, ##args); } while(0) -#endif -#ifndef MME_APP_ERROR -# define MME_APP_ERROR(x, args...) do { fprintf(stdout, "[MMEA][E]"x, ##args); } while(0) -#endif - -typedef struct { - /* UE contexts + some statistics variables */ - mme_ue_context_t mme_ue_contexts; - - long statistic_timer_id; - uint32_t statistic_timer_period; -} mme_app_desc_t; - -extern mme_app_desc_t mme_app_desc; - - -#if defined(DISABLE_USE_NAS) -int mme_app_handle_attach_req(nas_attach_req_t *attach_req_p); -#endif - -int mme_app_handle_s1ap_ue_capabilities_ind (const s1ap_ue_cap_ind_t const * s1ap_ue_cap_ind_pP); - -int mme_app_send_s11_create_session_req (struct ue_context_s * const ue_context_pP); - -int mme_app_send_s6a_update_location_req (struct ue_context_s * const ue_context_pP); - -int mme_app_handle_s6a_update_location_ans (const s6a_update_location_ans_t * const ula_pP); - -int mme_app_handle_nas_pdn_connectivity_req ( nas_pdn_connectivity_req_t * const nas_pdn_connectivity_req_p); - -void mme_app_handle_conn_est_cnf (const nas_conn_est_cnf_t * const nas_conn_est_cnf_pP); - -void mme_app_handle_conn_est_ind (const mme_app_connection_establishment_ind_t * const conn_est_ind_pP); - -int mme_app_handle_create_sess_resp (const SgwCreateSessionResponse * const create_sess_resp_pP); - -int mme_app_handle_establish_ind (const nas_establish_ind_t * const nas_establish_ind_pP); - -int mme_app_handle_authentication_info_answer(const s6a_auth_info_ans_t * const s6a_auth_info_ans_pP); - -int mme_app_handle_nas_auth_resp (const nas_auth_resp_t * const nas_auth_resp_pP); - -nas_cause_t s6a_error_2_nas_cause (const uint32_t s6a_errorP, const int experimentalP); - -void mme_app_handle_nas_auth_param_req (const nas_auth_param_req_t * const nas_auth_param_req_pP); - -void mme_app_handle_initial_context_setup_rsp(const mme_app_initial_context_setup_rsp_t * const initial_ctxt_setup_rsp_pP); - -#endif /* MME_APP_DEFS_H_ */ diff --git a/openair-cn/MME_APP/mme_app_extern.h b/openair-cn/MME_APP/mme_app_extern.h deleted file mode 100644 index b34a849aff..0000000000 --- a/openair-cn/MME_APP/mme_app_extern.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#ifndef MME_APP_EXTERN_H_ -#define MME_APP_EXTERN_H_ - -int mme_app_init(const mme_config_t *mme_config); - -#endif /* MME_APP_EXTERN_H_ */ diff --git a/openair-cn/MME_APP/mme_app_itti_messaging.h b/openair-cn/MME_APP/mme_app_itti_messaging.h deleted file mode 100644 index df23ba7d7e..0000000000 --- a/openair-cn/MME_APP/mme_app_itti_messaging.h +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#ifndef MME_APP_ITTI_MESSAGING_H_ -#define MME_APP_ITTI_MESSAGING_H_ - -static inline void -mme_app_itti_auth_fail( - const uint32_t ue_id, - const nas_cause_t cause) -{ - MessageDef *message_p; - - - message_p = itti_alloc_new_message(TASK_MME_APP, NAS_AUTHENTICATION_PARAM_FAIL); - - NAS_AUTHENTICATION_PARAM_FAIL(message_p).ue_id = ue_id; - NAS_AUTHENTICATION_PARAM_FAIL(message_p).cause = cause; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_AUTHENTICATION_PARAM_FAIL ue_id %06"PRIX32" cause %u", - ue_id, cause); - - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - - - -static inline void mme_app_itti_auth_rsp( - const uint32_t ue_id, - const uint8_t nb_vectors, - const eutran_vector_t * const vector) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_MME_APP, NAS_AUTHENTICATION_PARAM_RSP); - - NAS_AUTHENTICATION_PARAM_RSP(message_p).ue_id = ue_id; - NAS_AUTHENTICATION_PARAM_RSP(message_p).nb_vectors = nb_vectors; - memcpy(&NAS_AUTHENTICATION_PARAM_RSP(message_p).vector, vector, sizeof(*vector)); - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_AUTHENTICATION_PARAM_RSP ue_id %06"PRIX32" nb_vectors %u", - ue_id, nb_vectors); - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - -#endif /* MME_APP_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/MME_APP/mme_app_location.c b/openair-cn/MME_APP/mme_app_location.c deleted file mode 100755 index 969b7b6ffb..0000000000 --- a/openair-cn/MME_APP/mme_app_location.c +++ /dev/null @@ -1,167 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file mme_app_location.c - * \brief - * \author Sebastien ROUX, Lionel GAUTHIER - * \version 1.0 - * \company Eurecom - * \email: lionel.gauthier@eurecom.fr - */ - -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" - -#include "mme_app_extern.h" -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" - -#include "secu_defs.h" - -#include "assertions.h" -#include "common_types.h" -#include "msc.h" - - -int -mme_app_send_s6a_update_location_req( - struct ue_context_s * const ue_context_pP) -{ - struct ue_context_s *ue_context_p = NULL; - uint64_t imsi = 0; - MessageDef *message_p = NULL; - s6a_update_location_req_t *s6a_ulr_p = NULL; - - - MME_APP_STRING_TO_IMSI((char *)ue_context_pP->pending_pdn_connectivity_req_imsi, &imsi); - - MME_APP_DEBUG("Handling imsi %"IMSI_FORMAT"\n", imsi); - - if ((ue_context_p = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, - imsi)) == NULL) { - MME_APP_ERROR("That's embarrassing as we don't know this IMSI\n"); - return -1; - } - - message_p = itti_alloc_new_message(TASK_MME_APP, S6A_UPDATE_LOCATION_REQ); - - if (message_p == NULL) { - return -1; - } - - s6a_ulr_p = &message_p->ittiMsg.s6a_update_location_req; - memset((void*)s6a_ulr_p, 0, sizeof(s6a_update_location_req_t)); - - MME_APP_IMSI_TO_STRING(imsi, s6a_ulr_p->imsi); - s6a_ulr_p->imsi_length = strlen(s6a_ulr_p->imsi); - s6a_ulr_p->initial_attach = INITIAL_ATTACH; - memcpy(&s6a_ulr_p->visited_plmn, &ue_context_p->guti.gummei.plmn, sizeof(plmn_t)); - s6a_ulr_p->rat_type = RAT_EUTRAN; - /* Check if we already have UE data */ - s6a_ulr_p->skip_subscriber_data = 0; - - MSC_LOG_TX_MESSAGE( - MSC_MMEAPP_MME, - MSC_S6A_MME, - NULL,0, - "0 S6A_UPDATE_LOCATION_REQ imsi %"IMSI_FORMAT,imsi); - - return itti_send_msg_to_task(TASK_S6A, INSTANCE_DEFAULT, message_p); -} - - - -int -mme_app_handle_s6a_update_location_ans( - const s6a_update_location_ans_t * const ula_pP) -{ - uint64_t imsi = 0; - struct ue_context_s *ue_context_p = NULL; - - DevAssert(ula_pP != NULL); - - if (ula_pP->result.present == S6A_RESULT_BASE) { - if (ula_pP->result.choice.base != DIAMETER_SUCCESS) { - /* The update location procedure has failed. Notify the NAS layer - * and don't initiate the bearer creation on S-GW side. - */ - MME_APP_DEBUG("ULR/ULA procedure returned non success (ULA.result.choice.base=%d)\n", ula_pP->result.choice.base); - DevMessage("ULR/ULA procedure returned non success\n"); - } - } else { - /* The update location procedure has failed. Notify the NAS layer - * and don't initiate the bearer creation on S-GW side. - */ - MME_APP_DEBUG("ULR/ULA procedure returned non success (ULA.result.present=%d)\n", ula_pP->result.present); - DevMessage("ULR/ULA procedure returned non success\n"); - } - - MME_APP_STRING_TO_IMSI((char *)ula_pP->imsi, &imsi); - - MME_APP_DEBUG("%s Handling imsi %"IMSI_FORMAT"\n", __FUNCTION__, imsi); - - - if ((ue_context_p = mme_ue_context_exists_imsi(&mme_app_desc.mme_ue_contexts, imsi)) == NULL) { - MME_APP_ERROR("That's embarrassing as we don't know this IMSI\n"); - MSC_LOG_EVENT( - MSC_MMEAPP_MME, - "0 S6A_UPDATE_LOCATION unknown imsi %"IMSI_FORMAT,imsi); - return -1; - } - - ue_context_p->subscription_known = SUBSCRIPTION_KNOWN; - - ue_context_p->sub_status = ula_pP->subscription_data.subscriber_status; - ue_context_p->access_restriction_data = ula_pP->subscription_data.access_restriction; - - /* Copy the subscribed ambr to the sgw create session request message */ - memcpy(&ue_context_p->subscribed_ambr, &ula_pP->subscription_data.subscribed_ambr, - sizeof(ambr_t)); - memcpy( - ue_context_p->msisdn, - ula_pP->subscription_data.msisdn, - ula_pP->subscription_data.msisdn_length); - ue_context_p->msisdn_length = ula_pP->subscription_data.msisdn_length; - AssertFatal(ula_pP->subscription_data.msisdn_length != 0, "MSISDN LENGTH IS 0"); - AssertFatal(ula_pP->subscription_data.msisdn_length <= MSISDN_LENGTH, "MSISDN LENGTH is too high %u", MSISDN_LENGTH); - ue_context_p->msisdn[ue_context_p->msisdn_length] = '\0'; - - ue_context_p->rau_tau_timer = ula_pP->subscription_data.rau_tau_timer; - ue_context_p->access_mode = ula_pP->subscription_data.access_mode; - - memcpy(&ue_context_p->apn_profile, &ula_pP->subscription_data.apn_config_profile, - sizeof(apn_config_profile_t)); - - return mme_app_send_s11_create_session_req(ue_context_p); -} - diff --git a/openair-cn/MME_APP/mme_app_main.c b/openair-cn/MME_APP/mme_app_main.c deleted file mode 100644 index ddd00e1faf..0000000000 --- a/openair-cn/MME_APP/mme_app_main.c +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" -#include "timer.h" - -#include "mme_app_extern.h" -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" -#include "mme_app_statistics.h" - -#include "assertions.h" -#include "msc.h" - -mme_app_desc_t mme_app_desc; - -void *mme_app_thread(void *args); - -void *mme_app_thread(void *args) -{ - itti_mark_task_ready(TASK_MME_APP); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p = NULL; - /* Trying to fetch a message from the message queue. - * If the queue is empty, this function will block till a - * message is sent to the task. - */ - itti_receive_msg(TASK_MME_APP, &received_message_p); - DevAssert(received_message_p != NULL); - - switch (ITTI_MSG_ID(received_message_p)) { - case S6A_AUTH_INFO_ANS: { - /* We received the authentication vectors from HSS, trigger a ULR - * for now. Normaly should trigger an authentication procedure with UE. - */ - mme_app_handle_authentication_info_answer(&received_message_p->ittiMsg.s6a_auth_info_ans); - } - break; - - case S6A_UPDATE_LOCATION_ANS: { - /* We received the update location answer message from HSS -> Handle it */ - mme_app_handle_s6a_update_location_ans(&received_message_p->ittiMsg.s6a_update_location_ans); - } - break; - - case SGW_CREATE_SESSION_RESPONSE: { - mme_app_handle_create_sess_resp(&received_message_p->ittiMsg.sgwCreateSessionResponse); - } - break; - - case SGW_MODIFY_BEARER_RESPONSE: { - MME_APP_DEBUG(" TO DO HANDLE SGW_MODIFY_BEARER_RESPONSE"); - // TO DO - } - break; - - case SGW_RELEASE_ACCESS_BEARERS_RESPONSE: { - mme_app_handle_release_access_bearers_resp(&received_message_p->ittiMsg.sgwReleaseAccessBearersResponse); - } - break; - -#if defined(DISABLE_USE_NAS) - - case NAS_ATTACH_REQ: { - mme_app_handle_attach_req(&received_message_p->ittiMsg.nas_attach_req); - } - break; - - case NAS_AUTHENTICATION_RESP: { - mme_app_handle_nas_auth_resp(&received_message_p->ittiMsg.nas_auth_resp); - } - break; -#else - - case NAS_AUTHENTICATION_PARAM_REQ: { - mme_app_handle_nas_auth_param_req(&received_message_p->ittiMsg.nas_auth_param_req); - } - break; -#endif - - case NAS_PDN_CONNECTIVITY_REQ: { - mme_app_handle_nas_pdn_connectivity_req(&received_message_p->ittiMsg.nas_pdn_connectivity_req); - } - break; - - case NAS_CONNECTION_ESTABLISHMENT_CNF: { - mme_app_handle_conn_est_cnf(&NAS_CONNECTION_ESTABLISHMENT_CNF(received_message_p)); - } - break; - - // From S1AP Initiating Message/EMM Attach Request - case MME_APP_CONNECTION_ESTABLISHMENT_IND: { - mme_app_handle_conn_est_ind(&MME_APP_CONNECTION_ESTABLISHMENT_IND(received_message_p)); - } - break; - - case MME_APP_INITIAL_CONTEXT_SETUP_RSP: { - mme_app_handle_initial_context_setup_rsp(&MME_APP_INITIAL_CONTEXT_SETUP_RSP(received_message_p)); - } - break; - - case TIMER_HAS_EXPIRED: { - /* Check if it is the statistic timer */ - if (received_message_p->ittiMsg.timer_has_expired.timer_id == - mme_app_desc.statistic_timer_id) { - mme_app_statistics_display(); - } - } - break; - - case TERMINATE_MESSAGE: { - /* Termination message received TODO -> release any data allocated */ - itti_exit_task(); - } - break; - - case S1AP_UE_CAPABILITIES_IND: { - mme_app_handle_s1ap_ue_capabilities_ind(&received_message_p->ittiMsg.s1ap_ue_cap_ind); - } - break; - - case S1AP_UE_CONTEXT_RELEASE_REQ: { - mme_app_handle_s1ap_ue_context_release_req(&received_message_p->ittiMsg.s1ap_ue_context_release_req); - } - break; - - case S1AP_UE_CONTEXT_RELEASE_COMPLETE: { - mme_app_handle_s1ap_ue_context_release_complete(&received_message_p->ittiMsg.s1ap_ue_context_release_complete); - } - break; - default: { - MME_APP_DEBUG("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - AssertFatal(0, "Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -int mme_app_init(const mme_config_t *mme_config_p) -{ - MME_APP_DEBUG("Initializing MME applicative layer\n"); - - memset(&mme_app_desc, 0, sizeof(mme_app_desc)); - - /* Create the thread associated with MME applicative layer */ - if (itti_create_task(TASK_MME_APP, &mme_app_thread, NULL) < 0) { - MME_APP_ERROR("MME APP create task failed\n"); - return -1; - } - - mme_app_desc.statistic_timer_period = mme_config_p->mme_statistic_timer; - - /* Request for periodic timer */ - if (timer_setup(mme_config_p->mme_statistic_timer, 0, TASK_MME_APP, INSTANCE_DEFAULT, - TIMER_PERIODIC, NULL, &mme_app_desc.statistic_timer_id) < 0) { - MME_APP_ERROR("Failed to request new timer for statistics with %ds " - "of periocidity\n", mme_config_p->mme_statistic_timer); - mme_app_desc.statistic_timer_id = 0; - } - - MME_APP_DEBUG("Initializing MME applicative layer: DONE\n"); - return 0; -} diff --git a/openair-cn/MME_APP/mme_app_statistics.c b/openair-cn/MME_APP/mme_app_statistics.c deleted file mode 100644 index e9eea88a42..0000000000 --- a/openair-cn/MME_APP/mme_app_statistics.c +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "intertask_interface.h" - -#include "mme_app_ue_context.h" -#include "mme_app_defs.h" -#include "mme_app_statistics.h" - -int -mme_app_statistics_display(void) -{ - fprintf(stdout, "================== Statistics ==================\n"); - fprintf(stdout, " | Global | Since last display |\n"); - fprintf(stdout, "UE | %10u | %10u |\n", - mme_app_desc.mme_ue_contexts.nb_ue_managed, - mme_app_desc.mme_ue_contexts.nb_ue_since_last_stat); - fprintf(stdout, "Bearers | %10u | %10u |\n", - mme_app_desc.mme_ue_contexts.nb_bearers_managed, - mme_app_desc.mme_ue_contexts.nb_bearers_since_last_stat); - - mme_app_desc.mme_ue_contexts.nb_ue_since_last_stat = 0; - mme_app_desc.mme_ue_contexts.nb_bearers_since_last_stat = 0; - - return 0; -} diff --git a/openair-cn/MME_APP/mme_app_statistics.h b/openair-cn/MME_APP/mme_app_statistics.h deleted file mode 100644 index 886cb9acd8..0000000000 --- a/openair-cn/MME_APP/mme_app_statistics.h +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#ifndef MME_APP_STATISTICS_H_ -#define MME_APP_STATISTICS_H_ - -int mme_app_statistics_display(void); - -#endif /* MME_APP_STATISTICS_H_ */ diff --git a/openair-cn/MME_APP/mme_app_ue_context.h b/openair-cn/MME_APP/mme_app_ue_context.h deleted file mode 100644 index d87f0fa4c0..0000000000 --- a/openair-cn/MME_APP/mme_app_ue_context.h +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -/*! \file mme_app_ue_context.h - * \brief MME applicative layer - * \author Sebastien ROUX - * \date 2013 - * \version 1.0 - * @defgroup _mme_app_impl_ MME applicative layer - * @ingroup _ref_implementation_ - * @{ - */ - -#include -#include /* For sscanf formats */ -#include /* to provide time_t */ - -#include "s1ap_messages_types.h" -#include "nas_messages_types.h" -#include "s6a_messages_types.h" -#include "security_types.h" -#include "tree.h" - -#ifndef MME_APP_UE_CONTEXT_H_ -#define MME_APP_UE_CONTEXT_H_ - -typedef enum { - ECM_IDLE, - ECM_CONNECTED, - ECM_DEREGISTERED, -} mm_state_t; - -typedef uint64_t mme_app_imsi_t; - -#define IMSI_FORMAT SCNu64 - -/* Convert the IMSI contained by a char string NULL terminated to uint64_t */ -#define MME_APP_STRING_TO_IMSI(sTRING, iMSI) sscanf(sTRING, "%"IMSI_FORMAT, iMSI) -#define MME_APP_IMSI_TO_STRING(iMSI, sTRING) snprintf(sTRING, IMSI_DIGITS_MAX+1, "%"IMSI_FORMAT, iMSI) - -/** @struct bearer_context_t - * @brief Parameters that should be kept for an eps bearer. - */ -typedef struct bearer_context_s { - /* S-GW Tunnel Endpoint for User-Plane */ - Teid_t s_gw_teid; - - /* S-GW IP address for User-Plane */ - ip_address_t s_gw_address; - - /* P-GW Tunnel Endpoint for User-Plane */ - Teid_t p_gw_teid; - - /* P-GW IP address for User-Plane */ - ip_address_t p_gw_address; - - /* QoS for this bearer */ - qci_t qci; - priority_level_t prio_level; - pre_emp_vulnerability_t pre_emp_vulnerability; - pre_emp_capability_t pre_emp_capability; - - /* TODO: add TFT */ -} bearer_context_t; - -/** @struct ue_context_t - * @brief Useful parameters to know in MME application layer. They are set - * according to 3GPP TS.23.401 #5.7.2 - */ -typedef struct ue_context_s { - /* Tree entry */ - RB_ENTRY(ue_context_s) rb_entry; - - /* Basic identifier for ue. IMSI is encoded on maximum of 15 digits of 4 bits, - * so usage of an unsigned integer on 64 bits is necessary. - */ - mme_app_imsi_t imsi; // set by nas_auth_param_req_t -#define IMSI_UNAUTHENTICATED (0x0) -#define IMSI_AUTHENTICATED (0x1) - /* Indicator to show the IMSI authentication state */ - unsigned imsi_auth:1; // set by nas_auth_resp_t - - unsigned eNB_ue_s1ap_id:24; - uint32_t mme_ue_s1ap_id; - - /* ue_id is equal to mme_ue_s1ap_id */ - uint32_t ue_id; // set by nas_auth_param_req_t - - uint8_t nb_of_vectors; // updated by S6A AUTHENTICATION ANSWER - /* List of authentication vectors for E-UTRAN */ - eutran_vector_t *vector_list; // updated by S6A AUTHENTICATION ANSWER - // pointer in vector_list - eutran_vector_t *vector_in_use; // updated by S6A AUTHENTICATION ANSWER - -#define SUBSCRIPTION_UNKNOWN 0x0 -#define SUBSCRIPTION_KNOWN 0x1 - unsigned subscription_known:1; // set by S6A UPDATE LOCATION ANSWER - uint8_t msisdn[MSISDN_LENGTH+1]; // set by S6A UPDATE LOCATION ANSWER - uint8_t msisdn_length; // set by S6A UPDATE LOCATION ANSWER - - mm_state_t mm_state; // not set/read - /* Globally Unique Temporary Identity */ - GUTI_t guti; // guti.gummei.plmn set by nas_auth_param_req_t - // read by S6A UPDATE LOCATION REQUEST - me_identity_t me_identity; // not set/read except read by display utility - - /* TODO: Add TAI list */ - - /* Last known cell identity */ - cgi_t e_utran_cgi; // set by nas_attach_req_t - // read for S11 CREATE_SESSION_REQUEST - /* Time when the cell identity was acquired */ - time_t cell_age; // set by nas_auth_param_req_t - - /* TODO: add csg_id */ - /* TODO: add csg_membership */ - - network_access_mode_t access_mode; // set by S6A UPDATE LOCATION ANSWER - - /* TODO: add ue radio cap, ms classmarks, supported codecs */ - - /* TODO: add ue network capability, ms network capability */ - /* TODO: add selected NAS algorithm */ - - /* TODO: add DRX parameter */ - - apn_config_profile_t apn_profile; // set by S6A UPDATE LOCATION ANSWER - ard_t access_restriction_data; // set by S6A UPDATE LOCATION ANSWER - subscriber_status_t sub_status; // set by S6A UPDATE LOCATION ANSWER - ambr_t subscribed_ambr; // set by S6A UPDATE LOCATION ANSWER - ambr_t used_ambr; - - rau_tau_timer_t rau_tau_timer; // set by S6A UPDATE LOCATION ANSWER - - /* Store the radio capabilities as received in S1AP UE capability indication - * message. - */ - char *ue_radio_capabilities; // not set/read - int ue_radio_cap_length; // not set/read - - Teid_t mme_s11_teid; // set by mme_app_send_s11_create_session_req - Teid_t sgw_s11_teid; // set by S11 CREATE_SESSION_RESPONSE - PAA_t paa; // set by S11 CREATE_SESSION_RESPONSE - - // temp - char pending_pdn_connectivity_req_imsi[16]; - uint8_t pending_pdn_connectivity_req_imsi_length; - OctetString pending_pdn_connectivity_req_apn; - OctetString pending_pdn_connectivity_req_pdn_addr; - int pending_pdn_connectivity_req_pti; - unsigned pending_pdn_connectivity_req_ue_id; - network_qos_t pending_pdn_connectivity_req_qos; - pco_flat_t pending_pdn_connectivity_req_pco; - void *pending_pdn_connectivity_req_proc_data; - int pending_pdn_connectivity_req_request_type; - - ebi_t default_bearer_id; - bearer_context_t eps_bearers[BEARERS_PER_UE]; -} ue_context_t; - -typedef struct { - uint32_t nb_ue_managed; - uint32_t nb_ue_idle; - - uint32_t nb_bearers_managed; - - uint32_t nb_ue_since_last_stat; - uint32_t nb_bearers_since_last_stat; - - /* Entry to the root */ - RB_HEAD(ue_context_map, ue_context_s) ue_context_tree; -} mme_ue_context_t; - -/** \brief Retrieve an UE context by selecting the provided IMSI - * \param imsi Imsi to find in UE map - * @returns an UE context matching the IMSI or NULL if the context doesn't exists - **/ -ue_context_t *mme_ue_context_exists_imsi(mme_ue_context_t *mme_ue_context, - mme_app_imsi_t imsi); - -/** \brief Retrieve an UE context by selecting the provided S11 teid - * \param teid The tunnel endpoint identifier used between MME and S-GW - * @returns an UE context matching the teid or NULL if the context doesn't exists - **/ -ue_context_t *mme_ue_context_exists_s11_teid(mme_ue_context_t *mme_ue_context, - uint32_t teid); - -/** \brief Retrieve an UE context by selecting the provided mme_ue_s1ap_id - * \param mme_ue_s1ap_id The UE id identifier used in S1AP MME (and NAS) - * @returns an UE context matching the mme_ue_s1ap_id or NULL if the context doesn't exists - **/ -ue_context_t *mme_ue_context_exists_mme_ue_s1ap_id(mme_ue_context_t *mme_ue_context, - uint32_t mme_ue_s1ap_id); - -/** \brief Retrieve an UE context by selecting the provided nas_ue_id - * \param nas_ue_id The UE id identifier used in S1AP MME and NAS - * @returns an UE context matching the nas_ue_id or NULL if the context doesn't exists - **/ -ue_context_t *mme_ue_context_exists_nas_ue_id(mme_ue_context_t *mme_ue_context, - uint32_t nas_ue_id); - -/** \brief Retrieve an UE context by selecting the provided guti - * \param guti The GUTI used by the UE - * @returns an UE context matching the guti or NULL if the context doesn't exists - **/ -ue_context_t *mme_ue_context_exists_guti(mme_ue_context_t *mme_ue_context, - GUTI_t guti); - -/** \brief Insert a new UE context in the tree of known UEs. - * At least the IMSI should be known to insert the context in the tree. - * \param ue_context_p The UE context to insert - * @returns 0 in case of success, -1 otherwise - **/ -int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, - struct ue_context_s *ue_context_p); - -/** \brief Remove a UE context of the tree of known UEs. - * \param ue_context_p The UE context to remove - **/ -void mme_remove_ue_context(mme_ue_context_t *mme_ue_context, - struct ue_context_s *ue_context_p); - - -/** \brief Allocate memory for a new UE context - * @returns Pointer to the new structure, NULL if allocation failed - **/ -ue_context_t *mme_create_new_ue_context(void); - -/** \brief Dump the UE contexts present in the tree - **/ -void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context); - - -void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_req_t const *s1ap_ue_context_release_req); - -#endif /* MME_APP_UE_CONTEXT_H_ */ - -/* @} */ diff --git a/openair-cn/MME_APP/s6a_2_nas_cause.c b/openair-cn/MME_APP/s6a_2_nas_cause.c deleted file mode 100644 index 979247b076..0000000000 --- a/openair-cn/MME_APP/s6a_2_nas_cause.c +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - - -#include "as_message.h" -#include "common_types.h" -#include "s6a_defs.h" -#include "mme_app_defs.h" - -nas_cause_t s6a_error_2_nas_cause(uint32_t s6a_error, int experimental) -{ - if (experimental == 0) { - /* Base protocol errors */ - switch (s6a_error) { - /* 3002 */ - case ER_DIAMETER_UNABLE_TO_DELIVER: /* Fall through */ - - /* 3003 */ - case ER_DIAMETER_REALM_NOT_SERVED: /* Fall through */ - - /* 5003 */ - case ER_DIAMETER_AUTHORIZATION_REJECTED: - return NAS_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; - - /* 5012 */ - case ER_DIAMETER_UNABLE_TO_COMPLY: /* Fall through */ - - /* 5004 */ - case ER_DIAMETER_INVALID_AVP_VALUE: /* Fall through */ - - /* Any other permanent errors from the diameter base protocol */ - default: - break; - } - } else { - switch (s6a_error) { - /* 5001 */ - case DIAMETER_ERROR_USER_UNKNOWN: - return NAS_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED; - - /* TODO: distinguish GPRS_DATA_SUBSCRIPTION */ - /* 5420 */ - case DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION: - return NAS_CAUSE_NO_SUITABLE_CELLS_IN_TRACKING_AREA; - - /* 5421 */ - case DIAMETER_ERROR_RAT_NOT_ALLOWED: - /* One of the following parameter can be sent depending on - * operator preference: - * ROAMING_NOT_ALLOWED_IN_THIS_TRACKING_AREA - * TRACKING_AREA_NOT_ALLOWED - * NO_SUITABLE_CELLS_IN_TRACKING_AREA - */ - return NAS_CAUSE_TRACKING_AREA_NOT_ALLOWED; - - /* 5004 without error diagnostic */ - case DIAMETER_ERROR_ROAMING_NOT_ALLOWED: - return NAS_CAUSE_PLMN_NOT_ALLOWED; - - /* TODO: 5004 with error diagnostic of ODB_HPLMN_APN or - * ODB_VPLMN_APN - */ - /* TODO: 5004 with error diagnostic of ODB_ALL_APN */ - default: - break; - } - } - - return NAS_CAUSE_NETWORK_FAILURE; -} diff --git a/openair-cn/Makefile.am b/openair-cn/Makefile.am deleted file mode 100644 index 9a829d7c74..0000000000 --- a/openair-cn/Makefile.am +++ /dev/null @@ -1,102 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ACLOCAL_AMFLAGS = -I m4 - -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE - -if HAVE_GCCXML -BUILT_SOURCES = \ - messages.xml \ - messages_xml.h - -messages_hdr = \ - $(top_srcdir)/INTERTASK_INTERFACE/intertask_messages_def.h \ - $(top_srcdir)/INTERTASK_INTERFACE/timer_messages_def.h \ - $(top_srcdir)/INTERTASK_INTERFACE/timer_messages_types.h \ - $(top_srcdir)/COMMON/tasks_def.h \ - $(top_srcdir)/COMMON/messages_def.h \ - $(top_srcdir)/COMMON/messages_types.h \ - $(top_srcdir)/COMMON/gtpv1_u_messages_def.h \ - $(top_srcdir)/COMMON/gtpv1_u_messages_types.h \ - $(top_srcdir)/COMMON/nas_messages_def.h \ - $(top_srcdir)/COMMON/nas_messages_types.h \ - $(top_srcdir)/COMMON/s11_messages_def.h \ - $(top_srcdir)/COMMON/s11_messages_types.h \ - $(top_srcdir)/COMMON/s1ap_messages_def.h \ - $(top_srcdir)/COMMON/s1ap_messages_types.h \ - $(top_srcdir)/COMMON/s6a_messages_def.h \ - $(top_srcdir)/COMMON/s6a_messages_types.h \ - $(top_srcdir)/COMMON/sgw_lite_def.h \ - $(top_srcdir)/COMMON/sgw_lite_messages_types.h \ - $(top_srcdir)/COMMON/sctp_messages_def.h \ - $(top_srcdir)/COMMON/sctp_messages_types.h \ - $(top_srcdir)/COMMON/udp_messages_def.h \ - $(top_srcdir)/COMMON/udp_messages_types.h - -messages.xml: $(top_srcdir)/INTERTASK_INTERFACE/intertask_interface_types.h $(messages_hdr) - @echo "Generating $<" - @gccxml $(AM_CFLAGS) $< -fxml=$(top_builddir)/$@ - -messages_xml.h: messages.xml - @echo "Generating $<" - @sed -e 's/[ ]*//' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' messages.xml > messages_xml.h - -clean-local: - @rm -rf -v messages.xml messages_xml.h -endif - -SUBDIRS = \ - . \ - GTPV1-U \ - GTPV2-C \ - INTERTASK_INTERFACE \ - SGI \ - NAS \ - SCTP \ - S11 \ - S1AP \ - S6A \ - SECU \ - SGW-LITE \ - UTILS \ - UDP \ - MME_APP \ - TEST \ - OAISIM_MME \ - OAI_EPC \ - OAI_SGW \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/API/NETWORK/COPYING b/openair-cn/NAS/COMMON/API/NETWORK/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/COPYING +++ b/openair-cn/NAS/COMMON/API/NETWORK/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/API/NETWORK/Makefile b/openair-cn/NAS/COMMON/API/NETWORK/Makefile index cce6a240ee..03b706bc5d 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/Makefile +++ b/openair-cn/NAS/COMMON/API/NETWORK/Makefile @@ -1,31 +1,3 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ ifndef PROJDIR PROJDIR = $(PWD)/../../.. INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(IESDIR) -I$(EMMMSGDIR) -I$(ESMMSGDIR) diff --git a/openair-cn/NAS/COMMON/API/NETWORK/as_message.c b/openair-cn/NAS/COMMON/API/NETWORK/as_message.c index 5b29016f3a..be850d31af 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/as_message.c +++ b/openair-cn/NAS/COMMON/API/NETWORK/as_message.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source as_message.c diff --git a/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h b/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h index d24d78b503..02e5d87354 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h +++ b/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source as_message.h diff --git a/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c index 611ad6fc3a..a7e5802765 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c +++ b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_message.h diff --git a/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h index f4187b7396..cecd676c93 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h +++ b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_message.h diff --git a/openair-cn/NAS/COMMON/API/NETWORK/network_api.c b/openair-cn/NAS/COMMON/API/NETWORK/network_api.c index 61814c3e11..a057c7e5b0 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/network_api.c +++ b/openair-cn/NAS/COMMON/API/NETWORK/network_api.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source network_api.c diff --git a/openair-cn/NAS/COMMON/API/NETWORK/network_api.h b/openair-cn/NAS/COMMON/API/NETWORK/network_api.h index f9b04371fe..bf531539bd 100644 --- a/openair-cn/NAS/COMMON/API/NETWORK/network_api.h +++ b/openair-cn/NAS/COMMON/API/NETWORK/network_api.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source network_api.h diff --git a/openair-cn/NAS/COMMON/COPYING b/openair-cn/NAS/COMMON/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/COPYING +++ b/openair-cn/NAS/COMMON/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c index 62eab5acb9..3d800d5c19 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h index 2c1fc64bae..760d85ec05 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c index 386694eadf..f36176f16b 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h index 6856d9fd32..f11623ff44 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c index 16621cf25e..eed7199635 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h index 3d12b7fdad..e65fe17325 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c index f301b44a86..fa11d84ed7 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h index f19c53f1ad..26937ad5d6 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c index 979ade2f24..79a12874cf 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h index 8c9b66dd32..978bf31f18 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c index 1d486e070b..1b8643083e 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h index 85111297ee..629b032074 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c index e6f10c9ef6..bba6ea7f3b 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h index 1bfe9f1719..2997836b0f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c index 775932e18f..db508c5786 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h index 2e93301ee7..3442e34064 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/COPYING b/openair-cn/NAS/COMMON/EMM/MSG/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/COPYING +++ b/openair-cn/NAS/COMMON/EMM/MSG/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c index d299fd8d13..08514dfbe1 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h index 6fcb5e0bab..e726802840 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c index 242020c4bf..7b3a79453a 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h index 2966bbad79..a04905aef6 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c index 32b9a8f37f..81675e6fd0 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h index 9577b9a9cd..572466d139 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c index b4a1658c57..a5255e99ea 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h index 4aaf43449b..111958fdf1 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c index c7a041ed7d..2901998eb6 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h index ce87feb4e7..a3f8059561 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c index ec3154728b..274f8d47c0 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h index 6fe769dac6..716d08763a 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c index 85e337bc31..903d92c51f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h index 06d40edc19..d0a9d02e92 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c index e3f7764139..313212c09d 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h index 7e7ffb7636..68a68d6dc6 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c index 8c3b0ed9ff..c7bdda8a0f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h index 977e51709a..63a51cbe2c 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c index 3aafece930..3d785cddf8 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h index 1846253389..97f783addd 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c index bbef1794f7..827b9e64e0 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h index cf58487f94..c6bb0d8f71 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/Makefile b/openair-cn/NAS/COMMON/EMM/MSG/Makefile index 0b434ba8ab..10f3cda68b 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/Makefile +++ b/openair-cn/NAS/COMMON/EMM/MSG/Makefile @@ -1,31 +1,3 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ ifndef PROJDIR PROJDIR = $(PWD)/../../.. endif diff --git a/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h index 96bef59660..66baa17269 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h index 5643e0ef8a..0c4c5400d9 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c index 60946cd4ea..2086d59489 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c index 971f94f05f..e3fbbf3a78 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c index 6347772667..972aad0444 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h index 6dcbeea379..0067104fcd 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c index 21a2d8a2ba..0e2aff4374 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h index acafd9247b..8a5525d00c 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c index 28e22b773d..df51149b88 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h index 7f8f78f95d..999d5d9f37 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c index 267534f18a..0d4aea3f12 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h index 1765f38836..1b07da4c7f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c index 6ef5b1adcb..5facc985f5 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h index 3ebb3fe6fb..bdb7083c35 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c index ebb6ffd376..56bbcdc7e5 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h index 56452a58d4..055ae55ae7 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c index ca614ce1af..53fe541e47 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h index d8ce48027b..b4ee5bcb42 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c index ad1fe82b30..61b85ca2ca 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h index 09f1bd2e00..02a58b104f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h index c5419201d2..231e8bfe86 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source emm_cause.h diff --git a/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c index 979210c615..b727b09a73 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source emm_msg.c diff --git a/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h index bb66c5e68b..db36f45948 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source emm_msg.h diff --git a/openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h index 862204d37e..3e7ba3b50f 100644 --- a/openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Version 0.1 diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c index c377e11680..1e95091471 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h index c8e1275086..90db94714b 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c index 95c6591281..09b9ef66f6 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h index e766ba18fe..30e1e72d62 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c index 750793784d..2c081468b2 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h index cc7d65555a..89ce283302 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c index a4806d58d4..116160b0e1 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h index c678d9b9d2..231a87d117 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c index a8252622c8..ecb40aee2b 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h index 2bfe844c6b..b18cf46a62 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c index 3dec0a429a..56e570903d 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h index 749c64f93d..254087da4e 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c index 9ca43d45f8..ff859d659b 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h index e31a6f6d8a..41073b2aa6 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c index 73968f489b..2ad5018d15 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h index 48a28c5090..8b4ef0fff9 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c index 52fbc55b69..57591de457 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h index 07a9d00e08..e06922fa20 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c index a3b821ee47..b5e623343a 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h index f17a89b348..e209c74bfe 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/COPYING b/openair-cn/NAS/COMMON/ESM/MSG/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/COPYING +++ b/openair-cn/NAS/COMMON/ESM/MSG/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c index 38383ecc07..3d05c2e7d1 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h index 0ef58548f5..23b46c7b2f 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c index 6030a119a3..77038dee23 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h index b85c5710e8..3cfa64a57a 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c index 0f3d22f63f..79e5b3d732 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h index 21bf9bc0ca..d2dad73b46 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c index 1609de75f4..c278784ae2 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h index 186c582e91..3b66dadcc4 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c index 0297b0eecd..7f6be43a9f 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h index 5bbce9e06d..afcf3142af 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/Makefile b/openair-cn/NAS/COMMON/ESM/MSG/Makefile index 8786e88c13..7f8c40a5a0 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/Makefile +++ b/openair-cn/NAS/COMMON/ESM/MSG/Makefile @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + ifndef PROJDIR PROJDIR = $(PWD)/../../.. endif diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c index b7da151edb..b4f6833dfc 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h index e80a7f8dbc..688e0ec814 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c index c3b216bb24..01aaa5575d 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h index 2c023c914b..5c40f44879 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c index 62e7fc8a22..1624e4e3c3 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h index 1c2f24950c..2b21e1b2fd 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c index 6d08e046cc..30fa4242f4 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h index 9712f2118c..3e5ad16c02 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c index 6ff9acab12..6ca5ca94ab 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h index 2a30138f9e..78b227ce37 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c index 0e710bf968..73a095d15d 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h index 3d6508a869..980d0f6d09 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c index 2127384006..7ab48c6c39 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h index 449a088c6a..9ac114df3a 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h index 65063a8dda..e731ec1a8b 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source esm_cause.h diff --git a/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c index 2f5dbc8727..d9f7df6854 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source esm_msg.c diff --git a/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h index 4c93296989..9ed64ea2a5 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source esm_msg.h diff --git a/openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h index 71a76a8f36..2bb0a4e188 100644 --- a/openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h +++ b/openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Version 0.1 diff --git a/openair-cn/NAS/COMMON/IES/AccessPointName.c b/openair-cn/NAS/COMMON/IES/AccessPointName.c index 286b0afd7f..3a40d84a23 100644 --- a/openair-cn/NAS/COMMON/IES/AccessPointName.c +++ b/openair-cn/NAS/COMMON/IES/AccessPointName.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AccessPointName.h b/openair-cn/NAS/COMMON/IES/AccessPointName.h index f121d8833d..a05d6f0d53 100644 --- a/openair-cn/NAS/COMMON/IES/AccessPointName.h +++ b/openair-cn/NAS/COMMON/IES/AccessPointName.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c index d8c306ba43..7a24f4a31e 100644 --- a/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c +++ b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h index 70edbc2634..6c96baaa2a 100644 --- a/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h +++ b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c index f253c43a82..d3e713480e 100644 --- a/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c +++ b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h index dd7bc36643..49fbcc137e 100644 --- a/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h +++ b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c index b92ed3732e..f892f93450 100644 --- a/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c +++ b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h index b7666084d2..e7eb8da33f 100644 --- a/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h +++ b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c index 68b6424307..179808307e 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c +++ b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h index c8384685f1..f2208ef057 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h +++ b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c index f338b11f48..b2b9c72696 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c +++ b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h index f4246ca5da..d75855e45a 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h +++ b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c index ebc44a5d7c..ae402e41c7 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c +++ b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h index 6690aceb5f..b940e8304f 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h +++ b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c index 94dd1c0dd4..b142fed5a6 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c +++ b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h index 9b4c72bfad..0ea7c1af04 100644 --- a/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h +++ b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/COPYING b/openair-cn/NAS/COMMON/IES/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/IES/COPYING +++ b/openair-cn/NAS/COMMON/IES/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c index 16f039627e..c2e395f4fb 100644 --- a/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c +++ b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h index d75b686ab4..d1fd9627f4 100644 --- a/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h +++ b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/Cli.c b/openair-cn/NAS/COMMON/IES/Cli.c index 7a534dee11..e8c662e289 100644 --- a/openair-cn/NAS/COMMON/IES/Cli.c +++ b/openair-cn/NAS/COMMON/IES/Cli.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/Cli.h b/openair-cn/NAS/COMMON/IES/Cli.h index 998289359b..293bdf28a2 100644 --- a/openair-cn/NAS/COMMON/IES/Cli.h +++ b/openair-cn/NAS/COMMON/IES/Cli.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/CsfbResponse.c b/openair-cn/NAS/COMMON/IES/CsfbResponse.c index 84ce13a322..aa0e2478af 100644 --- a/openair-cn/NAS/COMMON/IES/CsfbResponse.c +++ b/openair-cn/NAS/COMMON/IES/CsfbResponse.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/CsfbResponse.h b/openair-cn/NAS/COMMON/IES/CsfbResponse.h index 20172a0be8..b20a50bcb0 100644 --- a/openair-cn/NAS/COMMON/IES/CsfbResponse.h +++ b/openair-cn/NAS/COMMON/IES/CsfbResponse.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DaylightSavingTime.c b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.c index 07791bfc4d..fe10157bb9 100644 --- a/openair-cn/NAS/COMMON/IES/DaylightSavingTime.c +++ b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DaylightSavingTime.h b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.h index c8397132f4..6e676d6e72 100644 --- a/openair-cn/NAS/COMMON/IES/DaylightSavingTime.h +++ b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DetachType.c b/openair-cn/NAS/COMMON/IES/DetachType.c index 7a92ffebca..b27fae53d4 100644 --- a/openair-cn/NAS/COMMON/IES/DetachType.c +++ b/openair-cn/NAS/COMMON/IES/DetachType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DetachType.h b/openair-cn/NAS/COMMON/IES/DetachType.h index 52da84e474..3728aa7702 100644 --- a/openair-cn/NAS/COMMON/IES/DetachType.h +++ b/openair-cn/NAS/COMMON/IES/DetachType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DrxParameter.c b/openair-cn/NAS/COMMON/IES/DrxParameter.c index c9528e1cae..f920ead27f 100644 --- a/openair-cn/NAS/COMMON/IES/DrxParameter.c +++ b/openair-cn/NAS/COMMON/IES/DrxParameter.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/DrxParameter.h b/openair-cn/NAS/COMMON/IES/DrxParameter.h index 49452c1215..d30c0e033a 100644 --- a/openair-cn/NAS/COMMON/IES/DrxParameter.h +++ b/openair-cn/NAS/COMMON/IES/DrxParameter.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EmergencyNumberList.c b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.c index 3939acd6f8..084dbd15fa 100644 --- a/openair-cn/NAS/COMMON/IES/EmergencyNumberList.c +++ b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EmergencyNumberList.h b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.h index 0ac2d8cace..090ce1ec38 100644 --- a/openair-cn/NAS/COMMON/IES/EmergencyNumberList.h +++ b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EmmCause.c b/openair-cn/NAS/COMMON/IES/EmmCause.c index a6734b7122..a89d0d6c30 100644 --- a/openair-cn/NAS/COMMON/IES/EmmCause.c +++ b/openair-cn/NAS/COMMON/IES/EmmCause.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EmmCause.h b/openair-cn/NAS/COMMON/IES/EmmCause.h index 1aa2e7b961..42d9f51904 100644 --- a/openair-cn/NAS/COMMON/IES/EmmCause.h +++ b/openair-cn/NAS/COMMON/IES/EmmCause.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsAttachResult.c b/openair-cn/NAS/COMMON/IES/EpsAttachResult.c index dff7004ff6..6b70585324 100644 --- a/openair-cn/NAS/COMMON/IES/EpsAttachResult.c +++ b/openair-cn/NAS/COMMON/IES/EpsAttachResult.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsAttachResult.h b/openair-cn/NAS/COMMON/IES/EpsAttachResult.h index 56192c7034..1c459ce914 100644 --- a/openair-cn/NAS/COMMON/IES/EpsAttachResult.h +++ b/openair-cn/NAS/COMMON/IES/EpsAttachResult.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsAttachType.c b/openair-cn/NAS/COMMON/IES/EpsAttachType.c index b7946edb0e..8bc691fe55 100644 --- a/openair-cn/NAS/COMMON/IES/EpsAttachType.c +++ b/openair-cn/NAS/COMMON/IES/EpsAttachType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsAttachType.h b/openair-cn/NAS/COMMON/IES/EpsAttachType.h index fd2676b760..268c997db2 100644 --- a/openair-cn/NAS/COMMON/IES/EpsAttachType.h +++ b/openair-cn/NAS/COMMON/IES/EpsAttachType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c index 9ef3a4e8f5..b51cf95b67 100644 --- a/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c +++ b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h index 7c2e1a0403..be1fd2f21c 100644 --- a/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h +++ b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c index 2a49a67d15..f7d405a415 100644 --- a/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c +++ b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h index e9c368ec69..2c6c9868ab 100644 --- a/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h +++ b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c index 4d154a3b66..448858f55c 100644 --- a/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c +++ b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h index 6f2360c56d..105db68a05 100644 --- a/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h +++ b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c index 0063fb5339..162db783d5 100644 --- a/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c +++ b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h index d9e0423aec..cbe1a0d6f1 100644 --- a/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h +++ b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsQualityOfService.c b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.c index ade4ca8ed2..0a467baffe 100644 --- a/openair-cn/NAS/COMMON/IES/EpsQualityOfService.c +++ b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsQualityOfService.h b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.h index e8af0fc4d6..10703399e9 100644 --- a/openair-cn/NAS/COMMON/IES/EpsQualityOfService.h +++ b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsUpdateResult.c b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.c index 5f1822d4ab..8ee25b4aba 100644 --- a/openair-cn/NAS/COMMON/IES/EpsUpdateResult.c +++ b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsUpdateResult.h b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.h index 7d91f83dcb..d3aabc3402 100644 --- a/openair-cn/NAS/COMMON/IES/EpsUpdateResult.h +++ b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsUpdateType.c b/openair-cn/NAS/COMMON/IES/EpsUpdateType.c index 39dd4461d9..571b267dcb 100644 --- a/openair-cn/NAS/COMMON/IES/EpsUpdateType.c +++ b/openair-cn/NAS/COMMON/IES/EpsUpdateType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EpsUpdateType.h b/openair-cn/NAS/COMMON/IES/EpsUpdateType.h index 80bfc2e76b..09578574f6 100644 --- a/openair-cn/NAS/COMMON/IES/EpsUpdateType.h +++ b/openair-cn/NAS/COMMON/IES/EpsUpdateType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmCause.c b/openair-cn/NAS/COMMON/IES/EsmCause.c index e20ece8ee5..8c5436d855 100644 --- a/openair-cn/NAS/COMMON/IES/EsmCause.c +++ b/openair-cn/NAS/COMMON/IES/EsmCause.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmCause.h b/openair-cn/NAS/COMMON/IES/EsmCause.h index 7be75c4a7f..e79c51ac19 100644 --- a/openair-cn/NAS/COMMON/IES/EsmCause.h +++ b/openair-cn/NAS/COMMON/IES/EsmCause.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c index 1c42a93058..b4d69c44f7 100644 --- a/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c +++ b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h index 3a201d7baf..cfaf82a560 100644 --- a/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h +++ b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c index edb4cef9d8..080374e681 100644 --- a/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c +++ b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/EsmMessageContainer.h b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.h index 4d8664ecaf..326a9dd4e5 100644 --- a/openair-cn/NAS/COMMON/IES/EsmMessageContainer.h +++ b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/GprsTimer.c b/openair-cn/NAS/COMMON/IES/GprsTimer.c index 056355d34f..9d8889ec6b 100644 --- a/openair-cn/NAS/COMMON/IES/GprsTimer.c +++ b/openair-cn/NAS/COMMON/IES/GprsTimer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/GprsTimer.h b/openair-cn/NAS/COMMON/IES/GprsTimer.h index 57547842f2..66468b75aa 100644 --- a/openair-cn/NAS/COMMON/IES/GprsTimer.h +++ b/openair-cn/NAS/COMMON/IES/GprsTimer.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/GutiType.c b/openair-cn/NAS/COMMON/IES/GutiType.c index 8edf37dbe7..7391edb53c 100644 --- a/openair-cn/NAS/COMMON/IES/GutiType.c +++ b/openair-cn/NAS/COMMON/IES/GutiType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/GutiType.h b/openair-cn/NAS/COMMON/IES/GutiType.h index 8f96fc75ee..4df547ff06 100644 --- a/openair-cn/NAS/COMMON/IES/GutiType.h +++ b/openair-cn/NAS/COMMON/IES/GutiType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/IdentityType2.c b/openair-cn/NAS/COMMON/IES/IdentityType2.c index ddcfb54c2d..c50a1fc0f7 100644 --- a/openair-cn/NAS/COMMON/IES/IdentityType2.c +++ b/openair-cn/NAS/COMMON/IES/IdentityType2.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/IdentityType2.h b/openair-cn/NAS/COMMON/IES/IdentityType2.h index be342ffe04..9d7e075b7a 100644 --- a/openair-cn/NAS/COMMON/IES/IdentityType2.h +++ b/openair-cn/NAS/COMMON/IES/IdentityType2.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ImeisvRequest.c b/openair-cn/NAS/COMMON/IES/ImeisvRequest.c index c6dfbe5f72..798ce55dce 100644 --- a/openair-cn/NAS/COMMON/IES/ImeisvRequest.c +++ b/openair-cn/NAS/COMMON/IES/ImeisvRequest.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ImeisvRequest.h b/openair-cn/NAS/COMMON/IES/ImeisvRequest.h index 6f8e9f87bf..71c319bc8d 100644 --- a/openair-cn/NAS/COMMON/IES/ImeisvRequest.h +++ b/openair-cn/NAS/COMMON/IES/ImeisvRequest.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c index 4be3a1d729..c552654aa8 100644 --- a/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c +++ b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h index 524309bf89..042f56d1f8 100644 --- a/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h +++ b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LcsClientIdentity.c b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.c index 5c59acb781..9daf2125e1 100644 --- a/openair-cn/NAS/COMMON/IES/LcsClientIdentity.c +++ b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LcsClientIdentity.h b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.h index 690914741e..4f4880956d 100644 --- a/openair-cn/NAS/COMMON/IES/LcsClientIdentity.h +++ b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LcsIndicator.c b/openair-cn/NAS/COMMON/IES/LcsIndicator.c index 371e195da1..224886fae8 100644 --- a/openair-cn/NAS/COMMON/IES/LcsIndicator.c +++ b/openair-cn/NAS/COMMON/IES/LcsIndicator.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LcsIndicator.h b/openair-cn/NAS/COMMON/IES/LcsIndicator.h index d4ad52e11d..341c5f2caf 100644 --- a/openair-cn/NAS/COMMON/IES/LcsIndicator.h +++ b/openair-cn/NAS/COMMON/IES/LcsIndicator.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c index 47a55b50fc..eec53404ef 100644 --- a/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c +++ b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h index 5fa07834f4..393da23e41 100644 --- a/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h +++ b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c index 231676ba9e..e30f4dcdbe 100644 --- a/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c +++ b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h index b699ded1b4..ba6e40c61b 100644 --- a/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h +++ b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c index 43b9868a99..1fc04dc038 100644 --- a/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c +++ b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h index d2b6880779..3c52e94809 100644 --- a/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h +++ b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/Makefile b/openair-cn/NAS/COMMON/IES/Makefile index 8cc286e671..d4a24f657c 100644 --- a/openair-cn/NAS/COMMON/IES/Makefile +++ b/openair-cn/NAS/COMMON/IES/Makefile @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + ifndef PROJDIR PROJDIR = $(PWD)/../.. endif diff --git a/openair-cn/NAS/COMMON/IES/MessageType.c b/openair-cn/NAS/COMMON/IES/MessageType.c index d66bd9b662..17a23ab383 100644 --- a/openair-cn/NAS/COMMON/IES/MessageType.c +++ b/openair-cn/NAS/COMMON/IES/MessageType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MessageType.h b/openair-cn/NAS/COMMON/IES/MessageType.h index 810efb60ca..7dd001ae96 100644 --- a/openair-cn/NAS/COMMON/IES/MessageType.h +++ b/openair-cn/NAS/COMMON/IES/MessageType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileIdentity.c b/openair-cn/NAS/COMMON/IES/MobileIdentity.c index 14d9902142..75c152106a 100644 --- a/openair-cn/NAS/COMMON/IES/MobileIdentity.c +++ b/openair-cn/NAS/COMMON/IES/MobileIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileIdentity.h b/openair-cn/NAS/COMMON/IES/MobileIdentity.h index 206685c7f3..791dfc6f72 100644 --- a/openair-cn/NAS/COMMON/IES/MobileIdentity.h +++ b/openair-cn/NAS/COMMON/IES/MobileIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c index 3e97e164ad..459d716fcb 100644 --- a/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c +++ b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h index d8a9c596a4..06c6250de9 100644 --- a/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h +++ b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c index 84bf06c3c1..d53f054532 100644 --- a/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c +++ b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h index 504678bbdf..25de9191ee 100644 --- a/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h +++ b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MsNetworkCapability.c b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.c index 2fc8a72c87..bda91e876a 100644 --- a/openair-cn/NAS/COMMON/IES/MsNetworkCapability.c +++ b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MsNetworkCapability.h b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.h index 7f6d1699da..e940d91218 100644 --- a/openair-cn/NAS/COMMON/IES/MsNetworkCapability.h +++ b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c index e05968c2d5..d8efa5312b 100644 --- a/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c +++ b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h index 334430de1a..0210e787a7 100644 --- a/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h +++ b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c index 2ab41a17e8..1f1e2bd726 100644 --- a/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c +++ b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h index f2a09c6864..46af36c5b5 100644 --- a/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h +++ b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasMessageContainer.c b/openair-cn/NAS/COMMON/IES/NasMessageContainer.c index 248d14c890..2f295b0cc1 100644 --- a/openair-cn/NAS/COMMON/IES/NasMessageContainer.c +++ b/openair-cn/NAS/COMMON/IES/NasMessageContainer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasMessageContainer.h b/openair-cn/NAS/COMMON/IES/NasMessageContainer.h index 35d3d4d58d..a16684a088 100644 --- a/openair-cn/NAS/COMMON/IES/NasMessageContainer.h +++ b/openair-cn/NAS/COMMON/IES/NasMessageContainer.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasRequestType.c b/openair-cn/NAS/COMMON/IES/NasRequestType.c index d2afc7f0f8..9cbbbdb7f7 100644 --- a/openair-cn/NAS/COMMON/IES/NasRequestType.c +++ b/openair-cn/NAS/COMMON/IES/NasRequestType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasRequestType.h b/openair-cn/NAS/COMMON/IES/NasRequestType.h index 42d2627799..c6e28298d6 100644 --- a/openair-cn/NAS/COMMON/IES/NasRequestType.h +++ b/openair-cn/NAS/COMMON/IES/NasRequestType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c index b1713b74f9..cafb734811 100644 --- a/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c +++ b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h index 8125e0adf8..f74b2c39ab 100644 --- a/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h +++ b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NetworkName.c b/openair-cn/NAS/COMMON/IES/NetworkName.c index 284b451ce5..521e421c8d 100644 --- a/openair-cn/NAS/COMMON/IES/NetworkName.c +++ b/openair-cn/NAS/COMMON/IES/NetworkName.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/NetworkName.h b/openair-cn/NAS/COMMON/IES/NetworkName.h index d627605f61..c2a8850bc3 100644 --- a/openair-cn/NAS/COMMON/IES/NetworkName.h +++ b/openair-cn/NAS/COMMON/IES/NetworkName.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/Nonce.c b/openair-cn/NAS/COMMON/IES/Nonce.c index a274c2b8d9..438d117fd7 100644 --- a/openair-cn/NAS/COMMON/IES/Nonce.c +++ b/openair-cn/NAS/COMMON/IES/Nonce.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/Nonce.h b/openair-cn/NAS/COMMON/IES/Nonce.h index b37b35a7f3..7956177494 100644 --- a/openair-cn/NAS/COMMON/IES/Nonce.h +++ b/openair-cn/NAS/COMMON/IES/Nonce.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PTmsiSignature.c b/openair-cn/NAS/COMMON/IES/PTmsiSignature.c index 21738a02db..3ed25f994a 100644 --- a/openair-cn/NAS/COMMON/IES/PTmsiSignature.c +++ b/openair-cn/NAS/COMMON/IES/PTmsiSignature.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PTmsiSignature.h b/openair-cn/NAS/COMMON/IES/PTmsiSignature.h index 9f063dd461..e51bcc41a9 100644 --- a/openair-cn/NAS/COMMON/IES/PTmsiSignature.h +++ b/openair-cn/NAS/COMMON/IES/PTmsiSignature.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c index 2e694ae8b0..a108760cfa 100644 --- a/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c +++ b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h index 26c0e6467c..24f5dc9a97 100644 --- a/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h +++ b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PagingIdentity.c b/openair-cn/NAS/COMMON/IES/PagingIdentity.c index 2c5a05a45a..9b0c72b7af 100644 --- a/openair-cn/NAS/COMMON/IES/PagingIdentity.c +++ b/openair-cn/NAS/COMMON/IES/PagingIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PagingIdentity.h b/openair-cn/NAS/COMMON/IES/PagingIdentity.h index a817ae116f..60f93caebd 100644 --- a/openair-cn/NAS/COMMON/IES/PagingIdentity.h +++ b/openair-cn/NAS/COMMON/IES/PagingIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PdnAddress.c b/openair-cn/NAS/COMMON/IES/PdnAddress.c index c95cb1528f..12dee958f5 100644 --- a/openair-cn/NAS/COMMON/IES/PdnAddress.c +++ b/openair-cn/NAS/COMMON/IES/PdnAddress.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PdnAddress.h b/openair-cn/NAS/COMMON/IES/PdnAddress.h index 5b923b2310..22a7dd282c 100644 --- a/openair-cn/NAS/COMMON/IES/PdnAddress.h +++ b/openair-cn/NAS/COMMON/IES/PdnAddress.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PdnType.c b/openair-cn/NAS/COMMON/IES/PdnType.c index e4a39d1f1c..0dc20ba6e1 100644 --- a/openair-cn/NAS/COMMON/IES/PdnType.c +++ b/openair-cn/NAS/COMMON/IES/PdnType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PdnType.h b/openair-cn/NAS/COMMON/IES/PdnType.h index c3a3ac9133..13c97a6602 100644 --- a/openair-cn/NAS/COMMON/IES/PdnType.h +++ b/openair-cn/NAS/COMMON/IES/PdnType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PlmnList.c b/openair-cn/NAS/COMMON/IES/PlmnList.c index 226a26c661..2e84bdb74a 100644 --- a/openair-cn/NAS/COMMON/IES/PlmnList.c +++ b/openair-cn/NAS/COMMON/IES/PlmnList.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/PlmnList.h b/openair-cn/NAS/COMMON/IES/PlmnList.h index 7c2247381f..485e88a6a2 100644 --- a/openair-cn/NAS/COMMON/IES/PlmnList.h +++ b/openair-cn/NAS/COMMON/IES/PlmnList.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c index 92a0f3e502..522307467e 100644 --- a/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c +++ b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h index 28eabb6a15..2bc3f098d9 100644 --- a/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h +++ b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c index dc17201da0..15f20ef195 100644 --- a/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c +++ b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h index bd59d2c4ac..8110cb96bc 100644 --- a/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h +++ b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c index b87ddb490a..a58ae57faa 100644 --- a/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c +++ b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h index 3945556a74..04c04e801f 100644 --- a/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h +++ b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/QualityOfService.c b/openair-cn/NAS/COMMON/IES/QualityOfService.c index 2d5ea1c5ea..27d4a78e55 100644 --- a/openair-cn/NAS/COMMON/IES/QualityOfService.c +++ b/openair-cn/NAS/COMMON/IES/QualityOfService.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/QualityOfService.h b/openair-cn/NAS/COMMON/IES/QualityOfService.h index 193eb6c4e2..6ce363aacc 100644 --- a/openair-cn/NAS/COMMON/IES/QualityOfService.h +++ b/openair-cn/NAS/COMMON/IES/QualityOfService.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/RadioPriority.c b/openair-cn/NAS/COMMON/IES/RadioPriority.c index 1350cb0ba1..8e1183eb7b 100644 --- a/openair-cn/NAS/COMMON/IES/RadioPriority.c +++ b/openair-cn/NAS/COMMON/IES/RadioPriority.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/RadioPriority.h b/openair-cn/NAS/COMMON/IES/RadioPriority.h index e079247598..629a624eec 100644 --- a/openair-cn/NAS/COMMON/IES/RadioPriority.h +++ b/openair-cn/NAS/COMMON/IES/RadioPriority.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SecurityHeaderType.c b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.c index 5d80c562f3..89facd28c1 100644 --- a/openair-cn/NAS/COMMON/IES/SecurityHeaderType.c +++ b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SecurityHeaderType.h b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.h index 0447e857db..d83ec1e17a 100644 --- a/openair-cn/NAS/COMMON/IES/SecurityHeaderType.h +++ b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ServiceType.c b/openair-cn/NAS/COMMON/IES/ServiceType.c index bab2e96bb0..3f35abbfaa 100644 --- a/openair-cn/NAS/COMMON/IES/ServiceType.c +++ b/openair-cn/NAS/COMMON/IES/ServiceType.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ServiceType.h b/openair-cn/NAS/COMMON/IES/ServiceType.h index 44e9084140..c3aedebc0c 100644 --- a/openair-cn/NAS/COMMON/IES/ServiceType.h +++ b/openair-cn/NAS/COMMON/IES/ServiceType.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ShortMac.c b/openair-cn/NAS/COMMON/IES/ShortMac.c index 9cebc07ca8..d481b1bba7 100644 --- a/openair-cn/NAS/COMMON/IES/ShortMac.c +++ b/openair-cn/NAS/COMMON/IES/ShortMac.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/ShortMac.h b/openair-cn/NAS/COMMON/IES/ShortMac.h index b6152bd027..896f9e42da 100644 --- a/openair-cn/NAS/COMMON/IES/ShortMac.h +++ b/openair-cn/NAS/COMMON/IES/ShortMac.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SsCode.c b/openair-cn/NAS/COMMON/IES/SsCode.c index 256a67e0fc..e0566c9f15 100644 --- a/openair-cn/NAS/COMMON/IES/SsCode.c +++ b/openair-cn/NAS/COMMON/IES/SsCode.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SsCode.h b/openair-cn/NAS/COMMON/IES/SsCode.h index f53e5e2dc0..68017184ce 100644 --- a/openair-cn/NAS/COMMON/IES/SsCode.h +++ b/openair-cn/NAS/COMMON/IES/SsCode.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SupportedCodecList.c b/openair-cn/NAS/COMMON/IES/SupportedCodecList.c index 284ee27dc9..375d2255a4 100644 --- a/openair-cn/NAS/COMMON/IES/SupportedCodecList.c +++ b/openair-cn/NAS/COMMON/IES/SupportedCodecList.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/SupportedCodecList.h b/openair-cn/NAS/COMMON/IES/SupportedCodecList.h index a9be6640ff..83396b62d4 100644 --- a/openair-cn/NAS/COMMON/IES/SupportedCodecList.h +++ b/openair-cn/NAS/COMMON/IES/SupportedCodecList.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TimeZone.c b/openair-cn/NAS/COMMON/IES/TimeZone.c index 332abb54bc..39fe50c307 100644 --- a/openair-cn/NAS/COMMON/IES/TimeZone.c +++ b/openair-cn/NAS/COMMON/IES/TimeZone.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TimeZone.h b/openair-cn/NAS/COMMON/IES/TimeZone.h index 812477be4d..bfa2d38996 100644 --- a/openair-cn/NAS/COMMON/IES/TimeZone.h +++ b/openair-cn/NAS/COMMON/IES/TimeZone.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c index dacfb22896..08a8bcdf70 100644 --- a/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c +++ b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h index 4665b84316..27c763cf88 100644 --- a/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h +++ b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TmsiStatus.c b/openair-cn/NAS/COMMON/IES/TmsiStatus.c index 7d21e5f758..1ebbf5beaf 100644 --- a/openair-cn/NAS/COMMON/IES/TmsiStatus.c +++ b/openair-cn/NAS/COMMON/IES/TmsiStatus.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TmsiStatus.h b/openair-cn/NAS/COMMON/IES/TmsiStatus.h index c6c7e87a7d..6387ca7cec 100644 --- a/openair-cn/NAS/COMMON/IES/TmsiStatus.h +++ b/openair-cn/NAS/COMMON/IES/TmsiStatus.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c index dd50d9566f..14b08e7e24 100644 --- a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c +++ b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h index eb3826cab1..7249d3c5c1 100644 --- a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h +++ b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c index eb0e30d01c..eae44e8e58 100644 --- a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c +++ b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h index a849fd04b0..345aacf438 100644 --- a/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h +++ b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c index cb6aaff14f..b2ea6a83b9 100644 --- a/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c +++ b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h index cda9369666..3058873621 100644 --- a/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h +++ b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c index 931e2326aa..e18ffc92c5 100644 --- a/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c +++ b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h index 5c01c228aa..40f9c6b4a6 100644 --- a/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h +++ b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TransactionIdentifier.c b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.c index c3afd42950..c48ae31a63 100644 --- a/openair-cn/NAS/COMMON/IES/TransactionIdentifier.c +++ b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/TransactionIdentifier.h b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.h index 153432e3b7..061db1c654 100644 --- a/openair-cn/NAS/COMMON/IES/TransactionIdentifier.h +++ b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeNetworkCapability.c b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.c index 839acc080b..41393e7689 100644 --- a/openair-cn/NAS/COMMON/IES/UeNetworkCapability.c +++ b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeNetworkCapability.h b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.h index a385fefea9..56451159a5 100644 --- a/openair-cn/NAS/COMMON/IES/UeNetworkCapability.h +++ b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c index 08020581e4..36d612bf6f 100644 --- a/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c +++ b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h index 0876f663da..853ecea045 100644 --- a/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h +++ b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeSecurityCapability.c b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.c index 5c4610ccde..ecc55ae5ff 100644 --- a/openair-cn/NAS/COMMON/IES/UeSecurityCapability.c +++ b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/UeSecurityCapability.h b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.h index 9009937cf4..dede6af9f8 100644 --- a/openair-cn/NAS/COMMON/IES/UeSecurityCapability.h +++ b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c index 38a8cf10a6..0c84ba0a8e 100644 --- a/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c +++ b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h index 221620fa6a..13a8b668ec 100644 --- a/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h +++ b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/UTIL/COPYING b/openair-cn/NAS/COMMON/UTIL/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/NAS/COMMON/UTIL/COPYING +++ b/openair-cn/NAS/COMMON/UTIL/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/UTIL/Makefile b/openair-cn/NAS/COMMON/UTIL/Makefile index 799bb8599a..b0977b8112 100644 --- a/openair-cn/NAS/COMMON/UTIL/Makefile +++ b/openair-cn/NAS/COMMON/UTIL/Makefile @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + ifndef PROJDIR PROJDIR = $(PWD)/../.. endif diff --git a/openair-cn/NAS/COMMON/UTIL/OctetString.c b/openair-cn/NAS/COMMON/UTIL/OctetString.c index fd16e27014..4a429d84a7 100644 --- a/openair-cn/NAS/COMMON/UTIL/OctetString.c +++ b/openair-cn/NAS/COMMON/UTIL/OctetString.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/UTIL/OctetString.h b/openair-cn/NAS/COMMON/UTIL/OctetString.h index 15cd8f6823..b3ea818cc8 100644 --- a/openair-cn/NAS/COMMON/UTIL/OctetString.h +++ b/openair-cn/NAS/COMMON/UTIL/OctetString.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/openair-cn/NAS/COMMON/UTIL/TLVDecoder.c b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.c index 744a00d99c..c1ce58ea00 100644 --- a/openair-cn/NAS/COMMON/UTIL/TLVDecoder.c +++ b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h index 152fd9c737..99e1b9d90f 100644 --- a/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h +++ b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef TLV_DECODER_H_ #define TLV_DECODER_H_ diff --git a/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c index 39a5d94761..0ad394e97a 100644 --- a/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c +++ b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h index 287635e9be..2917594618 100644 --- a/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h +++ b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef TLV_ENCODER_H_ #define TLV_ENCODER_H_ diff --git a/openair-cn/NAS/COMMON/UTIL/device.c b/openair-cn/NAS/COMMON/UTIL/device.c index d6ab908a6c..375ffe0846 100644 --- a/openair-cn/NAS/COMMON/UTIL/device.c +++ b/openair-cn/NAS/COMMON/UTIL/device.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source device.c diff --git a/openair-cn/NAS/COMMON/UTIL/device.h b/openair-cn/NAS/COMMON/UTIL/device.h index b67a2cdbc3..ded1aca095 100644 --- a/openair-cn/NAS/COMMON/UTIL/device.h +++ b/openair-cn/NAS/COMMON/UTIL/device.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source device.h diff --git a/openair-cn/NAS/COMMON/UTIL/memory.c b/openair-cn/NAS/COMMON/UTIL/memory.c index 739509c228..18c7f8b1af 100644 --- a/openair-cn/NAS/COMMON/UTIL/memory.c +++ b/openair-cn/NAS/COMMON/UTIL/memory.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source memory.c diff --git a/openair-cn/NAS/COMMON/UTIL/memory.h b/openair-cn/NAS/COMMON/UTIL/memory.h index 5d7734fc47..0314630f0c 100644 --- a/openair-cn/NAS/COMMON/UTIL/memory.h +++ b/openair-cn/NAS/COMMON/UTIL/memory.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source memory.h diff --git a/openair-cn/NAS/COMMON/UTIL/nas_log.c b/openair-cn/NAS/COMMON/UTIL/nas_log.c index a781d25971..f0d6a24ffe 100644 --- a/openair-cn/NAS/COMMON/UTIL/nas_log.c +++ b/openair-cn/NAS/COMMON/UTIL/nas_log.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_log.c diff --git a/openair-cn/NAS/COMMON/UTIL/nas_log.h b/openair-cn/NAS/COMMON/UTIL/nas_log.h index b947e33563..c17efb3383 100644 --- a/openair-cn/NAS/COMMON/UTIL/nas_log.h +++ b/openair-cn/NAS/COMMON/UTIL/nas_log.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_log.h diff --git a/openair-cn/NAS/COMMON/UTIL/nas_timer.c b/openair-cn/NAS/COMMON/UTIL/nas_timer.c index d7c1eb9f0e..5dc6923140 100644 --- a/openair-cn/NAS/COMMON/UTIL/nas_timer.c +++ b/openair-cn/NAS/COMMON/UTIL/nas_timer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_timer.c diff --git a/openair-cn/NAS/COMMON/UTIL/nas_timer.h b/openair-cn/NAS/COMMON/UTIL/nas_timer.h index 891eeab5e7..0b65da4159 100644 --- a/openair-cn/NAS/COMMON/UTIL/nas_timer.h +++ b/openair-cn/NAS/COMMON/UTIL/nas_timer.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source nas_timer.h diff --git a/openair-cn/NAS/COMMON/UTIL/parser.c b/openair-cn/NAS/COMMON/UTIL/parser.c index cb69a63703..5f8350ea58 100644 --- a/openair-cn/NAS/COMMON/UTIL/parser.c +++ b/openair-cn/NAS/COMMON/UTIL/parser.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source parser.c diff --git a/openair-cn/NAS/COMMON/UTIL/parser.h b/openair-cn/NAS/COMMON/UTIL/parser.h index 0fe247015f..fc8a9ad126 100644 --- a/openair-cn/NAS/COMMON/UTIL/parser.h +++ b/openair-cn/NAS/COMMON/UTIL/parser.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source parser.h diff --git a/openair-cn/NAS/COMMON/UTIL/socket.c b/openair-cn/NAS/COMMON/UTIL/socket.c index f7793204f2..b76506109b 100644 --- a/openair-cn/NAS/COMMON/UTIL/socket.c +++ b/openair-cn/NAS/COMMON/UTIL/socket.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source socket.c diff --git a/openair-cn/NAS/COMMON/UTIL/socket.h b/openair-cn/NAS/COMMON/UTIL/socket.h index 1bf885d962..4be749d3cc 100644 --- a/openair-cn/NAS/COMMON/UTIL/socket.h +++ b/openair-cn/NAS/COMMON/UTIL/socket.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source socket.h diff --git a/openair-cn/NAS/COMMON/UTIL/stty.c b/openair-cn/NAS/COMMON/UTIL/stty.c index 67819a8e46..1fb72e9204 100644 --- a/openair-cn/NAS/COMMON/UTIL/stty.c +++ b/openair-cn/NAS/COMMON/UTIL/stty.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source stty.c diff --git a/openair-cn/NAS/COMMON/UTIL/tst/Makefile b/openair-cn/NAS/COMMON/UTIL/tst/Makefile index ab0d17c982..efaaff22fa 100644 --- a/openair-cn/NAS/COMMON/UTIL/tst/Makefile +++ b/openair-cn/NAS/COMMON/UTIL/tst/Makefile @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + ifndef PROJDIR PROJDIR = $(PWD)/../../.. endif diff --git a/openair-cn/NAS/COMMON/UTIL/tst/timer.c b/openair-cn/NAS/COMMON/UTIL/tst/timer.c index 458a94861d..7b963fba30 100644 --- a/openair-cn/NAS/COMMON/UTIL/tst/timer.c +++ b/openair-cn/NAS/COMMON/UTIL/tst/timer.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source timer.c diff --git a/openair-cn/NAS/COMMON/securityDef.h b/openair-cn/NAS/COMMON/securityDef.h index 88325f0aaf..c418de2c60 100644 --- a/openair-cn/NAS/COMMON/securityDef.h +++ b/openair-cn/NAS/COMMON/securityDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source securityDef.h diff --git a/openair-cn/NAS/COMMON/userDef.h b/openair-cn/NAS/COMMON/userDef.h index b99e263382..f6398794fe 100644 --- a/openair-cn/NAS/COMMON/userDef.h +++ b/openair-cn/NAS/COMMON/userDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source userDef.h diff --git a/openair-cn/NAS/MME/API/MME/COPYING b/openair-cn/NAS/MME/API/MME/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/MME/API/MME/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/MME/API/MME/Makefile b/openair-cn/NAS/MME/API/MME/Makefile deleted file mode 100644 index 7c92861153..0000000000 --- a/openair-cn/NAS/MME/API/MME/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/../../.. -INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -all: $(OBJS) - -%.o: %.c Makefile - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -clean: - $(RM) $(OBJS) *.bak *~ - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/openair-cn/NAS/MME/API/MME/mme_api.c b/openair-cn/NAS/MME/API/MME/mme_api.c deleted file mode 100644 index 91b688558c..0000000000 --- a/openair-cn/NAS/MME/API/MME/mme_api.c +++ /dev/null @@ -1,569 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source mme_api.c - -Version 0.1 - -Date 2013/02/28 - -Product NAS stack - -Subsystem Application Programming Interface - -Author Frederic Maurel - -Description Implements the API used by the NAS layer running in the MME - to interact with a Mobility Management Entity - -*****************************************************************************/ - - -#include "mme_api.h" -#include "nas_log.h" -#include "assertions.h" - -#include // memcpy - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* Maximum number of PDN connections the MME may simultaneously support */ -#define MME_API_PDN_MAX 10 - -/* MME group identifier */ -#define MME_API_MME_GID 0x0102 - -/* MME code */ -#define MME_API_MME_CODE 0x12 - -/* Default APN */ -static const OctetString mme_api_default_apn = { - /* LW: apn seems to be coded using a one byte size field before each part of the name */ -#if 1 - 15, (uint8_t *)("\x0e" "www.eurecom.fr") -#else - 35, (uint8_t *)("\x08" "internet" - "\x02" "v4" - "\x03" "pft" - "\x06" "mnc092" - "\x06" "mcc208" - "\x04" "gprs") -#endif -}; - -/* APN configured for emergency bearer services */ -static const OctetString mme_api_emergency_apn = { - 19, (uint8_t *)("\x12" "www.eurecom_sos.fr") -}; - -/* Public Land Mobile Network identifier */ -static const plmn_t mme_api_plmn = {0, 2, 0xf, 8, 0, 1}; // 20810 - -/* Number of concecutive tracking areas */ -#define MME_API_NB_TACS 4 -/* Code of the first tracking area belonging to the PLMN */ -#define MME_API_FIRST_TAC 0x0001 - - -/* Authentication parameter RAND */ -static const uint8_t _mme_api_rand[AUTH_RAND_SIZE] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x02, 0x03, 0x04 -}; - -/* Authentication parameter AUTN */ -static const uint8_t _mme_api_autn[AUTH_AUTN_SIZE] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x04, 0x03, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - -/* Authentication response parameter */ -static const uint8_t _mme_api_xres[AUTH_XRES_SIZE] = { - 0x67, 0x70, 0x3a, 0x31, 0xf2, 0x2a, 0x2d, 0x51, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - -static mme_api_ip_version_t _mme_api_ip_capability = MME_API_IPV4V6_ADDR; - -/* Pool of IPv4 addresses */ -static uint8_t _mme_api_ipv4_addr[MME_API_PDN_MAX][4] = { - {0xC0, 0xA8, 0x02, 0x3C}, /* 192.168.02.60 */ - {0xC0, 0xA8, 0x0C, 0xBB}, /* 192.168.12.187 */ - {0xC0, 0xA8, 0x0C, 0xBC}, /* 192.168.12.188 */ - {0xC0, 0xA8, 0x0C, 0xBD}, /* 192.168.12.189 */ - {0xC0, 0xA8, 0x0C, 0xBE}, /* 192.168.12.190 */ - {0xC0, 0xA8, 0x0C, 0xBF}, /* 192.168.12.191 */ - {0xC0, 0xA8, 0x0C, 0xC0}, /* 192.168.12.192 */ - {0xC0, 0xA8, 0x0C, 0xC1}, /* 192.168.12.193 */ - {0xC0, 0xA8, 0x0C, 0xC2}, /* 192.168.12.194 */ - {0xC0, 0xA8, 0x0C, 0xC3}, /* 192.168.12.195 */ -}; -/* Pool of IPv6 addresses */ -static uint8_t _mme_api_ipv6_addr[MME_API_PDN_MAX][8] = { - /* FE80::221:70FF:C0A8:023C/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x02, 0x3C}, - /* FE80::221:70FF:C0A8:0CBB/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBB}, - /* FE80::221:70FF:C0A8:0CBC/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBC}, - /* FE80::221:70FF:C0A8:0CBD/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBD}, - /* FE80::221:70FF:C0A8:0CBE/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBE}, - /* FE80::221:70FF:C0A8:0CBF/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBF}, - /* FE80::221:70FF:C0A8:0CC0/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC0}, - /* FE80::221:70FF:C0A8:0CC1/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC1}, - /* FE80::221:70FF:C0A8:0CC2/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC2}, - /* FE80::221:70FF:C0A8:0CC3/64 */ - {0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC3}, -}; -/* Pool of IPv4v6 addresses */ -static uint8_t _mme_api_ipv4v6_addr[MME_API_PDN_MAX][12] = { - /* 192.168.02.60, FE80::221:70FF:C0A8:023C/64 */ - {0xC0, 0xA8, 0x02, 0x3C, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x02, 0x3C}, - /* 192.168.12.187, FE80::221:70FF:C0A8:0CBB/64 */ - {0xC0, 0xA8, 0x0C, 0xBB, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBB}, - /* 192.168.12.188, FE80::221:70FF:C0A8:0CBC/64 */ - {0xC0, 0xA8, 0x0C, 0xBC, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBC}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CBD/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBD}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CBE/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBE}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CBF/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xBF}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CC0/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC0}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CC1/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC1}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CC2/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC2}, - /* 192.168.12.189, FE80::221:70FF:C0A8:0CC3/64 */ - {0xC0, 0xA8, 0x0C, 0xBD, 0x02, 0x21, 0x70, 0xFF, 0xC0, 0xA8, 0x0C, 0xC3}, -}; -static const OctetString _mme_api_pdn_addr[MME_API_ADDR_MAX][MME_API_PDN_MAX] = { - { /* IPv4 network capability */ - {4, _mme_api_ipv4_addr[0]}, - {4, _mme_api_ipv4_addr[1]}, - {4, _mme_api_ipv4_addr[2]}, - {4, _mme_api_ipv4_addr[3]}, - {4, _mme_api_ipv4_addr[4]}, - {4, _mme_api_ipv4_addr[5]}, - {4, _mme_api_ipv4_addr[6]}, - {4, _mme_api_ipv4_addr[7]}, - {4, _mme_api_ipv4_addr[8]}, - {4, _mme_api_ipv4_addr[9]}, - }, - { /* IPv6 network capability */ - {8, _mme_api_ipv6_addr[0]}, - {8, _mme_api_ipv6_addr[1]}, - {8, _mme_api_ipv6_addr[2]}, - {8, _mme_api_ipv6_addr[3]}, - {8, _mme_api_ipv6_addr[4]}, - {8, _mme_api_ipv6_addr[5]}, - {8, _mme_api_ipv6_addr[6]}, - {8, _mme_api_ipv6_addr[7]}, - {8, _mme_api_ipv6_addr[8]}, - {8, _mme_api_ipv6_addr[9]}, - }, - { /* IPv4v6 network capability */ - {12, _mme_api_ipv4v6_addr[0]}, - {12, _mme_api_ipv4v6_addr[1]}, - {12, _mme_api_ipv4v6_addr[2]}, - {12, _mme_api_ipv4v6_addr[3]}, - {12, _mme_api_ipv4v6_addr[4]}, - {12, _mme_api_ipv4v6_addr[5]}, - {12, _mme_api_ipv4v6_addr[6]}, - {12, _mme_api_ipv4v6_addr[7]}, - {12, _mme_api_ipv4v6_addr[8]}, - {12, _mme_api_ipv4v6_addr[9]}, - }, -}; - -/* Subscribed QCI */ -#define MME_API_QCI 3 - -/* Data bit rates */ -#define MME_API_BIT_RATE_64K 0x40 -#define MME_API_BIT_RATE_128K 0x48 -#define MME_API_BIT_RATE_512K 0x78 -#define MME_API_BIT_RATE_1024K 0x87 - -/* Total number of PDN connections (should not exceed MME_API_PDN_MAX) */ -static int _mme_api_pdn_id = 0; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: mme_api_get_emm_config() ** - ** ** - ** Description: Retreives MME configuration data related to EPS mobility ** - ** management ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) -int mme_api_get_emm_config(mme_api_emm_config_t *config, - mme_config_t *mme_config_p) -#else -int mme_api_get_emm_config(mme_api_emm_config_t *config) -#endif -{ -#if defined(NAS_BUILT_IN_EPC) - int i; -#endif - LOG_FUNC_IN; - AssertFatal(mme_config_p->gummei.nb_plmns >= 1, "No PLMN configured"); - AssertFatal(mme_config_p->gummei.nb_mmec >= 1, "No MME Code configured"); - AssertFatal(mme_config_p->gummei.nb_mme_gid >= 1, "No MME Group ID configured"); - - config->gummei.plmn.MCCdigit1 = (mme_config_p->gummei.plmn_mcc[0]/100)%10; - config->gummei.plmn.MCCdigit2 = (mme_config_p->gummei.plmn_mcc[0]/10)%10; - config->gummei.plmn.MCCdigit3 = mme_config_p->gummei.plmn_mcc[0]%10; - - if (mme_config_p->gummei.plmn_mnc_len[0] == 2) { - config->gummei.plmn.MNCdigit1 = (mme_config_p->gummei.plmn_mnc[0]/10)%10; - config->gummei.plmn.MNCdigit2 = mme_config_p->gummei.plmn_mnc[0]%10; - config->gummei.plmn.MNCdigit3 = 0xf; - } else if (mme_config_p->gummei.plmn_mnc_len[0] == 3) { - config->gummei.plmn.MNCdigit1 = (mme_config_p->gummei.plmn_mnc[0]/100)%10; - config->gummei.plmn.MNCdigit2 = (mme_config_p->gummei.plmn_mnc[0]/10)%10; - config->gummei.plmn.MNCdigit3 = mme_config_p->gummei.plmn_mnc[0]%10; - } else { - AssertFatal((mme_config_p->gummei.plmn_mnc_len[0] >= 2) && - (mme_config_p->gummei.plmn_mnc_len[0] <= 3), "BAD MNC length for GUMMEI"); - } - - config->gummei.MMEgid = mme_config_p->gummei.mme_gid[0]; - config->gummei.MMEcode = mme_config_p->gummei.mmec[0]; -#if defined(NAS_BUILT_IN_EPC) - - /* SR: this config param comes from MME global config */ - if (mme_config_p->emergency_attach_supported != 0) { - config->features |= MME_API_EMERGENCY_ATTACH; - } - - if (mme_config_p->unauthenticated_imsi_supported != 0) { - config->features |= MME_API_UNAUTHENTICATED_IMSI; - } - - for (i = 0 ; i < 8; i++) { - config->prefered_integrity_algorithm[i] = mme_config_p->nas_config.prefered_integrity_algorithm[i]; - config->prefered_ciphering_algorithm[i] = mme_config_p->nas_config.prefered_ciphering_algorithm[i]; - } - -#else - config->features = MME_API_EMERGENCY_ATTACH | MME_API_UNAUTHENTICATED_IMSI; -#endif - - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_get_config() ** - ** ** - ** Description: Retreives MME configuration data related to EPS session ** - ** management ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_get_esm_config(mme_api_esm_config_t *config) -{ - LOG_FUNC_IN; - - if (_mme_api_ip_capability == MME_API_IPV4_ADDR) { - config->features = MME_API_IPV4; - } else if (_mme_api_ip_capability == MME_API_IPV6_ADDR) { - config->features = MME_API_IPV6; - } else if (_mme_api_ip_capability == MME_API_IPV4V6_ADDR) { - config->features = MME_API_IPV4 | MME_API_IPV6; - } else { - config->features = 0; - } - - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_identify_guti() ** - ** ** - ** Description: Requests the MME to identify the UE using the specified ** - ** GUTI. If the UE is known by the MME (a Mobility Manage- ** - ** ment context exists for this UE in the MME), its se- ** - ** curity context is returned. ** - ** ** - ** Inputs: guti: EPS Globally Unique Temporary UE Identity ** - ** Others: None ** - ** ** - ** Outputs: vector: The EPS authentication vector of the UE if ** - ** known by the network; NULL otherwise. ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_identify_guti(const GUTI_t *guti, auth_vector_t *vector) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_identify_imsi() ** - ** ** - ** Description: Requests the MME to identify the UE using the specified ** - ** IMSI. If the UE is known by the MME (a Mobility Manage- ** - ** ment context exists for this UE in the MME), its se- ** - ** curity context is returned. ** - ** ** - ** Inputs: imsi: International Mobile Subscriber Identity ** - ** Others: None ** - ** ** - ** Outputs: vector: The EPS authentication vector of the UE if ** - ** known by the network; NULL otherwise. ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_identify_imsi(const imsi_t *imsi, auth_vector_t *vector) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - AssertFatal(0, "Hardcoded values"); - - memcpy(vector->rand, _mme_api_rand, AUTH_RAND_SIZE); - memcpy(vector->autn, _mme_api_autn, AUTH_AUTN_SIZE); - memcpy(vector->xres, _mme_api_xres, AUTH_XRES_SIZE); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_identify_imei() ** - ** ** - ** Description: Requests the MME to identify the UE using the specified ** - ** IMEI. If the UE is known by the MME (a Mobility Manage- ** - ** ment context exists for this UE in the MME), its se- ** - ** curity context is returned. ** - ** ** - ** Inputs: imei: International Mobile Equipment Identity ** - ** Others: None ** - ** ** - ** Outputs: vector: The EPS authentication vector of the UE if ** - ** known by the network; NULL otherwise. ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_identify_imei(const imei_t *imei, auth_vector_t *vector) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_new_guti() ** - ** ** - ** Description: Requests the MME to assign a new GUTI to the UE identi- ** - ** fied by the given IMSI. ** - ** ** - ** Description: Requests the MME to assign a new GUTI to the UE identi- ** - ** fied by the given IMSI and returns the list of consecu- ** - ** tive tracking areas the UE is registered to. ** - ** ** - ** Inputs: imsi: International Mobile Subscriber Identity ** - ** Others: None ** - ** ** - ** Outputs: guti: The new assigned GUTI ** - ** tac: Code of the first tracking area belonging ** - ** to the PLMN ** - ** n_tacs: Number of concecutive tracking areas ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs) -{ - int rc = RETURNok; - - static unsigned int tmsi = 1; - - LOG_FUNC_IN; - AssertFatal(0, "Hardcoded values"); - - guti->gummei.plmn = mme_api_plmn; - guti->gummei.MMEgid = MME_API_MME_GID; - guti->gummei.MMEcode = MME_API_MME_CODE; - guti->m_tmsi = tmsi++; - - *tac = MME_API_FIRST_TAC; - *n_tacs = MME_API_NB_TACS; - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_subscribe() ** - ** ** - ** Description: Requests the MME to check whether connectivity with the ** - ** requested PDN can be established using the specified APN. ** - ** If accepted the MME returns PDN subscription context con- ** - ** taining EPS subscribed QoS profile, the default APN if ** - ** required and UE's IPv4 address and/or the IPv6 prefix. ** - ** ** - ** Inputs: apn: If not NULL, Access Point Name of the PDN ** - ** to connect to ** - ** is_emergency: TRUE if the PDN connectivity is requested ** - ** for emergency bearer services ** - ** Others: None ** - ** ** - ** Outputs: apn: If NULL, default APN or APN configured for ** - ** emergency bearer services ** - ** pdn_addr: PDN connection IPv4 address or IPv6 inter- ** - ** face identifier to be used to build the ** - ** IPv6 link local address ** - ** qos: EPS subscribed QoS profile ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_subscribe(OctetString *apn, mme_api_ip_version_t mme_pdn_index, OctetString *pdn_addr, - int is_emergency, mme_api_qos_t *qos) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - - if ( apn && (apn->length == 0) ) { - /* PDN connectivity to default APN */ - if (is_emergency) { - apn->length = mme_api_emergency_apn.length; - apn->value = mme_api_emergency_apn.value; - } else { - apn->length = mme_api_default_apn.length; - apn->value = mme_api_default_apn.value; - } - } - - /* Assign PDN address */ - if ( pdn_addr && (_mme_api_pdn_id < MME_API_PDN_MAX) ) { - pdn_addr->length = - _mme_api_pdn_addr[mme_pdn_index][_mme_api_pdn_id].length; - pdn_addr->value = - _mme_api_pdn_addr[mme_pdn_index][_mme_api_pdn_id].value; - /* Increment the total number of PDN connections */ - _mme_api_pdn_id += 1; - } else { - /* Maximum number of PDN connections exceeded */ - rc = RETURNerror; - } - - /* Setup EPS subscribed QoS profile */ - if (qos) { - qos->qci = MME_API_QCI; - /* Uplink bit rate */ - qos->gbr[MME_API_UPLINK] = MME_API_BIT_RATE_64K; - qos->mbr[MME_API_UPLINK] = MME_API_BIT_RATE_128K; - /* Downlink bit rate */ - qos->gbr[MME_API_DOWNLINK] = MME_API_BIT_RATE_512K; - qos->mbr[MME_API_DOWNLINK] = MME_API_BIT_RATE_1024K; - } else { - rc = RETURNerror; - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: mme_api_unsubscribe() ** - ** ** - ** Description: Requests the MME to release connectivity with the reques- ** - ** ted PDN using the specified APN. ** - ** ** - ** Inputs: apn: Access Point Name of the PDN to disconnect ** - ** from ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int mme_api_unsubscribe(OctetString *apn) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - /* Decrement the total number of PDN connections */ - _mme_api_pdn_id -= 1; - - LOG_FUNC_RETURN(rc); -} diff --git a/openair-cn/NAS/MME/API/MME/mme_api.h b/openair-cn/NAS/MME/API/MME/mme_api.h deleted file mode 100644 index a8f83e1237..0000000000 --- a/openair-cn/NAS/MME/API/MME/mme_api.h +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source mme_api.h - -Version 0.1 - -Date 2013/02/28 - -Product NAS stack - -Subsystem Application Programming Interface - -Author Frederic Maurel - -Description Implements the API used by the NAS layer running in the MME - to interact with a Mobility Management Entity - -*****************************************************************************/ -#ifndef __MME_API_H__ -#define __MME_API_H__ - -# if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -# endif -#include "commonDef.h" -#include "securityDef.h" -#include "OctetString.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Maximum number of UEs the MME may simultaneously support */ -#define MME_API_NB_UE_MAX 256 - - -/* Features supported by the MME */ -typedef enum mme_api_feature_s { - MME_API_NO_FEATURE_SUPPORTED = 0, - MME_API_EMERGENCY_ATTACH = (1<<0), - MME_API_UNAUTHENTICATED_IMSI = (1<<1), - MME_API_IPV4 = (1<<2), - MME_API_IPV6 = (1<<3), - MME_API_SINGLE_ADDR_BEARERS = (1<<4), -} mme_api_feature_t; - -/* Network IP version capability */ -typedef enum mme_api_ip_version_e { - MME_API_IPV4_ADDR, - MME_API_IPV6_ADDR, - MME_API_IPV4V6_ADDR, - MME_API_ADDR_MAX -} mme_api_ip_version_t; - -/* - * EPS Mobility Management configuration data - * ------------------------------------------ - */ -typedef struct mme_api_emm_config_s { - mme_api_feature_t features; /* Supported features */ - gummei_t gummei; /* EPS Globally Unique MME Identity */ - uint8_t prefered_integrity_algorithm[8];// choice in NAS_SECURITY_ALGORITHMS_EIA0, etc - uint8_t prefered_ciphering_algorithm[8];// choice in NAS_SECURITY_ALGORITHMS_EEA0, etc -} mme_api_emm_config_t; - -/* - * EPS Session Management configuration data - * ----------------------------------------- - */ -typedef struct mme_api_esm_config_s { - mme_api_feature_t features; /* Supported features */ - uint8_t dns_prim_ipv4[4]; /* Network byte order */ - uint8_t dns_sec_ipv4[4]; /* Network byte order */ -} mme_api_esm_config_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* EPS subscribed QoS profile */ -typedef struct mme_api_qos_s { -#define MME_API_UPLINK 0 -#define MME_API_DOWNLINK 1 -#define MME_API_DIRECTION 2 - int gbr[MME_API_DIRECTION]; /* Guaranteed Bit Rate */ - int mbr[MME_API_DIRECTION]; /* Maximum Bit Rate */ - int qci; /* QoS Class Identifier */ -} mme_api_qos_t; - -/* Traffic Flow Template */ -typedef struct mme_api_tft_s { -} mme_api_tft_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#if defined(NAS_BUILT_IN_EPC) -int mme_api_get_emm_config(mme_api_emm_config_t *config, - mme_config_t *mme_config_p); -#else -int mme_api_get_emm_config(mme_api_emm_config_t *config); -#endif -int mme_api_get_esm_config(mme_api_esm_config_t *config); - -int mme_api_identify_guti(const GUTI_t *guti, auth_vector_t *vector); -int mme_api_identify_imsi(const imsi_t *imsi, auth_vector_t *vector); -int mme_api_identify_imei(const imei_t *imei, auth_vector_t *vector); -int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs); - -int mme_api_subscribe(OctetString *apn, mme_api_ip_version_t mme_pdn_index, OctetString *pdn_addr, - int is_emergency, mme_api_qos_t *qos); -int mme_api_unsubscribe(OctetString *apn); - -#endif /* __MME_API_H__*/ diff --git a/openair-cn/NAS/MME/EMM/Attach.c b/openair-cn/NAS/MME/EMM/Attach.c deleted file mode 100644 index ec7a873cd9..0000000000 --- a/openair-cn/NAS/MME/EMM/Attach.c +++ /dev/null @@ -1,1692 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source Attach.c - -Version 0.1 - -Date 2012/12/04 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the attach related EMM procedure executed by the - Non-Access Stratum. - - To get internet connectivity from the network, the network - have to know about the UE. When the UE is switched on, it - has to initiate the attach procedure to get initial access - to the network and register its presence to the Evolved - Packet Core (EPC) network in order to receive EPS services. - - As a result of a successful attach procedure, a context is - created for the UE in the MME, and a default bearer is esta- - blished between the UE and the PDN-GW. The UE gets the home - agent IPv4 and IPv6 addresses and full connectivity to the - IP network. - - The network may also initiate the activation of additional - dedicated bearers for the support of a specific service. - -*****************************************************************************/ - -#include "emm_proc.h" -#include "networkDef.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "esm_sap.h" -#include "emm_cause.h" - -#include "NasSecurityAlgorithms.h" - -#include "mme_api.h" -#include "mme_config.h" -# if defined(NAS_BUILT_IN_EPC) -# include "nas_itti_messaging.h" -# endif - -#include // memcmp, memcpy -#include // malloc, free - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* String representation of the EPS attach type */ -static const char *_emm_attach_type_str[] = { - "EPS", "IMSI", "EMERGENCY", "RESERVED" -}; - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the attach procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_emm_attach_t3450_handler(void *); - -/* - * Functions that may initiate EMM common procedures - */ -static int _emm_attach_identify(void *); -static int _emm_attach_security(void *); -static int _emm_attach(void *); - -/* - * Abnormal case attach procedures - */ -static int _emm_attach_release(void *); -static int _emm_attach_reject(void *); -static int _emm_attach_abort(void *); - -static int _emm_attach_have_changed(const emm_data_context_t *ctx, - emm_proc_attach_type_t type, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei, - int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present); -static int _emm_attach_update(emm_data_context_t *ctx, unsigned int ueid, - emm_proc_attach_type_t type, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei, - int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present, - const OctetString *esm_msg_pP); - -/* - * Internal data used for attach procedure - */ -typedef struct attach_data_s { - unsigned int ueid; /* UE identifier */ -#define ATTACH_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - OctetString esm_msg; /* ESM message to be sent within - * the Attach Accept message */ -} attach_data_t; - -static int _emm_attach_accept(emm_data_context_t *emm_ctx, attach_data_t *data); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Attach procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_request() ** - ** ** - ** Description: Performs the UE requested attach procedure ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.3 ** - ** The network may initiate EMM common procedures, e.g. the ** - ** identification, authentication and security mode control ** - ** procedures during the attach procedure, depending on the ** - ** information received in the ATTACH REQUEST message (e.g. ** - ** IMSI, GUTI and KSI). ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested attach ** - ** native_ksi: TRUE if the security context is of type ** - ** native (for KSIASME) ** - ** ksi: The NAS ket sey identifier ** - ** native_guti: TRUE if the provided GUTI is native GUTI ** - ** guti: The GUTI if provided by the UE ** - ** imsi: The IMSI if provided by the UE ** - ** imei: The IMEI if provided by the UE ** - ** tai: Identifies the last visited tracking area ** - ** the UE is registered to ** - ** eea: Supported EPS encryption algorithms ** - ** eia: Supported EPS integrity algorithms ** - ** esm_msg_pP: PDN connectivity request ESM message ** - ** Others: _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -int emm_proc_attach_request( - unsigned int ueid, - emm_proc_attach_type_t type, - int native_ksi, int ksi, - int native_guti, - GUTI_t *guti, - imsi_t *imsi, - imei_t *imei, - tai_t *tai, - int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present, - const OctetString *esm_msg_pP) -{ - LOG_FUNC_IN; - - int rc; - emm_data_context_t ue_ctx; - - LOG_TRACE(INFO, "EMM-PROC - EPS attach type = %s (%d) requested (ueid="NAS_UE_ID_FMT")", - _emm_attach_type_str[type], type, ueid); - LOG_TRACE(INFO, "EMM-PROC - umts_present = %u umts_present = %u", - umts_present, gprs_present); - - /* Initialize the temporary UE context */ - memset(&ue_ctx, 0 , sizeof(emm_data_context_t)); - ue_ctx.is_dynamic = FALSE; - ue_ctx.ueid = ueid; - -#if !defined(NAS_BUILT_IN_EPC) - - /* UE identifier sanity check */ - if (ueid >= EMM_DATA_NB_UE_MAX) { - ue_ctx.emm_cause = EMM_CAUSE_ILLEGAL_UE; - /* Do not accept UE with invalid identifier */ - rc = _emm_attach_reject(&ue_ctx); - LOG_FUNC_RETURN(rc); - } - -#endif - - /* 3GPP TS 24.301, section 5.5.1.1 - * MME not configured to support attach for emergency bearer services - * shall reject any request to attach with an attach type set to "EPS - * emergency attach". - */ - if ( !(_emm_data.conf.features & MME_API_EMERGENCY_ATTACH) && - (type == EMM_ATTACH_TYPE_EMERGENCY) ) { - ue_ctx.emm_cause = EMM_CAUSE_IMEI_NOT_ACCEPTED; - /* Do not accept the UE to attach for emergency services */ - rc = _emm_attach_reject(&ue_ctx); - LOG_FUNC_RETURN(rc); - } - - /* Get the UE's EMM context if it exists */ - emm_data_context_t **emm_ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *temp = NULL; - - temp = emm_data_context_get(&_emm_data, ueid); - emm_ctx = &temp; -#else - emm_ctx = &_emm_data.ctx[ueid]; -#endif - - if (*emm_ctx != NULL) { - /* An EMM context already exists for the UE in the network */ - if (_emm_attach_have_changed(*emm_ctx, type, ksi, guti, imsi, imei, - eea, eia, ucs2, uea, uia, gea, umts_present, gprs_present)) { - /* - * 3GPP TS 24.301, section 5.5.1.2.7, abnormal case e - * The attach parameters have changed from the one received within - * the previous Attach Request message; - * the previously initiated attach procedure shall be aborted and - * the new attach procedure shall be executed; - */ - LOG_TRACE(WARNING, "EMM-PROC - Attach parameters have changed"); - /* - * Notify EMM that the attach procedure is aborted - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_PROC_ABORT; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = *emm_ctx; - - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Process new attach procedure */ - LOG_TRACE(WARNING, "EMM-PROC - Initiate new attach procedure"); - rc = emm_proc_attach_request(ueid, type, native_ksi, ksi, - native_guti, guti, imsi, imei, - tai, eea, eia, ucs2, uea, uia, gea, - umts_present, gprs_present, esm_msg_pP); - } - - LOG_FUNC_RETURN(rc); - } else { - /* Continue with the previous attach procedure */ - LOG_TRACE(WARNING, "EMM-PROC - Received duplicated Attach Request"); - LOG_FUNC_RETURN(RETURNok); - } - } else { - /* Create UE's EMM context */ - *emm_ctx = (emm_data_context_t *)calloc(1, sizeof(emm_data_context_t)); - - if (emm_ctx == NULL) { - LOG_TRACE(WARNING, "EMM-PROC - Failed to create EMM context"); - ue_ctx.emm_cause = EMM_CAUSE_ILLEGAL_UE; - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(&ue_ctx); - LOG_FUNC_RETURN(rc); - } - - (*emm_ctx)->is_dynamic = TRUE; - (*emm_ctx)->guti = NULL; - (*emm_ctx)->old_guti = NULL; - (*emm_ctx)->imsi = NULL; - (*emm_ctx)->imei = NULL; - (*emm_ctx)->security = NULL; - (*emm_ctx)->esm_msg.length = 0; - (*emm_ctx)->esm_msg.value = NULL; - (*emm_ctx)->emm_cause = EMM_CAUSE_SUCCESS; - (*emm_ctx)->_emm_fsm_status = EMM_INVALID; - (*emm_ctx)->ueid = ueid; - /* - * Initialize EMM timers - */ - (*emm_ctx)->T3450.id = NAS_TIMER_INACTIVE_ID; - (*emm_ctx)->T3450.sec = T3450_DEFAULT_VALUE; - (*emm_ctx)->T3460.id = NAS_TIMER_INACTIVE_ID; - (*emm_ctx)->T3460.sec = T3460_DEFAULT_VALUE; - (*emm_ctx)->T3470.id = NAS_TIMER_INACTIVE_ID; - (*emm_ctx)->T3470.sec = T3470_DEFAULT_VALUE; - - emm_fsm_set_status(ueid, *emm_ctx, EMM_DEREGISTERED); -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_add(&_emm_data, *(emm_ctx)); -#endif - -#warning "TRICK TO SET TAC, BUT LOOK AT SPEC" - - if (tai) { - LOG_TRACE(WARNING, - "EMM-PROC - Set tac %u in context", - tai->tac); - (*emm_ctx)->tac = tai->tac; - } else { - LOG_TRACE(WARNING, - "EMM-PROC - Could not set tac in context, cause tai is NULL "); - } - } - - /* Update the EMM context with the current attach procedure parameters */ - rc = _emm_attach_update(*emm_ctx, ueid, type, ksi, guti, imsi, imei, - eea, eia, ucs2, uea, uia, gea, umts_present, gprs_present, esm_msg_pP); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMM-PROC - Failed to update EMM context"); - /* Do not accept the UE to attach to the network */ - (*emm_ctx)->emm_cause = EMM_CAUSE_ILLEGAL_UE; - rc = _emm_attach_reject(*emm_ctx); - } else { - /* - * Performs UE identification - */ - rc = _emm_attach_identify(*emm_ctx); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_reject() ** - ** ** - ** Description: Performs the protocol error abnormal case ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.7, case b ** - ** If the ATTACH REQUEST message is received with a protocol ** - ** error, the network shall return an ATTACH REJECT message. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: EMM cause code to be reported ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -int emm_proc_attach_reject(unsigned int ueid, int emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - /* Create temporary UE context */ - emm_data_context_t ue_ctx; - memset(&ue_ctx, 0 , sizeof(emm_data_context_t)); - ue_ctx.is_dynamic = FALSE; - ue_ctx.ueid = ueid; - - /* Update the EMM cause code */ -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) -#else - if (ueid < EMM_DATA_NB_UE_MAX) -#endif - { - ue_ctx.emm_cause = emm_cause; - } else { - ue_ctx.emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - /* Do not accept attach request with protocol error */ - rc = _emm_attach_reject(&ue_ctx); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_complete() ** - ** ** - ** Description: Terminates the attach procedure upon receiving Attach ** - ** Complete message from the UE. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.4 ** - ** Upon receiving an ATTACH COMPLETE message, the MME shall ** - ** stop timer T3450, enter state EMM-REGISTERED and consider ** - ** the GUTI sent in the ATTACH ACCEPT message as valid. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** esm_msg_pP: Activate default EPS bearer context accept ** - ** ESM message ** - ** Others: _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, T3450 ** - ** ** - ***************************************************************************/ -int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg_pP) -{ - emm_data_context_t *emm_ctx = NULL; - int rc = RETURNerror; - emm_sap_t emm_sap; - esm_sap_t esm_sap; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - EPS attach complete (ueid="NAS_UE_ID_FMT")", ueid); - - /* Release retransmission timer parameters */ - attach_data_t *data = (attach_data_t *)(emm_proc_common_get_args(ueid)); - - if (data) { - if (data->esm_msg.length > 0) { - free(data->esm_msg.value); - } - free(data); - } - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } -#else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } -#endif - - if (emm_ctx) { - /* Stop timer T3450 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); - emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", ueid); - - /* Delete the old GUTI and consider the GUTI sent in the Attach - * Accept message as valid */ - emm_ctx->guti_is_new = FALSE; - emm_ctx->old_guti = NULL; - /* - * Forward the Activate Default EPS Bearer Context Accept message - * to the EPS session management sublayer - */ - esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF; - esm_sap.is_standalone = FALSE; - esm_sap.ueid = ueid; - esm_sap.recv = esm_msg_pP; - esm_sap.ctx = emm_ctx; - rc = esm_sap_send(&esm_sap); - } else { - LOG_TRACE(ERROR, "EMM-PROC - No EMM context exists"); - } - - if ( (rc != RETURNerror) && (esm_sap.err == ESM_SAP_SUCCESS) ) { - /* Set the network attachment indicator */ - emm_ctx->is_attached = TRUE; - /* - * Notify EMM that attach procedure has successfully completed - */ - emm_sap.primitive = EMMREG_ATTACH_CNF; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } else if (esm_sap.err != ESM_SAP_DISCARDED) { - /* - * Notify EMM that attach procedure failed - */ - emm_sap.primitive = EMMREG_ATTACH_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } else { - /* - * ESM procedure failed and, received message has been discarded or - * Status message has been returned; ignore ESM procedure failure - */ - rc = RETURNok; - } - - LOG_FUNC_RETURN(rc); -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_attach_t3450_handler() ** - ** ** - ** Description: T3450 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.7, case c ** - ** On the first expiry of the timer T3450, the network shall ** - ** retransmit the ATTACH ACCEPT message and shall reset and ** - ** restart timer T3450. This retransmission is repeated four ** - ** times, i.e. on the fifth expiry of timer T3450, the at- ** - ** tach procedure shall be aborted and the MME enters state ** - ** EMM-DEREGISTERED. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_emm_attach_t3450_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - attach_data_t *data = (attach_data_t *)(args); - - /* Increment the retransmission counter */ - data->retransmission_count += 1; - - LOG_TRACE(WARNING, "EMM-PROC - T3450 timer expired, retransmission " - "counter = %d", data->retransmission_count); - - /* Get the UE's EMM context */ - emm_data_context_t *emm_ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); -#else - emm_ctx = _emm_data.ctx[data->ueid]; -#endif - - if (data->retransmission_count < ATTACH_COUNTER_MAX) { - /* Send attach accept message to the UE */ - rc = _emm_attach_accept(emm_ctx, data); - } else { - /* Abort the attach procedure */ - rc = _emm_attach_abort(data); - } - - LOG_FUNC_RETURN(NULL); -} - -/* - * -------------------------------------------------------------------------- - * Abnormal cases in the MME - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_attach_release() ** - ** ** - ** Description: Releases the UE context data. ** - ** ** - ** Inputs: args: Data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_attach_release(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - - if (emm_ctx) { - LOG_TRACE(WARNING, "EMM-PROC - Release UE context data (ueid="NAS_UE_ID_FMT")", - emm_ctx->ueid); - - unsigned int ueid = emm_ctx->ueid; - - if (emm_ctx->guti) { - free(emm_ctx->guti); - emm_ctx->guti = NULL; - } - - if (emm_ctx->imsi) { - free(emm_ctx->imsi); - emm_ctx->imsi = NULL; - } - - if (emm_ctx->imei) { - free(emm_ctx->imei); - emm_ctx->imei = NULL; - } - - if (emm_ctx->esm_msg.length > 0) { - free(emm_ctx->esm_msg.value); - emm_ctx->esm_msg.value = NULL; - } - - /* Release NAS security context */ - if (emm_ctx->security) { - emm_security_context_t *security = emm_ctx->security; - - if (security->kasme.value) { - free(security->kasme.value); - security->kasme.value = NULL; - security->kasme.length = 0; - } - - if (security->knas_enc.value) { - free(security->knas_enc.value); - security->knas_enc.value = NULL; - security->knas_enc.length = 0; - } - - if (security->knas_int.value) { - free(security->knas_int.value); - security->knas_int.value = NULL; - security->knas_int.length = 0; - } - - free(emm_ctx->security); - emm_ctx->security = NULL; - } - - /* Stop timer T3450 */ - if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); - emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - /* Stop timer T3460 */ - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - /* Stop timer T3470 */ - if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3460.id); - emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - - /* Release the EMM context */ -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_remove(&_emm_data, emm_ctx); -#else - free(_emm_data.ctx[ueid]); - _emm_data.ctx[ueid] = NULL; -#endif - /* - * Notify EMM that the attach procedure is aborted - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_PROC_ABORT; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_reject() ** - ** ** - ** Description: Performs the attach procedure not accepted by the network.** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.5 ** - ** If the attach request cannot be accepted by the network, ** - ** the MME shall send an ATTACH REJECT message to the UE in- ** - ** including an appropriate EMM cause value. ** - ** ** - ** Inputs: args: UE context data ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_attach_reject(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - - if (emm_ctx) { - emm_sap_t emm_sap; - LOG_TRACE(WARNING, "EMM-PROC - EMM attach procedure not accepted " - "by the network (ueid="NAS_UE_ID_FMT", cause=%d)", - emm_ctx->ueid, emm_ctx->emm_cause); - /* - * Notify EMM-AS SAP that Attach Reject message has to be sent - * onto the network - */ - emm_sap.primitive = EMMAS_ESTABLISH_REJ; - emm_sap.u.emm_as.u.establish.ueid = emm_ctx->ueid; - emm_sap.u.emm_as.u.establish.UEid.guti = NULL; - - if (emm_ctx->emm_cause == EMM_CAUSE_SUCCESS) { - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - emm_sap.u.emm_as.u.establish.emm_cause = emm_ctx->emm_cause; - emm_sap.u.emm_as.u.establish.NASinfo = EMM_AS_NAS_INFO_ATTACH; - - if (emm_ctx->emm_cause != EMM_CAUSE_ESM_FAILURE) { - emm_sap.u.emm_as.u.establish.NASmsg.length = 0; - emm_sap.u.emm_as.u.establish.NASmsg.value = NULL; - } else if (emm_ctx->esm_msg.length > 0) { - emm_sap.u.emm_as.u.establish.NASmsg = emm_ctx->esm_msg; - } else { - LOG_TRACE(ERROR, "EMM-PROC - ESM message is missing"); - LOG_FUNC_RETURN(RETURNerror); - } - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.establish.sctx, - emm_ctx->security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - /* Release the UE context, even if the network failed to send the - * ATTACH REJECT message */ - if (emm_ctx->is_dynamic) { - rc = _emm_attach_release(emm_ctx); - } - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_abort() ** - ** ** - ** Description: Aborts the attach procedure ** - ** ** - ** Inputs: args: Attach procedure data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3450 ** - ** ** - ***************************************************************************/ -static int _emm_attach_abort(void *args) -{ - int rc = RETURNerror; - emm_data_context_t *ctx = NULL; - attach_data_t *data; - - LOG_FUNC_IN; - - data = (attach_data_t *)(args); - - if (data) { - unsigned int ueid = data->ueid; - esm_sap_t esm_sap; - - LOG_TRACE(WARNING, "EMM-PROC - Abort the attach procedure (ueid="NAS_UE_ID_FMT")", - ueid); -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif - if (ctx) { - /* Stop timer T3450 */ - if (ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", ctx->T3450.id); - ctx->T3450.id = nas_timer_stop(ctx->T3450.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", data->ueid); - } - } - - /* Release retransmission timer parameters */ - if (data->esm_msg.length > 0) { - free(data->esm_msg.value); - } - - free(data); - - - - /* - * Notify ESM that the network locally refused PDN connectivity - * to the UE - */ - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REJ; - esm_sap.ueid = ueid; - esm_sap.ctx = ctx; - esm_sap.recv = NULL; - rc = esm_sap_send(&esm_sap); - - if (rc != RETURNerror) { - /* - * Notify EMM that EPS attach procedure failed - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_ATTACH_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = ctx; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Release the UE context */ - rc = _emm_attach_release(ctx); - } - } - } - - LOG_FUNC_RETURN (rc); -} - -/* - * -------------------------------------------------------------------------- - * Functions that may initiate EMM common procedures - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_attach_identify() ** - ** ** - ** Description: Performs UE's identification. May initiates identifica- ** - ** tion, authentication and security mode control EMM common ** - ** procedures. ** - ** ** - ** Inputs: args: Identification argument parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -static int _emm_attach_identify(void *args) -{ - int rc = RETURNerror; - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - int guti_reallocation = FALSE; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Identify incoming UE (ueid="NAS_UE_ID_FMT") using %s", - emm_ctx->ueid, (emm_ctx->imsi)? "IMSI" : (emm_ctx->guti)? "GUTI" : - (emm_ctx->imei)? "IMEI" : "none"); - - /* - * UE's identification - * ------------------- - */ - if (emm_ctx->imsi) { - /* The UE identifies itself using an IMSI */ -#if defined(NAS_BUILT_IN_EPC) - if (!emm_ctx->security) { - /* Ask upper layer to fetch new security context */ - nas_itti_auth_info_req(emm_ctx->ueid, emm_ctx->imsi, 1, NULL); - - rc = RETURNok; - } else -#endif - { - rc = mme_api_identify_imsi(emm_ctx->imsi, &emm_ctx->vector); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to identify the UE using provided IMSI"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - guti_reallocation = TRUE; - } - } else if (emm_ctx->guti) { - /* The UE identifies itself using a GUTI */ - rc = mme_api_identify_guti(emm_ctx->guti, &emm_ctx->vector); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMM-PROC - Failed to identify the UE using " - "provided GUTI (tmsi=%u)", emm_ctx->guti->m_tmsi); - /* 3GPP TS 24.401, Figure 5.3.2.1-1, point 4 - * The UE was attempting to attach to the network using a GUTI - * that is not known by the network; the MME shall initiate an - * identification procedure to retrieve the IMSI from the UE. - */ - rc = emm_proc_identification(emm_ctx->ueid, - emm_ctx, - EMM_IDENT_TYPE_IMSI, - _emm_attach_identify, - _emm_attach_release, - _emm_attach_release); - - if (rc != RETURNok) { - /* Failed to initiate the identification procedure */ - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to initiate identification procedure"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(emm_ctx); - } - - /* Relevant callback will be executed when identification - * procedure completes */ - LOG_FUNC_RETURN(rc); - } - } else if ( (emm_ctx->imei) && (emm_ctx->is_emergency) ) { - /* The UE is attempting to attach to the network for emergency - * services using an IMEI */ - rc = mme_api_identify_imei(emm_ctx->imei, &emm_ctx->vector); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to identify the UE using provided IMEI"); - emm_ctx->emm_cause = EMM_CAUSE_IMEI_NOT_ACCEPTED; - } - } else { - LOG_TRACE(WARNING, "EMM-PROC - UE's identity is not available"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - /* - * GUTI reallocation - * ----------------- - */ - if ( (rc != RETURNerror) && guti_reallocation ) { - /* Release the old GUTI */ - if (emm_ctx->old_guti) { - free(emm_ctx->old_guti); - } - - /* Save the GUTI previously used by the UE to identify itself */ - emm_ctx->old_guti = emm_ctx->guti; - /* Allocate a new GUTI */ - emm_ctx->guti = (GUTI_t *)malloc(sizeof(GUTI_t)); - /* Request the MME to assign a GUTI to the UE */ - rc = mme_api_new_guti(emm_ctx->imsi, emm_ctx->guti, - &emm_ctx->tac, &emm_ctx->n_tacs); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMM-PROC - Failed to assign new GUTI"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } else { - LOG_TRACE(WARNING, "EMM-PROC - New GUTI assigned to the UE " - "(tmsi=%u)", emm_ctx->guti->m_tmsi); - /* Update the GUTI indicator as new */ - emm_ctx->guti_is_new = TRUE; - } - } - - /* - * UE's authentication - * ------------------- - */ - if (rc != RETURNerror) { - if (emm_ctx->security) { - /* A security context exists for the UE in the network; - * proceed with the attach procedure. - */ - rc = _emm_attach(emm_ctx); - } else if ( (emm_ctx->is_emergency) && - (_emm_data.conf.features & MME_API_UNAUTHENTICATED_IMSI) ) { - /* 3GPP TS 24.301, section 5.5.1.2.3 - * 3GPP TS 24.401, Figure 5.3.2.1-1, point 5a - * MME configured to support Emergency Attach for unauthenticated - * IMSIs may choose to skip the authentication procedure even if - * no EPS security context is available and proceed directly to the - * execution of the security mode control procedure. - */ - rc = _emm_attach_security(emm_ctx); - } - -#if !defined(NAS_BUILT_IN_EPC) - else { - /* 3GPP TS 24.401, Figure 5.3.2.1-1, point 5a - * No EMM context exists for the UE in the network; authentication - * and NAS security setup to activate integrity protection and NAS - * ciphering are mandatory. - */ - auth_vector_t *auth = &emm_ctx->vector; - const OctetString loc_rand = {AUTH_RAND_SIZE, (uint8_t *)auth->rand}; - const OctetString autn = {AUTH_AUTN_SIZE, (uint8_t *)auth->autn}; - rc = emm_proc_authentication(emm_ctx, emm_ctx->ueid, 0, // TODO: eksi != 0 - &loc_rand, &autn, - _emm_attach_security, - _emm_attach_release, - _emm_attach_release); - - if (rc != RETURNok) { - /* Failed to initiate the authentication procedure */ - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to initiate authentication procedure"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - } - -#endif - } - - if (rc != RETURNok) { - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(emm_ctx); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_security() ** - ** ** - ** Description: Initiates security mode control EMM common procedure. ** - ** ** - ** Inputs: args: security argument parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) -int emm_attach_security(void *args) -{ - return _emm_attach_security(args); -} -#endif - -static int _emm_attach_security(void *args) -{ - LOG_FUNC_IN; - - int rc; - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - - LOG_TRACE(INFO, "EMM-PROC - Setup NAS security (ueid="NAS_UE_ID_FMT")", emm_ctx->ueid); - - /* Create new NAS security context */ - if (emm_ctx->security == NULL) { - emm_ctx->security = - (emm_security_context_t *)malloc(sizeof(emm_security_context_t)); - } - - if (emm_ctx->security) { - memset(emm_ctx->security, 0, sizeof(emm_security_context_t)); - emm_ctx->security->type = EMM_KSI_NOT_AVAILABLE; - emm_ctx->security->selected_algorithms.encryption = NAS_SECURITY_ALGORITHMS_EEA0; - emm_ctx->security->selected_algorithms.integrity = NAS_SECURITY_ALGORITHMS_EIA0; - } else { - LOG_TRACE(WARNING, "EMM-PROC - Failed to create security context"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(emm_ctx); - LOG_FUNC_RETURN(rc); - } - - /* Initialize the security mode control procedure */ - rc = emm_proc_security_mode_control(emm_ctx->ueid, 0, // TODO: eksi != 0 - emm_ctx->eea, emm_ctx->eia,emm_ctx->ucs2, - emm_ctx->uea, emm_ctx->uia, emm_ctx->gea, - emm_ctx->umts_present, emm_ctx->gprs_present, - _emm_attach, _emm_attach_release, - _emm_attach_release); - - if (rc != RETURNok) { - /* Failed to initiate the security mode control procedure */ - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to initiate security mode control procedure"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(emm_ctx); - } - - LOG_FUNC_RETURN (rc); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_attach() ** - ** ** - ** Description: Performs the attach signalling procedure while a context ** - ** exists for the incoming UE in the network. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.4 ** - ** Upon receiving the ATTACH REQUEST message, the MME shall ** - ** send an ATTACH ACCEPT message to the UE and start timer ** - ** T3450. ** - ** ** - ** Inputs: args: attach argument parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -static int _emm_attach(void *args) -{ - LOG_FUNC_IN; - - esm_sap_t esm_sap; - int rc; - - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - - LOG_TRACE(INFO, "EMM-PROC - Attach UE (ueid="NAS_UE_ID_FMT")", emm_ctx->ueid); - - /* 3GPP TS 24.401, Figure 5.3.2.1-1, point 5a - * At this point, all NAS messages shall be protected by the NAS security - * functions (integrity and ciphering) indicated by the MME unless the UE - * is emergency attached and not successfully authenticated. - */ - - /* - * Notify ESM that PDN connectivity is requested - */ - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REQ; - esm_sap.is_standalone = FALSE; - esm_sap.ueid = emm_ctx->ueid; - esm_sap.ctx = emm_ctx; - esm_sap.recv = &emm_ctx->esm_msg; - rc = esm_sap_send(&esm_sap); - - if ( (rc != RETURNerror) && (esm_sap.err == ESM_SAP_SUCCESS) ) { - /* - * The attach request is accepted by the network - */ - - /* Delete the stored UE radio capability information, if any */ - /* Store the UE network capability */ - /* Assign the TAI list the UE is registered to */ - - /* Allocate parameters of the retransmission timer callback */ - attach_data_t *data = (attach_data_t *)calloc(1,sizeof(attach_data_t)); - - if (data != NULL) { - /* Setup ongoing EMM procedure callback functions */ - rc = emm_proc_common_initialize(emm_ctx->ueid, NULL, NULL, NULL, - _emm_attach_abort, data); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "Failed to initialize EMM callback functions"); - free(data); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Set the UE identifier */ - data->ueid = emm_ctx->ueid; - /* Reset the retransmission counter */ - data->retransmission_count = 0; -#if defined(ORIGINAL_CODE) - /* Setup the ESM message container */ - data->esm_msg.value = (uint8_t *)malloc(esm_sap.send.length); - - if (data->esm_msg.value) { - data->esm_msg.length = esm_sap.send.length; - memcpy(data->esm_msg.value, esm_sap.send.value, - esm_sap.send.length); - } else { - data->esm_msg.length = 0; - } - - /* Send attach accept message to the UE */ - rc = _emm_attach_accept(emm_ctx, data); - - if (rc != RETURNerror) { - if (emm_ctx->guti_is_new && emm_ctx->old_guti) { - /* Implicit GUTI reallocation; - * Notify EMM that common procedure has been initiated - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = data->ueid; - rc = emm_sap_send(&emm_sap); - } - } - -#else - rc = RETURNok; -#endif - } - } else if (esm_sap.err != ESM_SAP_DISCARDED) { - /* - * The attach procedure failed due to an ESM procedure failure - */ - emm_ctx->emm_cause = EMM_CAUSE_ESM_FAILURE; - - /* Setup the ESM message container to include PDN Connectivity Reject - * message within the Attach Reject message */ - if (emm_ctx->esm_msg.length > 0) { - free(emm_ctx->esm_msg.value); - } - - emm_ctx->esm_msg.value = (uint8_t *)malloc(esm_sap.send.length); - - if (emm_ctx->esm_msg.value) { - emm_ctx->esm_msg.length = esm_sap.send.length; - memcpy(emm_ctx->esm_msg.value, esm_sap.send.value, - esm_sap.send.length); - /* Send Attach Reject message */ - rc = _emm_attach_reject(emm_ctx); - } else { - emm_ctx->esm_msg.length = 0; - } - } else { - /* - * ESM procedure failed and, received message has been discarded or - * Status message has been returned; ignore ESM procedure failure - */ - rc = RETURNok; - } - - if (rc != RETURNok) { - /* The attach procedure failed */ - LOG_TRACE(WARNING, "EMM-PROC - Failed to respond to Attach Request"); - emm_ctx->emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - /* Do not accept the UE to attach to the network */ - rc = _emm_attach_reject(emm_ctx); - } - - LOG_FUNC_RETURN (rc); -} - -int emm_cn_wrapper_attach_accept(emm_data_context_t *emm_ctx, void *data) -{ - return _emm_attach_accept(emm_ctx,(attach_data_t *)data); -} -/**************************************************************************** - ** ** - ** Name: _emm_attach_accept() ** - ** ** - ** Description: Sends ATTACH ACCEPT message and start timer T3450 ** - ** ** - ** Inputs: data: Attach accept retransmission data ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3450 ** - ** ** - ***************************************************************************/ -static int _emm_attach_accept(emm_data_context_t *emm_ctx, attach_data_t *data) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - // may be caused by timer not stopped when deleted context - if (emm_ctx) { - /* - * Notify EMM-AS SAP that Attach Accept message together with an Activate - * Default EPS Bearer Context Request message has to be sent to the UE - */ - - emm_sap.primitive = EMMAS_ESTABLISH_CNF; - emm_sap.u.emm_as.u.establish.ueid = emm_ctx->ueid; - - if (emm_ctx->guti_is_new && emm_ctx->old_guti) { - /* Implicit GUTI reallocation; - * include the new assigned GUTI in the Attach Accept message */ - LOG_TRACE(INFO,"EMM-PROC - Implicit GUTI reallocation, include the new assigned GUTI in the Attach Accept message"); - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->old_guti; - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - } else if (emm_ctx->guti_is_new && emm_ctx->guti) { - /* include the new assigned GUTI in the Attach Accept message */ - LOG_TRACE(INFO,"EMM-PROC - Include the new assigned GUTI in the Attach Accept message"); - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - } else { - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; -#warning "TEST LG FORCE GUTI IE IN ATTACH ACCEPT" - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - //emm_sap.u.emm_as.u.establish.new_guti = NULL; - } - - emm_sap.u.emm_as.u.establish.n_tacs = emm_ctx->n_tacs; - emm_sap.u.emm_as.u.establish.tac = emm_ctx->tac; - emm_sap.u.emm_as.u.establish.NASinfo = EMM_AS_NAS_INFO_ATTACH; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.establish.sctx, - emm_ctx->security, FALSE, TRUE); - - LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X ", emm_sap.u.emm_as.u.establish.encryption); - LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X ", emm_sap.u.emm_as.u.establish.integrity); - emm_sap.u.emm_as.u.establish.encryption = emm_ctx->security->selected_algorithms.encryption; - emm_sap.u.emm_as.u.establish.integrity = emm_ctx->security->selected_algorithms.integrity; - LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X (0x%X)", - emm_sap.u.emm_as.u.establish.encryption, - emm_ctx->security->selected_algorithms.encryption); - LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X (0x%X)", - emm_sap.u.emm_as.u.establish.integrity, - emm_ctx->security->selected_algorithms.integrity); - - /* Get the activate default EPS bearer context request message to - * transfer within the ESM container of the attach accept message */ - emm_sap.u.emm_as.u.establish.NASmsg = data->esm_msg; - LOG_TRACE(INFO,"EMM-PROC - NASmsg src size = %d NASmsg dst size = %d ", - data->esm_msg.length, emm_sap.u.emm_as.u.establish.NASmsg.length); - - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3450 timer */ - emm_ctx->T3450.id = nas_timer_restart(emm_ctx->T3450.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 restarted UE "NAS_UE_ID_FMT"", data->ueid); - } else { - /* Start T3450 timer */ - emm_ctx->T3450.id = nas_timer_start(emm_ctx->T3450.sec, _emm_attach_t3450_handler, data); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 started UE "NAS_UE_ID_FMT" ", data->ueid); - } - - LOG_TRACE(INFO,"EMM-PROC - Timer T3450 (%d) expires in %ld seconds", - emm_ctx->T3450.id, emm_ctx->T3450.sec); - } - } else { - LOG_TRACE(WARNING,"EMM-PROC - emm_ctx NULL"); - } - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_have_changed() ** - ** ** - ** Description: Check whether the given attach parameters differs from ** - ** those previously stored when the attach procedure has ** - ** been initiated. ** - ** ** - ** Inputs: ctx: EMM context of the UE in the network ** - ** type: Type of the requested attach ** - ** ksi: Security ket sey identifier ** - ** guti: The GUTI provided by the UE ** - ** imsi: The IMSI provided by the UE ** - ** imei: The IMEI provided by the UE ** - ** eea: Supported EPS encryption algorithms ** - ** eia: Supported EPS integrity algorithms ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: TRUE if at least one of the parameters ** - ** differs; FALSE otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_attach_have_changed(const emm_data_context_t *ctx, - emm_proc_attach_type_t type, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei, - int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present) -{ - LOG_FUNC_IN; - - /* Emergency bearer services indicator */ - if ( (type == EMM_ATTACH_TYPE_EMERGENCY) != ctx->is_emergency) { - LOG_FUNC_RETURN (TRUE); - } - - /* Security key set identifier */ - if (ksi != ctx->ksi) { - LOG_FUNC_RETURN (TRUE); - } - - /* Supported EPS encryption algorithms */ - if (eea != ctx->eea) { - LOG_FUNC_RETURN (TRUE); - } - - /* Supported EPS integrity algorithms */ - if (eia != ctx->eia) { - LOG_FUNC_RETURN (TRUE); - } - - if (umts_present != ctx->umts_present) { - LOG_FUNC_RETURN (TRUE); - } - - if (ctx->umts_present) { - if (ucs2 != ctx->ucs2) { - LOG_FUNC_RETURN (TRUE); - } - - /* Supported UMTS encryption algorithms */ - if (uea != ctx->uea) { - LOG_FUNC_RETURN (TRUE); - } - - /* Supported UMTS integrity algorithms */ - if (uia != ctx->uia) { - LOG_FUNC_RETURN (TRUE); - } - } - - if (gprs_present != ctx->gprs_present) { - LOG_FUNC_RETURN (TRUE); - } - - if (ctx->gprs_present) { - if (gea != ctx->gea) { - LOG_FUNC_RETURN (TRUE); - } - } - - /* The GUTI if provided by the UE */ - if ( (guti) && (ctx->guti == NULL) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (guti == NULL) && (ctx->guti) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (guti) && (ctx->guti) ) { - if (guti->m_tmsi != ctx->guti->m_tmsi) { - LOG_FUNC_RETURN (TRUE); - } - - if ( memcmp(&guti->gummei, &ctx->guti->gummei, sizeof(gummei_t)) != 0 ) { - LOG_FUNC_RETURN (TRUE); - } - } - - /* The IMSI if provided by the UE */ - if ( (imsi) && (ctx->imsi == NULL) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (imsi == NULL) && (ctx->imsi) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (imsi) && (ctx->imsi) ) { - if ( memcmp(imsi, ctx->imsi, sizeof(imsi_t)) != 0 ) { - LOG_FUNC_RETURN (TRUE); - } - } - - /* The IMEI if provided by the UE */ - if ( (imei) && (ctx->imei == NULL) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (imei == NULL) && (ctx->imei) ) { - LOG_FUNC_RETURN (TRUE); - } - - if ( (imei) && (ctx->imei) ) { - if ( memcmp(imei, ctx->imei, sizeof(imei_t)) != 0 ) { - LOG_FUNC_RETURN (TRUE); - } - } - - LOG_FUNC_RETURN (FALSE); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_update() ** - ** ** - ** Description: Update the EMM context with the given attach procedure ** - ** parameters. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested attach ** - ** ksi: Security ket sey identifier ** - ** guti: The GUTI provided by the UE ** - ** imsi: The IMSI provided by the UE ** - ** imei: The IMEI provided by the UE ** - ** eea: Supported EPS encryption algorithms ** - ** eia: Supported EPS integrity algorithms ** - ** esm_msg_pP: ESM message contained with the attach re- ** - ** quest ** - ** Others: None ** - ** ** - ** Outputs: ctx: EMM context of the UE in the network ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_attach_update(emm_data_context_t *ctx, unsigned int ueid, - emm_proc_attach_type_t type, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei, - int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present, - const OctetString *esm_msg_pP) -{ - int mnc_length; - LOG_FUNC_IN; - /* UE identifier */ - ctx->ueid = ueid; - /* Emergency bearer services indicator */ - ctx->is_emergency = (type == EMM_ATTACH_TYPE_EMERGENCY); - /* Security key set identifier */ - ctx->ksi = ksi; - /* Supported EPS encryption algorithms */ - ctx->eea = eea; - /* Supported EPS integrity algorithms */ - ctx->eia = eia; - ctx->ucs2 = ucs2; - ctx->uea = uea; - ctx->uia = uia; - ctx->gea = gea; - ctx->umts_present = umts_present; - ctx->gprs_present = gprs_present; - - /* The GUTI if provided by the UE */ - if (guti) { - LOG_TRACE(INFO, "EMM-PROC - GUTI NOT NULL"); - - if (ctx->guti == NULL) { - ctx->guti = (GUTI_t *)malloc(sizeof(GUTI_t)); - } - - if (ctx->guti != NULL) { - memcpy(ctx->guti, guti, sizeof(GUTI_t)); - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } else { - if (ctx->guti == NULL) { - ctx->guti = (GUTI_t *)calloc(1, sizeof(GUTI_t)); - } - -#warning "LG: We should assign the GUTI accordingly to the visited plmn id" - - if ((ctx->guti != NULL) && (imsi)) { - ctx->tac = mme_config.gummei.plmn_tac[0]; - ctx->guti->gummei.MMEcode = mme_config.gummei.mmec[0]; - ctx->guti->gummei.MMEgid = mme_config.gummei.mme_gid[0]; - ctx->guti->m_tmsi = (uint32_t) ctx; - - mnc_length = mme_config_find_mnc_length( - imsi->u.num.digit1, - imsi->u.num.digit2, - imsi->u.num.digit3, - imsi->u.num.digit4, - imsi->u.num.digit5, - imsi->u.num.digit6); - - if ((mnc_length == 2) || (mnc_length == 3)) { - ctx->guti->gummei.plmn.MCCdigit1 = imsi->u.num.digit1; - ctx->guti->gummei.plmn.MCCdigit2 = imsi->u.num.digit2; - ctx->guti->gummei.plmn.MCCdigit3 = imsi->u.num.digit3; - - if (mnc_length == 2) { - ctx->guti->gummei.plmn.MNCdigit1 = imsi->u.num.digit4; - ctx->guti->gummei.plmn.MNCdigit2 = imsi->u.num.digit5; - ctx->guti->gummei.plmn.MNCdigit3 = 15; - LOG_TRACE(WARNING, "EMM-PROC - Assign GUTI from IMSI %01X%01X%01X.%01X%01X.%04X.%02X.%08X to emm_data_context", - ctx->guti->gummei.plmn.MCCdigit1, - ctx->guti->gummei.plmn.MCCdigit2, - ctx->guti->gummei.plmn.MCCdigit3, - ctx->guti->gummei.plmn.MNCdigit1, - ctx->guti->gummei.plmn.MNCdigit2, - ctx->guti->gummei.MMEgid, - ctx->guti->gummei.MMEcode, - ctx->guti->m_tmsi - ); - } else { - ctx->guti->gummei.plmn.MNCdigit1 = imsi->u.num.digit5; - ctx->guti->gummei.plmn.MNCdigit2 = imsi->u.num.digit6; - ctx->guti->gummei.plmn.MNCdigit3 = imsi->u.num.digit4; - LOG_TRACE(WARNING, "EMM-PROC - Assign GUTI from IMSI %01X%01X%01X.%01X%01X%01X.%04X.%02X.%08X to emm_data_context", - ctx->guti->gummei.plmn.MCCdigit1, - ctx->guti->gummei.plmn.MCCdigit2, - ctx->guti->gummei.plmn.MCCdigit3, - ctx->guti->gummei.plmn.MNCdigit1, - ctx->guti->gummei.plmn.MNCdigit2, - ctx->guti->gummei.plmn.MNCdigit3, - ctx->guti->gummei.MMEgid, - ctx->guti->gummei.MMEcode, - ctx->guti->m_tmsi - ); - } - - LOG_TRACE(WARNING, "EMM-PROC - Set ctx->guti_is_new to emm_data_context"); - ctx->guti_is_new = TRUE; - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } - - /* The IMSI if provided by the UE */ - if (imsi) { - if (ctx->imsi == NULL) { - ctx->imsi = (imsi_t *)malloc(sizeof(imsi_t)); - } - - if (ctx->imsi != NULL) { - memcpy(ctx->imsi, imsi, sizeof(imsi_t)); - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } - - /* The IMEI if provided by the UE */ - if (imei) { - if (ctx->imei == NULL) { - ctx->imei = (imei_t *)malloc(sizeof(imei_t)); - } - - if (ctx->imei != NULL) { - memcpy(ctx->imei, imei, sizeof(imei_t)); - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } - - /* The ESM message contained within the attach request */ - if (esm_msg_pP->length > 0) { - if (ctx->esm_msg.value != NULL) { - free(ctx->esm_msg.value); - ctx->esm_msg.value = NULL; - ctx->esm_msg.length = 0; - } - - ctx->esm_msg.value = (uint8_t *)malloc(esm_msg_pP->length); - - if (ctx->esm_msg.value != NULL) { - memcpy((char *)ctx->esm_msg.value, - (char *)esm_msg_pP->value, esm_msg_pP->length); - - } else { - LOG_FUNC_RETURN (RETURNerror); - } - } - - ctx->esm_msg.length = esm_msg_pP->length; - /* Attachment indicator */ - ctx->is_attached = FALSE; - - LOG_FUNC_RETURN (RETURNok); -} diff --git a/openair-cn/NAS/MME/EMM/Authentication.c b/openair-cn/NAS/MME/EMM/Authentication.c deleted file mode 100644 index 19eb5c13a8..0000000000 --- a/openair-cn/NAS/MME/EMM/Authentication.c +++ /dev/null @@ -1,660 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source Authentication.c - -Version 0.1 - -Date 2013/03/04 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the authentication EMM procedure executed by the - Non-Access Stratum. - - The purpose of the EPS authentication and key agreement (AKA) - procedure is to provide mutual authentication between the user - and the network and to agree on a key KASME. The procedure is - always initiated and controlled by the network. However, the - UE can reject the EPS authentication challenge sent by the - network. - - A partial native EPS security context is established in the - UE and the network when an EPS authentication is successfully - performed. The computed key material KASME is used as the - root for the EPS integrity protection and ciphering key - hierarchy. - -*****************************************************************************/ - -#include // malloc, free -#include // memcpy, memcmp, memset -#include // htons - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" -#include "emmData.h" -#include "emm_sap.h" -#include "emm_cause.h" - -# if defined(NAS_BUILT_IN_EPC) -# include "nas_itti_messaging.h" -# endif -#include "msc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the authentication procedure in the UE - * -------------------------------------------------------------------------- - */ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the authentication procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_authentication_t3460_handler(void *); - -/* - * Function executed whenever the ongoing EMM procedure that initiated - * the authentication procedure is aborted or the maximum value of the - * retransmission timer counter is exceed - */ -static int _authentication_abort(void *); - -/* - * Internal data used for authentication procedure - */ -typedef struct { - unsigned int ueid; /* UE identifier */ -#define AUTHENTICATION_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - int ksi; /* NAS key set identifier */ - OctetString rand; /* Random challenge number */ - OctetString autn; /* Authentication token */ - int notify_failure; /* Indicates whether the authentication - * procedure failure shall be notified - * to the ongoing EMM procedure */ -} authentication_data_t; - -static int _authentication_request(authentication_data_t *data); -static int _authentication_reject(unsigned int ueid); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Authentication procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_proc_authentication() ** - ** ** - ** Description: Initiates authentication procedure to establish partial ** - ** native EPS security context in the UE and the MME. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.2 ** - ** The network initiates the authentication procedure by ** - ** sending an AUTHENTICATION REQUEST message to the UE and ** - ** starting the timer T3460. The AUTHENTICATION REQUEST mes- ** - ** sage contains the parameters necessary to calculate the ** - ** authentication response. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** ksi: NAS key set identifier ** - ** rand: Random challenge number ** - ** autn: Authentication token ** - ** success: Callback function executed when the authen-** - ** tication procedure successfully completes ** - ** reject: Callback function executed when the authen-** - ** tication procedure fails or is rejected ** - ** failure: Callback function executed whener a lower ** - ** layer failure occured before the authenti- ** - ** cation procedure comnpletes ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_authentication(void *ctx, unsigned int ueid, int ksi, - const OctetString *_rand, const OctetString *autn, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure) - -{ - int rc = RETURNerror; - authentication_data_t *data; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Initiate authentication KSI = %d, ctx = %p", ksi, ctx); - - /* Allocate parameters of the retransmission timer callback */ - data = (authentication_data_t *)malloc(sizeof(authentication_data_t)); - - if (data != NULL) { - /* Setup ongoing EMM procedure callback functions */ - rc = emm_proc_common_initialize(ueid, success, reject, failure, - _authentication_abort, data); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "Failed to initialize EMM callback functions"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Set the UE identifier */ - data->ueid = ueid; - /* Reset the retransmission counter */ - data->retransmission_count = 0; - /* Set the key set identifier */ - data->ksi = ksi; - - /* Set the authentication random challenge number */ - if (_rand->length > 0) { - data->rand.value = (uint8_t *)malloc(_rand->length); - data->rand.length = 0; - - if (data->rand.value) { - memcpy(data->rand.value, _rand->value, _rand->length); - data->rand.length = _rand->length; - } - } - - /* Set the authentication token */ - if (autn->length > 0) { - data->autn.value = (uint8_t *)malloc(autn->length); - data->autn.length = 0; - - if (data->autn.value) { - memcpy(data->autn.value, autn->value, autn->length); - data->autn.length = autn->length; - } - } - - /* Set the failure notification indicator */ - data->notify_failure = FALSE; - /* Send authentication request message to the UE */ - rc = _authentication_request(data); - - if (rc != RETURNerror) { - /* - * Notify EMM that common procedure has been initiated - */ - - - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (authentication)", ueid); - - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_authentication_complete() ** - ** ** - ** Description: Performs the authentication completion procedure executed ** - ** by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.4 ** - ** Upon receiving the AUTHENTICATION RESPONSE message, the ** - ** MME shall stop timer T3460 and check the correctness of ** - ** the RES parameter. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: Authentication failure EMM cause code ** - ** res: Authentication response parameter. or auts ** - ** in case of sync failure ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, T3460 ** - ** ** - ***************************************************************************/ -int emm_proc_authentication_complete(unsigned int ueid, int emm_cause, - const OctetString *res) -{ - int rc; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Authentication complete (ueid="NAS_UE_ID_FMT", cause=%d)", - ueid, emm_cause); - - - /* Release retransmission timer paramaters */ - authentication_data_t *data = - (authentication_data_t *)(emm_proc_common_get_args(ueid)); - - if (data) { - if (data->rand.length > 0) { - free(data->rand.value); - } - - if (data->autn.length > 0) { - free(data->autn.value); - } - - free(data); - } - - /* Get the UE context */ - emm_data_context_t *emm_ctx = NULL; -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } -#else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } -#endif - - if (emm_ctx) { - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", data->ueid); - } - if (emm_cause == EMM_CAUSE_SUCCESS) { - /* Check the received RES parameter */ - if ( (emm_ctx == NULL) || - (memcmp(res->value, &emm_ctx->vector.xres, res->length) != 0) ) { - /* RES does not match the XRES parameter */ - LOG_TRACE(WARNING, "EMM-PROC - Failed to authentify the UE"); - emm_cause = EMM_CAUSE_ILLEGAL_UE; - } else { - LOG_TRACE(DEBUG, "EMM-PROC - Success to authentify the UE RESP XRES == XRES UE CONTEXT"); - } - } - - if (emm_cause != EMM_CAUSE_SUCCESS) { - switch (emm_cause) { - -#if defined(NAS_BUILT_IN_EPC) - - case EMM_CAUSE_SYNCH_FAILURE: - /* USIM has detected a mismatch in SQN. - * Ask for a new vector. - */ - MSC_LOG_EVENT( - MSC_NAS_EMM_MME, - "0 SQN SYNCH_FAILURE ue id "NAS_UE_ID_FMT" ", ueid); - - LOG_TRACE(DEBUG, "EMM-PROC - USIM has detected a mismatch in SQN Ask for a new vector"); - nas_itti_auth_info_req(ueid, emm_ctx->imsi, 0, res->value); - - rc = RETURNok; - LOG_FUNC_RETURN (rc); - break; -#endif - - default: - LOG_TRACE(DEBUG, "EMM-PROC - The MME received an authentication failure message or the RES does not match the XRES parameter computed by the network"); - /* The MME received an authentication failure message or the RES - * contained in the Authentication Response message received from - * the UE does not match the XRES parameter computed by the network */ - (void) _authentication_reject(ueid); - /* - * Notify EMM that the authentication procedure failed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); - - - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - break; - } - } else { - /* - * Notify EMM that the authentication procedure successfully completed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" ", ueid); - - LOG_TRACE(DEBUG, "EMM-PROC - Notify EMM that the authentication procedure successfully completed"); - emm_sap.primitive = EMMREG_COMMON_PROC_CNF; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - emm_sap.u.emm_reg.u.common.is_attached = emm_ctx->is_attached; - } - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _authentication_t3460_handler() ** - ** ** - ** Description: T3460 timeout handler ** - ** Upon T3460 timer expiration, the authentication request ** - ** message is retransmitted and the timer restarted. When ** - ** retransmission counter is exceed, the MME shall abort the ** - ** authentication procedure and any ongoing EMM specific ** - ** procedure and release the NAS signalling connection. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.7, case b ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_authentication_t3460_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - authentication_data_t *data = (authentication_data_t *)(args); - - /* Increment the retransmission counter */ - data->retransmission_count += 1; - - LOG_TRACE(WARNING, "EMM-PROC - T3460 timer expired, retransmission " - "counter = %d", data->retransmission_count); - - if (data->retransmission_count < AUTHENTICATION_COUNTER_MAX) { - /* Send authentication request message to the UE */ - rc = _authentication_request(data); - } else { - unsigned int ueid = data->ueid; - /* Set the failure notification indicator */ - data->notify_failure = TRUE; - /* Abort the authentication procedure */ - rc = _authentication_abort(data); - - /* Release the NAS signalling connection */ - if (rc != RETURNerror) { - emm_sap_t emm_sap; - emm_sap.primitive = EMMAS_RELEASE_REQ; - emm_sap.u.emm_as.u.release.guti = NULL; - emm_sap.u.emm_as.u.release.ueid = ueid; - emm_sap.u.emm_as.u.release.cause = EMM_AS_CAUSE_AUTHENTICATION; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _authentication_request() ** - ** ** - ** Description: Sends AUTHENTICATION REQUEST message and start timer T3460** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -int _authentication_request(authentication_data_t *data) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - struct emm_data_context_s *emm_ctx; - - /* - * Notify EMM-AS SAP that Authentication Request message has to be sent - * to the UE - */ - emm_sap.primitive = EMMAS_SECURITY_REQ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = data->ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; - emm_sap.u.emm_as.u.security.ksi = data->ksi; - emm_sap.u.emm_as.u.security.rand = &data->rand; - emm_sap.u.emm_as.u.security.autn = &data->autn; - - /* TODO: check for pointer validity */ -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); -#else - emm_ctx = _emm_data.ctx[data->ueid]; -#endif - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, FALSE, TRUE); - - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); - - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - if (emm_ctx) { - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3460 timer */ - emm_ctx->T3460.id = nas_timer_restart(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 restarted UE "NAS_UE_ID_FMT" ", data->ueid); - } else { - /* Start T3460 timer */ - emm_ctx->T3460.id = nas_timer_start(emm_ctx->T3460.sec, _authentication_t3460_handler, - data); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 started UE "NAS_UE_ID_FMT" ", data->ueid); - } - } - - LOG_TRACE(INFO,"EMM-PROC - Timer T3460 (%d) expires in %ld seconds", - emm_ctx->T3460.id, emm_ctx->T3460.sec); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _authentication_reject() ** - ** ** - ** Description: Sends AUTHENTICATION REJECT message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _authentication_reject(unsigned int ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - struct emm_data_context_s *emm_ctx; - - /* - * Notify EMM-AS SAP that Authentication Reject message has to be sent - * to the UE - */ - emm_sap.primitive = EMMAS_SECURITY_REJ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; - -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, ueid); -#else - emm_ctx = _emm_data.ctx[ueid]; -#endif - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _authentication_abort() ** - ** ** - ** Description: Aborts the authentication procedure currently in progress ** - ** ** - ** Inputs: args: Authentication data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -static int _authentication_abort(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - struct emm_data_context_s *emm_ctx; - - authentication_data_t *data = (authentication_data_t *)(args); - - if (data) { - unsigned int ueid = data->ueid; - int notify_failure = data->notify_failure; - - LOG_TRACE(WARNING, "EMM-PROC - Abort authentication procedure " - "(ueid="NAS_UE_ID_FMT")", ueid); -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, ueid); -#else - emm_ctx = _emm_data.ctx[ueid]; -#endif - if (emm_ctx) { - /* Stop timer T3460 */ - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", data->ueid); - } - } - - /* Release retransmission timer paramaters */ - if (data->rand.length > 0) { - free(data->rand.value); - } - - if (data->autn.length > 0) { - free(data->autn.value); - } - - free(data); - - /* - * Notify EMM that the authentication procedure failed - */ - if (notify_failure) { - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - rc = emm_sap_send(&emm_sap); - } else { - rc = RETURNok; - } - } - - LOG_FUNC_RETURN (rc); -} - - diff --git a/openair-cn/NAS/MME/EMM/COPYING b/openair-cn/NAS/MME/EMM/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/MME/EMM/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/MME/EMM/Detach.c b/openair-cn/NAS/MME/EMM/Detach.c deleted file mode 100644 index 1ba60e5b6d..0000000000 --- a/openair-cn/NAS/MME/EMM/Detach.c +++ /dev/null @@ -1,346 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source Detach.c - -Version 0.1 - -Date 2013/05/07 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the detach related EMM procedure executed by the - Non-Access Stratum. - - The detach procedure is used by the UE to detach for EPS servi- - ces, to disconnect from the last PDN it is connected to; by the - network to inform the UE that it is detached for EPS services - or non-EPS services or both, to disconnect the UE from the last - PDN to which it is connected and to inform the UE to re-attach - to the network and re-establish all PDN connections. - -*****************************************************************************/ - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "esm_sap.h" -#include "msc.h" - -#include // free - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* String representation of the detach type */ -static const char *_emm_detach_type_str[] = { - "EPS", "IMSI", "EPS/IMSI", - "RE-ATTACH REQUIRED", "RE-ATTACH NOT REQUIRED", "RESERVED" -}; - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the detach procedure in the UE - * -------------------------------------------------------------------------- - */ - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the detach procedure in the MME - * -------------------------------------------------------------------------- - */ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Detach procedure executed by the UE - * -------------------------------------------------------------------------- - */ - -/* - * -------------------------------------------------------------------------- - * Detach procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_proc_detach() ** - ** ** - ** Description: Initiate the detach procedure to inform the UE that it is ** - ** detached for EPS services, or to re-attach to the network ** - ** and re-establish all PDN connections. ** - ** ** - ** 3GPP TS 24.301, section 5.5.2.3.1 ** - ** In state EMM-REGISTERED the network initiates the detach ** - ** procedure by sending a DETACH REQUEST message to the UE, ** - ** starting timer T3422 and entering state EMM-DEREGISTERED- ** - ** INITIATED. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested detach ** - ** Others: _emm_detach_type_str ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3422 ** - ** ** - ***************************************************************************/ -int emm_proc_detach(unsigned int ueid, emm_proc_detach_type_t type) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMM-PROC - Initiate detach type = %s (%d)", - _emm_detach_type_str[type], type); - - /* TODO */ - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_detach_request() ** - ** ** - ** Description: Performs the UE initiated detach procedure for EPS servi- ** - ** ces only When the DETACH REQUEST message is received by ** - ** the network. ** - ** ** - ** 3GPP TS 24.301, section 5.5.2.2.2 ** - ** Upon receiving the DETACH REQUEST message the network ** - ** shall send a DETACH ACCEPT message to the UE and store ** - ** the current EPS security context, if the detach type IE ** - ** does not indicate "switch off". Otherwise, the procedure ** - ** is completed when the network receives the DETACH REQUEST ** - ** message. ** - ** The network shall deactivate the EPS bearer context(s) ** - ** for this UE locally without peer-to-peer signalling and ** - ** shall enter state EMM-DEREGISTERED. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested detach ** - ** switch_off: Indicates whether the detach is required ** - ** because the UE is switched off or not ** - ** native_ksi: TRUE if the security context is of type ** - ** native ** - ** ksi: The NAS ket sey identifier ** - ** guti: The GUTI if provided by the UE ** - ** imsi: The IMSI if provided by the UE ** - ** imei: The IMEI if provided by the UE ** - ** Others: _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_detach_request(unsigned int ueid, emm_proc_detach_type_t type, - int switch_off, int native_ksi, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei) -{ - LOG_FUNC_IN; - - int rc; - emm_data_context_t *emm_ctx = NULL; - - LOG_TRACE(INFO, "EMM-PROC - Detach type = %s (%d) requested (ueid="NAS_UE_ID_FMT")", - _emm_detach_type_str[type], type, ueid); - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - -#endif - - if (emm_ctx == NULL) { - LOG_TRACE(WARNING, "No EMM context exists for the UE (ueid="NAS_UE_ID_FMT")", ueid); - LOG_FUNC_RETURN(RETURNok); - } - - if (switch_off) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, - "0 Removing UE context ue id "NAS_UE_ID_FMT" ", ueid); - /* The UE is switched off */ - if (emm_ctx->guti) { - free(emm_ctx->guti); - } - - if (emm_ctx->imsi) { - free(emm_ctx->imsi); - } - - if (emm_ctx->imei) { - free(emm_ctx->imei); - } - - if (emm_ctx->esm_msg.length > 0) { - free(emm_ctx->esm_msg.value); - } - - /* Release NAS security context */ - if (emm_ctx->security) { - emm_security_context_t *security = emm_ctx->security; - - if (security->kasme.value) { - free(security->kasme.value); - } - - if (security->knas_enc.value) { - free(security->knas_enc.value); - } - - if (security->knas_int.value) { - free(security->knas_int.value); - } - - free(emm_ctx->security); - } - /* Stop timer T3450 */ - if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); - emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - /* Stop timer T3460 */ - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - /* Stop timer T3470 */ - if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3460.id); - emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); - } - /* Release the EMM context */ -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_remove(&_emm_data, emm_ctx); - free(emm_ctx); -#else - free(_emm_data.ctx[ueid]); - _emm_data.ctx[ueid] = NULL; -#endif - rc = RETURNok; - } else { - /* Normal detach without UE switch-off */ - emm_sap_t emm_sap; - emm_as_data_t *emm_as = &emm_sap.u.emm_as.u.data; - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMM_AS_NAS_INFO_DETACH ue id "NAS_UE_ID_FMT" ", ueid); - - /* Setup NAS information message to transfer */ - emm_as->NASinfo = EMM_AS_NAS_INFO_DETACH; - emm_as->NASmsg.length = 0; - emm_as->NASmsg.value = NULL; - /* Set the UE identifier */ - emm_as->guti = NULL; - emm_as->ueid = ueid; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_as->sctx, emm_ctx->security, FALSE, TRUE); - /* - * Notify EMM-AS SAP that Detach Accept message has to - * be sent to the network - */ - emm_sap.primitive = EMMAS_DATA_REQ; - rc = emm_sap_send(&emm_sap); - } - - if (rc != RETURNerror) { - /* - * Notify ESM that all EPS bearer contexts allocated for this UE have - * to be locally deactivated - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_ESM_MME, - NULL,0, - "0 ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ ue id "NAS_UE_ID_FMT" ", ueid); - esm_sap_t esm_sap; - esm_sap.primitive = ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ; - esm_sap.ueid = ueid; - esm_sap.ctx = emm_ctx; - esm_sap.data.eps_bearer_context_deactivate.ebi = ESM_SAP_ALL_EBI; - rc = esm_sap_send(&esm_sap); - - if (rc != RETURNerror) { - emm_sap_t emm_sap; - /* - * Notify EMM that the UE has been implicitly detached - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_DETACH_REQ ue id "NAS_UE_ID_FMT" ", ueid); - emm_sap.primitive = EMMREG_DETACH_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN(rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/EmmCommon.c b/openair-cn/NAS/MME/EMM/EmmCommon.c deleted file mode 100644 index a30c7675d8..0000000000 --- a/openair-cn/NAS/MME/EMM/EmmCommon.c +++ /dev/null @@ -1,514 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EmmCommon.h - -Version 0.1 - -Date 2013/04/19 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines callback functions executed within EMM common procedures - by the Non-Access Stratum running at the network side. - - Following EMM common procedures can always be initiated by the - network whilst a NAS signalling connection exists: - - GUTI reallocation - authentication - security mode control - identification - EMM information - -*****************************************************************************/ - - -#include "EmmCommon.h" - -#include "commonDef.h" -#include "nas_log.h" -#include "emmData.h" - -#include // malloc, free -#include -#include - -#if defined(NAS_BUILT_IN_EPC) -# include "assertions.h" -#endif - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* EMM procedure callback cleanup function */ -static void _emm_common_cleanup(unsigned int ueid); - -/* Ongoing EMM procedure callback functions */ -typedef struct emm_common_data_s { - unsigned int ueid; - int ref_count; - emm_common_success_callback_t success; - emm_common_reject_callback_t reject; - emm_common_failure_callback_t failure; - emm_common_abort_callback_t abort; - void *args; - -#if defined(NAS_BUILT_IN_EPC) - RB_ENTRY(emm_common_data_s) entries; -#endif -} emm_common_data_t; - -#if defined(NAS_BUILT_IN_EPC) -typedef struct emm_common_data_head_s { - RB_HEAD(emm_common_data_map, emm_common_data_s) emm_common_data_root; -} emm_common_data_head_t; - -emm_common_data_head_t emm_common_data_head = { RB_INITIALIZER() }; - -static inline -int emm_common_data_compare_ueid(struct emm_common_data_s *p1, - struct emm_common_data_s *p2); -struct emm_common_data_s *emm_common_data_context_get( - struct emm_common_data_head_s *root, unsigned int _ueid); - -RB_PROTOTYPE(emm_common_data_map, emm_common_data_s, entries, - emm_common_data_compare_ueid); - -/* Generate functions used for the MAP */ -RB_GENERATE(emm_common_data_map, emm_common_data_s, entries, - emm_common_data_compare_ueid); - -static inline -int emm_common_data_compare_ueid(struct emm_common_data_s *p1, - struct emm_common_data_s *p2) -{ - if (p1->ueid > p2->ueid) { - return 1; - } - - if (p1->ueid < p2->ueid) { - return -1; - } - - /* Matching reference -> return 0 */ - return 0; -} - -struct emm_common_data_s *emm_common_data_context_get( - struct emm_common_data_head_s *root, unsigned int _ueid) -{ - struct emm_common_data_s reference; - - DevAssert(root != NULL); - DevCheck(_ueid > 0, _ueid, 0, 0); - - memset(&reference, 0, sizeof(struct emm_common_data_s)); - reference.ueid = _ueid; - return RB_FIND(emm_common_data_map, &root->emm_common_data_root, &reference); -} -#else -static emm_common_data_t *_emm_common_data[EMM_DATA_NB_UE_MAX]; -#endif - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_initialize() ** - ** ** - ** Description: Initialize EMM procedure callback functions executed for ** - ** the UE with the given identifier ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** success: EMM procedure executed upon successful EMM ** - ** common procedure completion ** - ** reject: EMM procedure executed if the EMM common ** - ** procedure failed or is rejected ** - ** failure: EMM procedure executed upon transmission ** - ** failure reported by lower layer ** - ** abort: EMM common procedure executed when the on- ** - ** going EMM procedure is aborted ** - ** args: EMM common procedure argument parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_common_data ** - ** ** - ***************************************************************************/ -int emm_proc_common_initialize(unsigned int ueid, - emm_common_success_callback_t _success, - emm_common_reject_callback_t _reject, - emm_common_failure_callback_t _failure, - emm_common_abort_callback_t _abort, - void *args) -{ - struct emm_common_data_s *emm_common_data_ctx = NULL; - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - assert(ueid > 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); -#endif - - if (emm_common_data_ctx == NULL) { - emm_common_data_ctx = (emm_common_data_t *)malloc(sizeof(emm_common_data_t)); - emm_common_data_ctx->ueid = ueid; -#if defined(NAS_BUILT_IN_EPC) - RB_INSERT(emm_common_data_map, &emm_common_data_head.emm_common_data_root, - emm_common_data_ctx); -#endif - - if (emm_common_data_ctx) { - emm_common_data_ctx->ref_count = 0; - } - } - - if (emm_common_data_ctx) { - emm_common_data_ctx->ref_count += 1; - emm_common_data_ctx->success = _success; - emm_common_data_ctx->reject = _reject; - emm_common_data_ctx->failure = _failure; - emm_common_data_ctx->abort = _abort; - emm_common_data_ctx->args = args; - LOG_FUNC_RETURN(RETURNok); - } - - LOG_FUNC_RETURN(RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_success() ** - ** ** - ** Description: The EMM common procedure initiated between the UE with ** - ** the specified identifier and the MME completed success- ** - ** fully. The network performs required actions related to ** - ** the ongoing EMM procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: _emm_common_data, _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_common_success(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - emm_common_success_callback_t emm_callback; - - int rc = RETURNerror; - - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - - assert(emm_common_data_ctx != NULL); - - emm_callback = emm_common_data_ctx->success; - - if (emm_callback) { - struct emm_data_context_s *ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif - rc = (*emm_callback)(ctx); - } - - _emm_common_cleanup(ueid); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_reject() ** - ** ** - ** Description: The EMM common procedure initiated between the UE with ** - ** the specified identifier and the MME failed or has been ** - ** rejected. The network performs required actions related ** - ** to the ongoing EMM procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: _emm_common_data, _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_common_reject(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - int rc = RETURNerror; - emm_common_reject_callback_t emm_callback; - - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - - assert(emm_common_data_ctx != NULL); - - emm_callback = emm_common_data_ctx->reject; - - if (emm_callback) { - struct emm_data_context_s *ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif - rc = (*emm_callback)(ctx); - } - - _emm_common_cleanup(ueid); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_failure() ** - ** ** - ** Description: The EMM common procedure has been initiated between the ** - ** UE with the specified identifier and the MME, and a lower ** - ** layer failure occurred before the EMM common procedure ** - ** being completed. The network performs required actions ** - ** related to the ongoing EMM procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: _emm_common_data, _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_common_failure(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - emm_common_failure_callback_t emm_callback; - - int rc = RETURNerror; - - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - assert(emm_common_data_ctx != NULL); - - emm_callback = emm_common_data_ctx->failure; - - if (emm_callback) { - struct emm_data_context_s *ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif - rc = (*emm_callback)(ctx); - } - - _emm_common_cleanup(ueid); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_abort() ** - ** ** - ** Description: The ongoing EMM procedure has been aborted. The network ** - ** performs required actions related to the EMM common pro- ** - ** cedure previously initiated between the UE with the spe- ** - ** cified identifier and the MME. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: _emm_common_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_common_abort(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - emm_common_failure_callback_t emm_callback; - - int rc = RETURNerror; - - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - assert(emm_common_data_ctx != NULL); - - emm_callback = emm_common_data_ctx->abort; - - if (emm_callback) { - struct emm_data_context_s *ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif - rc = (*emm_callback)(ctx); - } - - _emm_common_cleanup(ueid); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_get_args() ** - ** ** - ** Description: Returns pointer to the EMM common procedure argument pa- ** - ** rameters allocated for the UE with the given identifier. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: _emm_common_data ** - ** ** - ** Outputs: None ** - ** Return: pointer to the EMM common procedure argu- ** - ** ment parameters ** - ** Others: None ** - ** ** - ***************************************************************************/ -void *emm_proc_common_get_args(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - assert(emm_common_data_ctx != NULL); - - LOG_FUNC_RETURN(emm_common_data_ctx->args); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_proc_common_cleanup() ** - ** ** - ** Description: Cleans EMM procedure callback functions upon completion ** - ** of an EMM common procedure previously initiated within an ** - ** EMM procedure currently in progress between the network ** - ** and the UE with the specified identifier. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _emm_common_data ** - ** ** - ***************************************************************************/ -static void _emm_common_cleanup(unsigned int ueid) -{ - emm_common_data_t *emm_common_data_ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - DevCheck(ueid > 0, ueid, 0, 0); - emm_common_data_ctx = emm_common_data_context_get(&emm_common_data_head, ueid); -#else - assert(ueid < EMM_DATA_NB_UE_MAX); - emm_common_data_ctx = _emm_common_data[ueid]; -#endif - - if (emm_common_data_ctx) { - emm_common_data_ctx->ref_count -= 1; - - if (emm_common_data_ctx->ref_count == 0) { - /* Release the callback functions */ -#if defined(NAS_BUILT_IN_EPC) - RB_REMOVE(emm_common_data_map, - &emm_common_data_head.emm_common_data_root, - emm_common_data_ctx); -#endif - free(emm_common_data_ctx); - emm_common_data_ctx = NULL; - } - } -} diff --git a/openair-cn/NAS/MME/EMM/EmmCommon.h b/openair-cn/NAS/MME/EMM/EmmCommon.h deleted file mode 100644 index f09e4954ea..0000000000 --- a/openair-cn/NAS/MME/EMM/EmmCommon.h +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EmmCommon.h - -Version 0.1 - -Date 2013/04/19 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines callback functions executed within EMM common procedures - by the Non-Access Stratum running at the network side. - - Following EMM common procedures can always be initiated by the - network whilst a NAS signalling connection exists: - - GUTI reallocation - authentication - security mode control - identification - EMM information - -*****************************************************************************/ -#ifndef __EMM_COMMON_H__ -#define __EMM_COMMON_H__ - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * Type of EMM procedure callback functions - * ---------------------------------------- - * EMM procedure to be executed under certain conditions, when an EMM common - * procedure has been initiated by the ongoing EMM procedure. - * - The EMM common procedure successfully completed - * - The EMM common procedure failed or is rejected - * - Lower layer failure occured before the EMM common procedure completion - */ -typedef int (*emm_common_success_callback_t)(void *); -typedef int (*emm_common_reject_callback_t) (void *); -typedef int (*emm_common_failure_callback_t)(void *); - -/* - * Type of EMM common procedure callback function - * ---------------------------------------------- - * EMM common procedure to be executed when the ongoing EMM procedure is - * aborted. - */ -typedef int (*emm_common_abort_callback_t)(void *); - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int emm_proc_common_initialize(unsigned int ueid, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure, - emm_common_abort_callback_t abort, - void *args); - -int emm_proc_common_success(unsigned int ueid); -int emm_proc_common_reject(unsigned int ueid); -int emm_proc_common_failure(unsigned int ueid); -int emm_proc_common_abort(unsigned int ueid); - -void *emm_proc_common_get_args(unsigned int ueid); - -#endif /* __EMM_COMMON_H__*/ diff --git a/openair-cn/NAS/MME/EMM/EmmStatusHdl.c b/openair-cn/NAS/MME/EMM/EmmStatusHdl.c deleted file mode 100644 index fec9f2314f..0000000000 --- a/openair-cn/NAS/MME/EMM/EmmStatusHdl.c +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source Emmstatus.c - -Version 0.1 - -Date 2013/06/26 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMM status procedure executed by the Non-Access - Stratum. - - The purpose of the sending of the EMM STATUS message is to - report at any time certain error conditions detected upon - receipt of EMM protocol data. The EMM STATUS message can be - sent by both the MME and the UE. - -*****************************************************************************/ - -#include "emm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_cause.h" -#include "emmData.h" - -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_proc_status_ind() ** - ** ** - ** Description: Processes received EMM status message. ** - ** ** - ** 3GPP TS 24.301, section 5.7 ** - ** On receipt of an EMM STATUS message no state transition ** - ** and no specific action shall be taken. Local actions are ** - ** possible and are implementation dependent. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: Received EMM cause code ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_status_ind(unsigned int ueid, int emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO,"EMM-PROC - EMM status procedure requested (cause=%d)", - emm_cause); - - LOG_TRACE(DEBUG, "EMM-PROC - To be implemented"); - - /* TODO */ - rc = RETURNok; - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_status() ** - ** ** - ** Description: Initiates EMM status procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: EMM cause code to be reported ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_status(unsigned int ueid, int emm_cause) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - - emm_security_context_t *sctx = NULL; - struct emm_data_context_s *ctx = NULL; - - LOG_TRACE(INFO,"EMM-PROC - EMM status procedure requested"); - - /* - * Notity EMM that EMM status indication has to be sent to lower layers - */ - emm_sap.primitive = EMMAS_STATUS_IND; - emm_sap.u.emm_as.u.status.emm_cause = emm_cause; - emm_sap.u.emm_as.u.status.ueid = ueid; - emm_sap.u.emm_as.u.status.guti = NULL; -# if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -# else - ctx = _emm_data.ctx[ueid]; -# endif - - if (ctx) { - sctx = ctx->security; - } - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.status.sctx, sctx, - FALSE, TRUE); - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ diff --git a/openair-cn/NAS/MME/EMM/Identification.c b/openair-cn/NAS/MME/EMM/Identification.c deleted file mode 100644 index a4e34f5be3..0000000000 --- a/openair-cn/NAS/MME/EMM/Identification.c +++ /dev/null @@ -1,538 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source Identification.c - -Version 0.1 - -Date 2013/04/09 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the identification EMM procedure executed by the - Non-Access Stratum. - - The identification procedure is used by the network to request - a particular UE to provide specific identification parameters - (IMSI, IMEI). - -*****************************************************************************/ - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "msc.h" - -#include // malloc, free -#include // memcpy - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* String representation of the requested identity type */ -static const char *_emm_identity_type_str[] = { - "NOT AVAILABLE", "IMSI", "IMEI", "IMEISV", "TMSI" -}; - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the identification procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_identification_t3470_handler(void *); - -/* - * Function executed whenever the ongoing EMM procedure that initiated - * the identification procedure is aborted or the maximum value of the - * retransmission timer counter is exceed - */ -static int _identification_abort(void *); - -/* - * Internal data used for identification procedure - */ -typedef struct { - unsigned int ueid; /* UE identifier */ -#define IDENTIFICATION_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - emm_proc_identity_type_t type; /* Type of UE identity */ - int notify_failure; /* Indicates whether the identification - * procedure failure shall be notified - * to the ongoing EMM procedure */ -} identification_data_t; - -static int _identification_request(identification_data_t *data); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Identification procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/******************************************************************** - ** ** - ** Name: emm_proc_identification() ** - ** ** - ** Description: Initiates an identification procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.4.2 ** - ** The network initiates the identification procedure by ** - ** sending an IDENTITY REQUEST message to the UE and star- ** - ** ting the timer T3470. The IDENTITY REQUEST message speci- ** - ** fies the requested identification parameters in the Iden- ** - ** tity type information element. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested identity ** - ** success: Callback function executed when the identi- ** - ** fication procedure successfully completes ** - ** reject: Callback function executed when the identi- ** - ** fication procedure fails or is rejected ** - ** failure: Callback function executed whener a lower ** - ** layer failure occured before the identifi- ** - ** cation procedure completes ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ********************************************************************/ -int emm_proc_identification(unsigned int ueid, - emm_data_context_t *emm_ctx, - emm_proc_identity_type_t type, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMM-PROC - Initiate identification type = %s (%d), ctx = %p", - _emm_identity_type_str[type], type, emm_ctx); - - /* Allocate parameters of the retransmission timer callback */ - identification_data_t *data = - (identification_data_t *)malloc(sizeof(identification_data_t)); - - if (data != NULL) { - /* Setup ongoing EMM procedure callback functions */ - rc = emm_proc_common_initialize(ueid, success, reject, failure, - _identification_abort, data); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "Failed to initialize EMM callback functions"); - free(data); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Set the UE identifier */ - data->ueid = ueid; - /* Reset the retransmission counter */ - data->retransmission_count = 0; - /* Set the type of the requested identity */ - data->type = type; - /* Set the failure notification indicator */ - data->notify_failure = FALSE; - /* Send identity request message to the UE */ - rc = _identification_request(data); - - if (rc != RETURNerror) { - /* - * Notify EMM that common procedure has been initiated - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (identification)", ueid); - - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_identification_complete() ** - ** ** - ** Description: Performs the identification completion procedure executed ** - ** by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.4.4.4 ** - ** Upon receiving the IDENTITY RESPONSE message, the MME ** - ** shall stop timer T3470. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** imsi: The IMSI received from the UE ** - ** imei: The IMEI received from the UE ** - ** tmsi: The TMSI received from the UE ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, T3470 ** - ** ** - ***************************************************************************/ -int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, - const imei_t *imei, uint32_t *tmsi) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - emm_data_context_t *emm_ctx = NULL; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Identification complete (ueid="NAS_UE_ID_FMT")", ueid); - - /* Release retransmission timer paramaters */ - identification_data_t *data = - (identification_data_t *)(emm_proc_common_get_args(ueid)); - if (data) { - free(data); - } - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } -#else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } -#endif - - if (emm_ctx) { - /* Stop timer T3470 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3470.id); - emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", ueid); - - if (imsi) { - /* Update the IMSI */ - if (emm_ctx->imsi == NULL) { - emm_ctx->imsi = (imsi_t *)malloc(sizeof(imsi_t)); - } - - if (emm_ctx->imsi) { - memcpy(emm_ctx->imsi, imsi, sizeof(imsi_t)); - } - } else if (imei) { - /* Update the IMEI */ - if (emm_ctx->imei == NULL) { - emm_ctx->imei = (imei_t *)malloc(sizeof(imei_t)); - } - - if (emm_ctx->imei) { - memcpy(emm_ctx->imei, imei, sizeof(imei_t)); - } - } else if (tmsi) { - /* Update the GUTI */ - if (emm_ctx->guti == NULL) { - emm_ctx->guti = (GUTI_t *)malloc(sizeof(GUTI_t)); - } - - if (emm_ctx->guti) { - memcpy(&emm_ctx->guti->gummei, - &_emm_data.conf.gummei, sizeof(gummei_t)); - emm_ctx->guti->m_tmsi = *tmsi; - } - } - - /* - * Notify EMM that the identification procedure successfully completed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" ", ueid); - - emm_sap.primitive = EMMREG_COMMON_PROC_CNF; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - emm_sap.u.emm_reg.u.common.is_attached = emm_ctx->is_attached; - } else { - LOG_TRACE(ERROR, "EMM-PROC - No EMM context exists"); - /* - * Notify EMM that the identification procedure failed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); - - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - } - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _identification_t3470_handler() ** - ** ** - ** Description: T3470 timeout handler ** - ** Upon T3470 timer expiration, the identification request ** - ** message is retransmitted and the timer restarted. When ** - ** retransmission counter is exceed, the MME shall abort the ** - ** identification procedure and any ongoing EMM procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.4.6, case b ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_identification_t3470_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - identification_data_t *data = (identification_data_t *)(args); - - /* Increment the retransmission counter */ - data->retransmission_count += 1; - - LOG_TRACE(WARNING, "EMM-PROC - T3470 timer expired, retransmission " - "counter = %d", data->retransmission_count); - - if (data->retransmission_count < IDENTIFICATION_COUNTER_MAX) { - /* Send identity request message to the UE */ - rc = _identification_request(data); - } else { - /* Set the failure notification indicator */ - data->notify_failure = TRUE; - /* Abort the identification procedure */ - rc = _identification_abort(data); - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _identification_request() ** - ** ** - ** Description: Sends IDENTITY REQUEST message and start timer T3470. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: T3470 ** - ** ** - ***************************************************************************/ -int _identification_request(identification_data_t *data) -{ - emm_sap_t emm_sap; - int rc; - - struct emm_data_context_s *emm_ctx = NULL; - - LOG_FUNC_IN; - - /* - * Notify EMM-AS SAP that Identity Request message has to be sent - * to the UE - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); - - emm_sap.primitive = EMMAS_SECURITY_REQ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = data->ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_IDENT; - emm_sap.u.emm_as.u.security.identType = data->type; - -#if defined(NAS_BUILT_IN_EPC) - if (data->ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); - } -#else - if (data->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[data->ueid]; - } -#endif - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3470 timer */ - emm_ctx->T3470.id = nas_timer_restart(emm_ctx->T3470.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 restarted UE "NAS_UE_ID_FMT" ", data->ueid); - } else { - /* Start T3470 timer */ - emm_ctx->T3470.id = nas_timer_start(emm_ctx->T3470.sec, _identification_t3470_handler, - data); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 started UE "NAS_UE_ID_FMT" ", data->ueid); - } - - LOG_TRACE(INFO,"EMM-PROC - Timer T3470 (%d) expires in %ld seconds", - emm_ctx->T3470.id, emm_ctx->T3470.sec); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _identification_abort() ** - ** ** - ** Description: Aborts the identification procedure currently in progress ** - ** ** - ** Inputs: args: Identification data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: T3470 ** - ** ** - ***************************************************************************/ -static int _identification_abort(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - identification_data_t *data = (identification_data_t *)(args); - - if (data) { - unsigned int ueid = data->ueid; - int notify_failure = data->notify_failure; - struct emm_data_context_s *emm_ctx = NULL; - /* Get the UE context */ - #if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - #else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - #endif - LOG_TRACE(WARNING, "EMM-PROC - Abort identification procedure " - "(ueid="NAS_UE_ID_FMT")", ueid); - - /* Stop timer T3470 */ - if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3470.id); - emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", data->ueid); - } - - /* Release retransmission timer paramaters */ - free(data); - - /* - * Notify EMM that the identification procedure failed - */ - if (notify_failure) { - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - rc = emm_sap_send(&emm_sap); - } else { - rc = RETURNok; - } - } - - LOG_FUNC_RETURN(rc); -} - - diff --git a/openair-cn/NAS/MME/EMM/IdleMode.c b/openair-cn/NAS/MME/EMM/IdleMode.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/IdleMode.h b/openair-cn/NAS/MME/EMM/IdleMode.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/LowerLayer.c b/openair-cn/NAS/MME/EMM/LowerLayer.c deleted file mode 100644 index 2012164975..0000000000 --- a/openair-cn/NAS/MME/EMM/LowerLayer.c +++ /dev/null @@ -1,384 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source LowerLayer.c - -Version 0.1 - -Date 2012/03/14 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines EMM procedures executed by the Non-Access Stratum - upon receiving notifications from lower layers so that data - transfer succeed or failed, or NAS signalling connection is - released, or ESM unit data has been received from under layer, - and to request ESM unit data transfer to under layer. - -*****************************************************************************/ - -#include "LowerLayer.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "esm_sap.h" -#include "nas_log.h" - -#include // memset - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Lower layer notification handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: lowerlayer_success() ** - ** ** - ** Description: Notify the EPS Mobility Management entity that data have ** - ** been successfully delivered to the network ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_success(unsigned int ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - emm_sap.primitive = EMMREG_LOWERLAYER_SUCCESS; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = NULL; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: lowerlayer_failure() ** - ** ** - ** Description: Notify the EPS Mobility Management entity that lower la- ** - ** yers failed to deliver data to the network ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_failure(unsigned int ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - emm_sap.primitive = EMMREG_LOWERLAYER_FAILURE; - emm_sap.u.emm_reg.ueid = ueid; -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = NULL; - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - emm_sap.u.emm_reg.ctx = emm_ctx; -#else - emm_sap.u.emm_reg.ctx = NULL; -#endif - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: lowerlayer_establish() ** - ** ** - ** Description: Update the EPS connection management status upon recei- ** - ** ving indication so that the NAS signalling connection is ** - ** established ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_establish(void) -{ - LOG_FUNC_IN; - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: lowerlayer_release() ** - ** ** - ** Description: Notify the EPS Mobility Management entity that NAS signal-** - ** ling connection has been released ** - ** ** - ** Inputs: cause: Release cause ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_release(int cause) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - emm_sap.primitive = EMMREG_LOWERLAYER_RELEASE; - emm_sap.u.emm_reg.ueid = 0; - emm_sap.u.emm_reg.ctx = NULL; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: lowerlayer_data_ind() ** - ** ** - ** Description: Notify the EPS Session Management entity that data have ** - ** been received from lower layers ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** data: Data transfered from lower layers ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_data_ind(unsigned int ueid, const OctetString *data) -{ - esm_sap_t esm_sap; - int rc; - emm_data_context_t *emm_ctx = NULL; - - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#endif - - esm_sap.primitive = ESM_UNITDATA_IND; - esm_sap.is_standalone = TRUE; - esm_sap.ueid = ueid; - esm_sap.ctx = emm_ctx; - esm_sap.recv = data; - rc = esm_sap_send(&esm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: lowerlayer_data_req() ** - ** ** - ** Description: Notify the EPS Mobility Management entity that data have ** - ** to be transfered to lower layers ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** data: Data to be transfered to lower layers ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int lowerlayer_data_req(unsigned int ueid, const OctetString *data) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - emm_security_context_t *sctx = NULL; - struct emm_data_context_s *ctx = NULL; - - emm_sap.primitive = EMMAS_DATA_REQ; - emm_sap.u.emm_as.u.data.guti = NULL; - emm_sap.u.emm_as.u.data.ueid = ueid; -# if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - ctx = emm_data_context_get(&_emm_data, ueid); - } - -# else - - if (ueid < EMM_DATA_NB_UE_MAX) { - ctx = _emm_data.ctx[ueid]; - } - -# endif - - if (ctx) { - sctx = ctx->security; - } - emm_sap.u.emm_as.u.data.NASinfo = 0; - emm_sap.u.emm_as.u.data.NASmsg.length = data->length; - emm_sap.u.emm_as.u.data.NASmsg.value = data->value; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.data.sctx, sctx, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/* - * -------------------------------------------------------------------------- - * EMM procedure handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: emm_as_set_security_data() ** - ** ** - ** Description: Setup security data according to the given EPS security ** - ** context when data transfer to lower layers is requested ** - ** ** - ** Inputs: args: EPS security context currently in use ** - ** is_new: Indicates whether a new security context ** - ** has just been taken into use ** - ** is_ciphered: Indicates whether the NAS message has to ** - ** be sent ciphered ** - ** Others: None ** - ** ** - ** Outputs: data: EPS NAS security data to be setup ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void emm_as_set_security_data(emm_as_security_data_t *data, const void *args, - int is_new, int is_ciphered) -{ - LOG_FUNC_IN; - - const emm_security_context_t *context = (emm_security_context_t *)(args); - - memset(data, 0, sizeof(emm_as_security_data_t)); - - if ( context && (context->type != EMM_KSI_NOT_AVAILABLE) ) { - /* 3GPP TS 24.301, sections 5.4.3.3 and 5.4.3.4 - * Once a valid EPS security context exists and has been taken - * into use, UE and MME shall cipher and integrity protect all - * NAS signalling messages with the selected NAS ciphering and - * NAS integrity algorithms */ - LOG_TRACE(INFO, - "EPS security context exists is new %u KSI %u SQN %u count %u", - is_new, - context->eksi, - context->ul_count.seq_num, - *(uint32_t *)(&context->ul_count)); - LOG_TRACE(INFO, - "knas_int %s",dump_octet_string(&context->knas_int)); - LOG_TRACE(INFO, - "knas_enc %s",dump_octet_string(&context->knas_enc)); - LOG_TRACE(INFO, - "kasme %s",dump_octet_string(&context->kasme)); - - data->is_new = is_new; - data->ksi = context->eksi; - data->sqn = context->dl_count.seq_num; - // LG data->count = *(uint32_t *)(&context->ul_count); - data->count = 0x00000000 | (context->dl_count.overflow << 8 ) | context->dl_count.seq_num; - /* NAS integrity and cyphering keys may not be available if the - * current security context is a partial EPS security context - * and not a full native EPS security context */ - data->k_int = &context->knas_int; - - if (is_ciphered) { - /* 3GPP TS 24.301, sections 4.4.5 - * When the UE establishes a new NAS signalling connection, - * it shall send initial NAS messages integrity protected - * and unciphered */ - /* 3GPP TS 24.301, section 5.4.3.2 - * The MME shall send the SECURITY MODE COMMAND message integrity - * protected and unciphered */ - LOG_TRACE(WARNING, - "EPS security context exists knas_enc"); - data->k_enc = &context->knas_enc; - } - } else { - LOG_TRACE(WARNING, "EMM_AS_NO_KEY_AVAILABLE"); - /* No valid EPS security context exists */ - data->ksi = EMM_AS_NO_KEY_AVAILABLE; - } - - LOG_FUNC_OUT; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/LowerLayer.h b/openair-cn/NAS/MME/EMM/LowerLayer.h deleted file mode 100644 index a0cef2582b..0000000000 --- a/openair-cn/NAS/MME/EMM/LowerLayer.h +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source lowerlayer.h - -Version 0.1 - -Date 2013/06/19 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines EMM procedures executed by the Non-Access Stratum - upon receiving notifications from lower layers so that data - transfer succeed or failed, or NAS signalling connection is - released, or ESM unit data has been received from under layer, - and to request ESM unit data transfer to under layer. - -*****************************************************************************/ -#ifndef __LOWERLAYER_H__ -#define __LOWERLAYER_H__ - -#include "OctetString.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int lowerlayer_success(unsigned int ueid); -int lowerlayer_failure(unsigned int ueid); -int lowerlayer_establish(void); -int lowerlayer_release(int cause); - -int lowerlayer_data_ind(unsigned int ueid, const OctetString *data); -int lowerlayer_data_req(unsigned int ueid, const OctetString *data); - -#endif /* __LOWERLAYER_H__*/ diff --git a/openair-cn/NAS/MME/EMM/Makefile b/openair-cn/NAS/MME/EMM/Makefile deleted file mode 100644 index ef85807e8f..0000000000 --- a/openair-cn/NAS/MME/EMM/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/../.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -INCLUDES = -I. \ - -I$(INCDIR) \ - -I$(UTILDIR) \ - -I$(USIMAPIDIR) \ - -I$(MMEAPIDIR) \ - -I$(ESMDIR) \ - -I$(EMMSAPDIR) \ - -I$(ESMDIR) \ - -I$(ESMSAPDIR) \ - -I$(EMMMSGDIR) \ - -I$(IESDIR) \ - -I$(OPENAIRCN_DIR)/COMMON \ - -I$(OPENAIRCN_DIR)/SECU - - -all: $(OBJS) - @$(CD) $(EMMMSGDIR) && $(MAKE) - @$(CD) $(EMMSAPDIR) && $(MAKE) - -clean: - $(RM) $(OBJS) *.bak *~ - @$(CD) $(EMMSAPDIR) && $(MAKE) $@ - -veryclean: clean - @$(CD) $(EMMSAPDIR) && $(MAKE) $@ - @$(CD) $(EMMMSGDIR) && $(MAKE) $@ - $(RM) $(TARGET) - -%.o: %.c Makefile $(PROJDIR)/Makerules $(PROJDIR)/Makefile.inc - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. - diff --git a/openair-cn/NAS/MME/EMM/SAP/COPYING b/openair-cn/NAS/MME/EMM/SAP/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c deleted file mode 100644 index 91fad0d62f..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source EmmCommonProcedureInitiated.c - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Implements the EPS Mobility Management procedures executed - when the EMM-SAP is in EMM-COMMON-PROCEDURE-INITIATED state. - - In EMM-COMMON-PROCEDURE-INITIATED state, the MME has started - a common EMM procedure and is waiting for a response from the - UE. - -*****************************************************************************/ - - -#include "emm_fsm.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "EmmCommon.h" - -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: EmmCommonProcedureInitiated() ** - ** ** - ** Description: Handles the behaviour of the MME while the EMM-SAP is in ** - ** EMM_COMMON_PROCEDURE_INITIATED state. ** - ** ** - ** 3GPP TS 24.301, section 5.1.3.4.2 ** - ** ** - ** Inputs: evt: The received EMM-SAP event ** - ** Others: emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: emm_fsm_status ** - ** ** - ***************************************************************************/ -int EmmCommonProcedureInitiated(const emm_reg_t *evt) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - assert(emm_fsm_get_status(evt->ueid, - evt->ctx) == EMM_COMMON_PROCEDURE_INITIATED); - - switch (evt->primitive) { - case _EMMREG_PROC_ABORT: - /* - * The EMM procedure that initiated EMM common procedure aborted - */ - rc = emm_proc_common_abort(evt->ueid); - break; - - case _EMMREG_COMMON_PROC_CNF: - - /* - * An EMM common procedure successfully completed; - */ - if (evt->u.common.is_attached) { - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_REGISTERED); - } else { - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - } - - if (rc != RETURNerror) { - rc = emm_proc_common_success(evt->ueid); - } - - break; - - case _EMMREG_COMMON_PROC_REJ: - /* - * An EMM common procedure failed; - * enter state EMM-DEREGISTERED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - - if (rc != RETURNerror) { - rc = emm_proc_common_reject(evt->ueid); - } - - break; - - case _EMMREG_ATTACH_CNF: - /* - * Attach procedure successful and default EPS bearer - * context activated; - * enter state EMM-REGISTERED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_REGISTERED); - break; - - case _EMMREG_ATTACH_REJ: - /* - * Attach procedure failed; - * enter state EMM-DEREGISTERED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - break; - - case _EMMREG_LOWERLAYER_SUCCESS: - /* - * Data successfully delivered to the network - */ - rc = RETURNok; - break; - - case _EMMREG_LOWERLAYER_FAILURE: - /* - * Transmission failure occurred before the EMM common - * procedure being completed - */ - rc = emm_proc_common_failure(evt->ueid); - - if (rc != RETURNerror) { - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - } - - break; - - default: - LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", - evt->primitive); - break; - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c deleted file mode 100644 index 627986ba14..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source EmmDeregistered.c - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Implements the EPS Mobility Management procedures executed - when the EMM-SAP is in EMM-DEREGISTERED state. - - In EMM-DEREGISTERED state, no EMM context has been established - or the EMM context is marked as detached. - The UE shall start the attach or combined attach procedure to - establish an EMM context. - - The MME may answer to an attach or a combined attach procedure - initiated by the UE. It may also answer to a tracking area - updating procedure or combined tracking area updating procedure - initiated by a UE if the EMM context is marked as detached. - -*****************************************************************************/ - -#include "emm_fsm.h" -#include "commonDef.h" -#include "networkDef.h" -#include "nas_log.h" - -#include "emm_proc.h" - -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: EmmDeregistered() ** - ** ** - ** Description: Handles the behaviour of the UE and the MME while the ** - ** EMM-SAP is in EMM-DEREGISTERED state. ** - ** ** - ** 3GPP TS 24.301, section 5.2.2.2 ** - ** ** - ** Inputs: evt: The received EMM-SAP event ** - ** Others: emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: emm_fsm_status ** - ** ** - ***************************************************************************/ -int EmmDeregistered(const emm_reg_t *evt) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED); - - switch (evt->primitive) { - - case _EMMREG_PROC_ABORT: - /* - * Ongoing EMM procedure aborted - */ - rc = RETURNok; - break; - - case _EMMREG_COMMON_PROC_REQ: - /* - * An EMM common procedure has been initiated; - * enter state EMM-COMMON-PROCEDURE-INITIATED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); - break; - - case _EMMREG_ATTACH_CNF: - /* - * Attach procedure successful and default EPS bearer - * context activated; - * enter state EMM-REGISTERED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_REGISTERED); - break; - - case _EMMREG_LOWERLAYER_SUCCESS: - /* - * Data successfully delivered to the network - */ - rc = RETURNok; - break; - - case _EMMREG_LOWERLAYER_FAILURE: - /* - * Data failed to be delivered to the network - */ - rc = RETURNok; - break; - - default: - LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", - evt->primitive); - break; - } - - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttachNeeded.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttachNeeded.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c deleted file mode 100644 index 74cb43fbb5..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EmmDeregisteredInitiated.c - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Implements the EPS Mobility Management procedures executed - when the EMM-SAP is in EMM-DEREGISTERED-INITIATED state. - - In EMM-DEREGISTERED-INITIATED state, the UE has requested - release of the EMM context by starting the detach or combined - detach procedure and is waiting for a response from the MME. - The MME has started a detach procedure and is waiting for a - response from the UE. - -*****************************************************************************/ - -#include "emm_fsm.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_proc.h" - -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: EmmDeregisteredInitiated() ** - ** ** - ** Description: Handles the behaviour of the UE and the MME while the ** - ** EMM-SAP is in EMM-DEREGISTERED-INITIATED state. ** - ** ** - ** Inputs: evt: The received EMM-SAP event ** - ** Others: emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: emm_fsm_status ** - ** ** - ***************************************************************************/ -int EmmDeregisteredInitiated(const emm_reg_t *evt) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED_INITIATED); - - switch (evt->primitive) { - - default: - LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", - evt->primitive); - break; - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredLimitedService.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredLimitedService.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNormalService.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNormalService.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredPlmnSearch.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredPlmnSearch.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmNull.c b/openair-cn/NAS/MME/EMM/SAP/EmmNull.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c deleted file mode 100644 index 5c311dc8ee..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EmmRegistered.c - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Implements the EPS Mobility Management procedures executed - when the EMM-SAP is in EMM-REGISTERED state. - - In EMM-REGISTERED state, an EMM context has been established - and a default EPS bearer context has been activated in the UE - and the MME. - The UE may initiate sending and receiving user data and signal- - ling information and reply to paging. Additionally, tracking - area updating or combined tracking area updating procedure is - performed. - -*****************************************************************************/ - -#include "emm_fsm.h" -#include "commonDef.h" -#include "networkDef.h" -#include "nas_log.h" - -#include "emm_proc.h" - -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: EmmRegistered() ** - ** ** - ** Description: Handles the behaviour of the UE and the MME while the ** - ** EMM-SAP is in EMM-REGISTERED state. ** - ** ** - ** Inputs: evt: The received EMM-SAP event ** - ** Others: emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: emm_fsm_status ** - ** ** - ***************************************************************************/ -int EmmRegistered(const emm_reg_t *evt) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_REGISTERED); - - switch (evt->primitive) { - - - - case _EMMREG_DETACH_REQ: - /* - * Network detach has been requested (implicit detach); - * enter state EMM-DEREGISTERED - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - break; - - case _EMMREG_COMMON_PROC_REQ: - /* - * An EMM common procedure has been initiated; - * enter state EMM-COMMON-PROCEDURE-INITIATED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); - break; - - case _EMMREG_TAU_REJ: - /* - * TODO: Tracking Area Update has been rejected - */ - LOG_TRACE(ERROR, "EMM-FSM - Tracking Area Update procedure " - "is not implemented"); - break; - - case _EMMREG_LOWERLAYER_SUCCESS: - /* - * Data successfully delivered to the network - */ - rc = RETURNok; - break; - - case _EMMREG_LOWERLAYER_FAILURE: - /* - * Data failed to be delivered to the network - */ - rc = RETURNok; - break; - - default: - LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", - evt->primitive); - break; - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredInitiated.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredLimitedService.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredLimitedService.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNoCellAvailable.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNoCellAvailable.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNormalService.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNormalService.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredUpdateNeeded.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredUpdateNeeded.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmServiceRequestInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmServiceRequestInitiated.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/NAS/MME/EMM/SAP/Makefile b/openair-cn/NAS/MME/EMM/SAP/Makefile deleted file mode 100644 index 735d35bf8e..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/../../.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(IESDIR) -I$(MMEAPIDIR) \ - -I$(EMMDIR) -I$(EMMMSGDIR) -I$(ESMDIR) -I$(ESMMSGDIR) -I$(NETAPIDIR) - -TARGET = $(LIBEMMSAP) -TARGETS = $(TARGET).a $(TARGET).so - -all: $(TARGETS) - -%.o: %.c Makefile $(PROJDIR)/Makerules $(PROJDIR)/Makefile.inc - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -$(TARGET).a: $(OBJS) - @$(RM) $@ - @$(AR) $(ARFLAGS) $@ $(OBJS) - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -$(TARGET).so: $(OBJS) - @$(LD) -G -o $@ $(OBJS) - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -clean: - $(RM) $(OBJS) *.bak *~ - -veryclean: clean - $(RM) $(TARGETS) - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_as.c b/openair-cn/NAS/MME/EMM/SAP/emm_as.c deleted file mode 100644 index 882c9e800e..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_as.c +++ /dev/null @@ -1,1763 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_as.c - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMAS Service Access Point that provides - services to the EPS Mobility Management for NAS message - transfer to/from the Access Stratum sublayer. - -*****************************************************************************/ - -#include "emm_as.h" -#include "emm_recv.h" -#include "emm_send.h" -#include "emmData.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "TLVDecoder.h" -#include "as_message.h" -#include "nas_message.h" - -#include "emm_cause.h" -#include "LowerLayer.h" - -#include // memset -#include // malloc, free - -#if defined(NAS_BUILT_IN_EPC) -# include "nas_itti_messaging.h" -#endif -#include "msc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - - -extern int emm_proc_status(unsigned int ueid, int emm_cause); - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * String representation of EMMAS-SAP primitives - */ -static const char *_emm_as_primitive_str[] = { - "EMMAS_SECURITY_REQ", - "EMMAS_SECURITY_IND", - "EMMAS_SECURITY_RES", - "EMMAS_SECURITY_REJ", - "EMMAS_ESTABLISH_REQ", - "EMMAS_ESTABLISH_CNF", - "EMMAS_ESTABLISH_REJ", - "EMMAS_RELEASE_REQ", - "EMMAS_RELEASE_IND", - "EMMAS_DATA_REQ", - "EMMAS_DATA_IND", - "EMMAS_PAGE_IND", - "EMMAS_STATUS_IND", - "EMMAS_CELL_INFO_REQ", - "EMMAS_CELL_INFO_RES", - "EMMAS_CELL_INFO_IND", -}; - -/* - * Functions executed to process EMM procedures upon receiving - * data from the network - */ -static int _emm_as_recv(unsigned int ueid, const char *msg, int len, - int *emm_cause); - - -static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause); -static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg); -static int _emm_as_cell_info_ind(const emm_as_cell_info_t *msg); -static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause); - -/* - * Functions executed to send data to the network when requested - * within EMM procedure processing - */ -static EMM_msg *_emm_as_set_header(nas_message_t *msg, - const emm_as_security_data_t *security); -static int -_emm_as_encode( - as_nas_info_t *info, - nas_message_t *msg, - int length, - emm_security_context_t *emm_security_context); - -static int _emm_as_encrypt( - as_nas_info_t *info, - const nas_message_security_header_t *header, - const char *buffer, - int length, - emm_security_context_t *emm_security_context); - -static int _emm_as_send(const emm_as_t *msg); - -static int _emm_as_security_req(const emm_as_security_t *, - dl_info_transfer_req_t *); -static int _emm_as_security_rej(const emm_as_security_t *, - dl_info_transfer_req_t *); -static int _emm_as_establish_cnf(const emm_as_establish_t *, - nas_establish_rsp_t *); -static int _emm_as_establish_rej(const emm_as_establish_t *, - nas_establish_rsp_t *); -static int _emm_as_page_ind(const emm_as_page_t *, paging_req_t *); - -static int _emm_as_cell_info_req(const emm_as_cell_info_t *, cell_info_req_t *); - -static int _emm_as_data_req(const emm_as_data_t *, ul_info_transfer_req_t *); -static int _emm_as_status_ind(const emm_as_status_t *, ul_info_transfer_req_t *); -static int _emm_as_release_req(const emm_as_release_t *, nas_release_req_t *); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_as_initialize() ** - ** ** - ** Description: Initializes the EMMAS Service Access Point ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: NONE ** - ** ** - ***************************************************************************/ -void emm_as_initialize(void) -{ - LOG_FUNC_IN; - - /* TODO: Initialize the EMMAS-SAP */ - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_as_send() ** - ** ** - ** Description: Processes the EMMAS Service Access Point primitive. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_as_send(const emm_as_t *msg) -{ - LOG_FUNC_IN; - - int rc; - int emm_cause = EMM_CAUSE_SUCCESS; - emm_as_primitive_t primitive = msg->primitive; - - uint32_t ueid = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Received primitive %s (%d)", - _emm_as_primitive_str[primitive - _EMMAS_START - 1], primitive); - - switch (primitive) { - case _EMMAS_DATA_IND: - rc = _emm_as_data_ind(&msg->u.data, &emm_cause); - ueid = msg->u.data.ueid; - break; - - case _EMMAS_ESTABLISH_REQ: - rc = _emm_as_establish_req(&msg->u.establish, &emm_cause); - ueid = msg->u.establish.ueid; - break; - - case _EMMAS_CELL_INFO_RES: - rc = _emm_as_cell_info_res(&msg->u.cell_info); - break; - - case _EMMAS_CELL_INFO_IND: - rc = _emm_as_cell_info_ind(&msg->u.cell_info); - break; - - default: - /* Other primitives are forwarded to the Access Stratum */ - rc = _emm_as_send(msg); - - if (rc != RETURNok) { - LOG_TRACE(ERROR, "EMMAS-SAP - " - "Failed to process primitive %s (%d)", - _emm_as_primitive_str[primitive - _EMMAS_START - 1], - primitive); - LOG_FUNC_RETURN (RETURNerror); - } - - break; - } - - /* Handle decoding errors */ - if (emm_cause != EMM_CAUSE_SUCCESS) { - /* Ignore received message that is too short to contain a complete - * message type information element */ - if (rc == TLV_DECODE_BUFFER_TOO_SHORT) { - LOG_FUNC_RETURN (RETURNok); - } - /* Ignore received message that contains not supported protocol - * discriminator */ - else if (rc == TLV_DECODE_PROTOCOL_NOT_SUPPORTED) { - LOG_FUNC_RETURN (RETURNok); - } else if (rc == TLV_DECODE_WRONG_MESSAGE_TYPE) { - emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; - } - - /* EMM message processing failed */ - LOG_TRACE(WARNING, "EMMAS-SAP - Received EMM message is not valid " - "(cause=%d)", emm_cause); - /* Return an EMM status message */ - rc = emm_proc_status(ueid, emm_cause); - } - - if (rc != RETURNok) { - LOG_TRACE(ERROR, "EMMAS-SAP - Failed to process primitive %s (%d)", - _emm_as_primitive_str[primitive - _EMMAS_START - 1], - primitive); - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed to process EMM procedures upon receiving data from the - * network - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_as_recv() ** - ** ** - ** Description: Decodes and processes the EPS Mobility Management message ** - ** received from the Access Stratum ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The EMM message to process ** - ** len: The length of the EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_recv(unsigned int ueid, const char *msg, int len, - int *emm_cause) -{ - LOG_FUNC_IN; - - int decoder_rc; - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMMAS-SAP - Received EMM message (length=%d)", len); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - emm_security_context_t *security = NULL; /* Current EPS NAS security context */ -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = NULL; -#endif - -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, ueid); - - if (emm_ctx) { - security = emm_ctx->security; - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - - if (emm_ctx) { - security = emm_ctx->security; - } - } - -#endif - - /* Decode the received message */ - decoder_rc = nas_message_decode(msg, &nas_msg, len, security); - - if (decoder_rc < 0) { - LOG_TRACE(WARNING, "EMMAS-SAP - Failed to decode NAS message " - "(err=%d)", decoder_rc); - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (decoder_rc); - } - - /* Process NAS message */ - EMM_msg *emm_msg = &nas_msg.plain.emm; - - switch (emm_msg->header.message_type) { - case EMM_STATUS: - rc = emm_recv_status(ueid, &emm_msg->emm_status, emm_cause); - break; - - case ATTACH_REQUEST: - rc = emm_recv_attach_request( - ueid, - &emm_msg->attach_request, - emm_cause); - break; - - case IDENTITY_RESPONSE: - rc = emm_recv_identity_response( - ueid, - &emm_msg->identity_response, - emm_cause); - break; - - case AUTHENTICATION_RESPONSE: - rc = emm_recv_authentication_response( - ueid, - &emm_msg->authentication_response, - emm_cause); - break; - - case AUTHENTICATION_FAILURE: - rc = emm_recv_authentication_failure( - ueid, - &emm_msg->authentication_failure, - emm_cause); - break; - - case SECURITY_MODE_COMPLETE: - rc = emm_recv_security_mode_complete( - ueid, - &emm_msg->security_mode_complete, - emm_cause); - break; - - case SECURITY_MODE_REJECT: - rc = emm_recv_security_mode_reject(ueid, - &emm_msg->security_mode_reject, - emm_cause); - break; - - case ATTACH_COMPLETE: - rc = emm_recv_attach_complete(ueid, &emm_msg->attach_complete, - emm_cause); - break; - - case TRACKING_AREA_UPDATE_COMPLETE: - case GUTI_REALLOCATION_COMPLETE: - case UPLINK_NAS_TRANSPORT: - /* TODO */ - break; - - case DETACH_REQUEST: - rc = emm_recv_detach_request(ueid, &emm_msg->detach_request, - emm_cause); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - EMM message 0x%x is not valid", - emm_msg->header.message_type); - *emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE; - break; - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_data_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP data transfer indication ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: DATA_IND - Data transfer procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS data transfer indication " - "(ueid="NAS_UE_ID_FMT", delivered=%s, length=%d)", msg->ueid, - (msg->delivered)? "TRUE" : "FALSE", msg->NASmsg.length); - - if (msg->delivered) { - if (msg->NASmsg.length > 0) { - /* Process the received NAS message */ - char *plain_msg = (char *)malloc(msg->NASmsg.length); - - if (plain_msg) { - nas_message_security_header_t header; - emm_security_context_t *security = NULL; /* Current EPS NAS security context */ - - memset(&header, 0, sizeof(header)); - /* Decrypt the received security protected message */ - emm_data_context_t *emm_ctx = NULL; -#if defined(NAS_BUILT_IN_EPC) - - if (msg->ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); - - if (emm_ctx) { - security = emm_ctx->security; - } - } - -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - - if (emm_ctx) { - security = emm_ctx->security; - } - } - -#endif - int bytes = nas_message_decrypt((char *)(msg->NASmsg.value), - plain_msg, - &header, - msg->NASmsg.length, - security - ); - - if (bytes < 0) { - /* Failed to decrypt the message */ - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (bytes); - } else if (header.protocol_discriminator == - EPS_MOBILITY_MANAGEMENT_MESSAGE) { - /* Process EMM data */ - rc = _emm_as_recv(msg->ueid, plain_msg, bytes, emm_cause); - } else if (header.protocol_discriminator == - EPS_SESSION_MANAGEMENT_MESSAGE) { - const OctetString data = {bytes, (uint8_t *)plain_msg}; - /* Foward ESM data to EPS session management */ - rc = lowerlayer_data_ind(msg->ueid, &data); - } - - free(plain_msg); - } - } else { - /* Process successfull lower layer transfer indication */ - rc = lowerlayer_success(msg->ueid); - } - } else { - /* Process lower layer transmission failure of NAS message */ - rc = lowerlayer_failure(msg->ueid); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_req() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish request ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: ESTABLISH_REQ - NAS signalling connection ** - ** The AS notifies the NAS that establishment of the signal- ** - ** ling connection has been requested to tranfer initial NAS ** - ** message from the UE. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - struct emm_data_context_s *emm_ctx = NULL; - emm_security_context_t *emm_security_context = NULL; - int decoder_rc; - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS connection establish request"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - } - - /* Decode initial NAS message */ - decoder_rc = nas_message_decode( - (char *)(msg->NASmsg.value), - &nas_msg, - msg->NASmsg.length, - emm_security_context); - - if (decoder_rc < TLV_DECODE_FATAL_ERROR) { - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (decoder_rc); - } else if (decoder_rc == TLV_DECODE_UNEXPECTED_IEI) { - *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; - } else if (decoder_rc < 0) { - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - } - - /* Process initial NAS message */ - EMM_msg *emm_msg = &nas_msg.plain.emm; - - switch (emm_msg->header.message_type) { - case ATTACH_REQUEST: - rc = emm_recv_attach_request( - msg->ueid, - &emm_msg->attach_request, - emm_cause); - break; - - case DETACH_REQUEST: - rc = RETURNok; /* TODO */ - break; - - case TRACKING_AREA_UPDATE_REQUEST: - rc = emm_recv_tracking_area_update_request( - msg->ueid, - &emm_msg->tracking_area_update_request, - emm_cause); - break; - - case SERVICE_REQUEST: - rc = RETURNok; /* TODO */ - break; - - case EXTENDED_SERVICE_REQUEST: - rc = RETURNok; /* TODO */ - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Initial NAS message 0x%x is " - "not valid", emm_msg->header.message_type); - *emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE; - break; - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_cell_info_res() ** - ** ** - ** Description: Processes the EMMAS-SAP cell information response ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: CELL_INFO_RES - PLMN and cell selection procedure ** - ** The NAS received a response to cell selection request pre- ** - ** viously sent to the Access-Startum. If a suitable cell is ** - ** found to serve the selected PLMN with associated Radio Ac- ** - ** cess Technologies, this cell is selected to camp on. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS cell information response"); - - - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_cell_info_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP cell information indication ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: CELL_INFO_IND - PLMN and cell selection procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_cell_info_ind(const emm_as_cell_info_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS cell information indication"); - - /* TODO */ - - LOG_FUNC_RETURN (rc); -} - -/* - * -------------------------------------------------------------------------- - * Functions executed to send data to the network when requested within EMM - * procedure processing - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_as_set_header() ** - ** ** - ** Description: Setup the security header of the given NAS message ** - ** ** - ** Inputs: security: The NAS security data to use ** - ** Others: None ** - ** ** - ** Outputs: msg: The NAS message ** - ** Return: Pointer to the plain NAS message to be se- ** - ** curity protected if setting of the securi- ** - ** ty header succeed; ** - ** NULL pointer otherwise ** - ** Others: None ** - ** ** - ***************************************************************************/ -static EMM_msg *_emm_as_set_header(nas_message_t *msg, - const emm_as_security_data_t *security) -{ - LOG_FUNC_IN; - - msg->header.protocol_discriminator = EPS_MOBILITY_MANAGEMENT_MESSAGE; - - if ( security && (security->ksi != EMM_AS_NO_KEY_AVAILABLE) ) { - /* A valid EPS security context exists */ - if (security->is_new) { - /* New EPS security context is taken into use */ - if (security->k_int) { - if (security->k_enc) { - /* NAS integrity and cyphering keys are available */ - msg->header.security_header_type = - SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_CYPHERED_NEW; - } else { - /* NAS integrity key only is available */ - msg->header.security_header_type = - SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_NEW; - } - - LOG_FUNC_RETURN (&msg->security_protected.plain.emm); - } - } else if (security->k_int) { - if (security->k_enc) { - /* NAS integrity and cyphering keys are available */ - msg->header.security_header_type = - SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_CYPHERED; - } else { - /* NAS integrity key only is available */ - msg->header.security_header_type = - SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED; - } - - LOG_FUNC_RETURN (&msg->security_protected.plain.emm); - } else { - /* No valid EPS security context exists */ - msg->header.security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; - LOG_FUNC_RETURN (&msg->plain.emm); - } - } else { - /* No valid EPS security context exists */ - msg->header.security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; - LOG_FUNC_RETURN (&msg->plain.emm); - } - - /* A valid EPS security context exists but NAS integrity key - * is not available */ - LOG_FUNC_RETURN (NULL); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_encode() ** - ** ** - ** Description: Encodes NAS message into NAS information container ** - ** ** - ** Inputs: msg: The NAS message to encode ** - ** length: The maximum length of the NAS message ** - ** Others: None ** - ** ** - ** Outputs: info: The NAS information container ** - ** msg: The NAS message to encode ** - ** Return: The number of bytes successfully encoded ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int -_emm_as_encode( - as_nas_info_t *info, - nas_message_t *msg, - int length, - emm_security_context_t *emm_security_context) -{ - LOG_FUNC_IN; - - int bytes = 0; - - if (msg->header.security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { - emm_msg_header_t *header = &msg->security_protected.plain.emm.header; - /* Expand size of protected NAS message */ - length += NAS_MESSAGE_SECURITY_HEADER_SIZE; - /* Set header of plain NAS message */ - header->protocol_discriminator = EPS_MOBILITY_MANAGEMENT_MESSAGE; - header->security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; - } - - /* Allocate memory to the NAS information container */ - info->data = (Byte_t *)malloc(length * sizeof(Byte_t)); - - if (info->data != NULL) { - /* Encode the NAS message */ - bytes = nas_message_encode( - (char *)(info->data), - msg, - length, - emm_security_context); - - if (bytes > 0) { - info->length = bytes; - } else { - free(info->data); - info->length = 0; - info->data = NULL; - } - } - - LOG_FUNC_RETURN (bytes); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_encrypt() ** - ** ** - ** Description: Encryts NAS message into NAS information container ** - ** ** - ** Inputs: header: The Security header in used ** - ** msg: The NAS message to encrypt ** - ** length: The maximum length of the NAS message ** - ** Others: None ** - ** ** - ** Outputs: info: The NAS information container ** - ** Return: The number of bytes successfully encrypted ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int -_emm_as_encrypt( - as_nas_info_t *info, - const nas_message_security_header_t *header, - const char *msg, - int length, - emm_security_context_t *emm_security_context) -{ - LOG_FUNC_IN; - - int bytes = 0; - - if (header->security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { - /* Expand size of protected NAS message */ - length += NAS_MESSAGE_SECURITY_HEADER_SIZE; - } - - /* Allocate memory to the NAS information container */ - info->data = (Byte_t *)malloc(length * sizeof(Byte_t)); - - if (info->data != NULL) { - /* Encrypt the NAS information message */ - bytes = nas_message_encrypt( - msg, - (char *)(info->data), - header, - length, - emm_security_context); - - if (bytes > 0) { - info->length = bytes; - } else { - free(info->data); - info->length = 0; - info->data = NULL; - } - } - - LOG_FUNC_RETURN (bytes); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_send() ** - ** ** - ** Description: Builds NAS message according to the given EMMAS Service ** - ** Access Point primitive and sends it to the Access Stratum ** - ** sublayer ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to be sent ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_send(const emm_as_t *msg) -{ - LOG_FUNC_IN; - - as_message_t as_msg; - memset(&as_msg, 0 , sizeof(as_message_t)); - - switch (msg->primitive) { - case _EMMAS_DATA_REQ: - as_msg.msgID = _emm_as_data_req( - &msg->u.data, - &as_msg.msg.ul_info_transfer_req); - break; - - case _EMMAS_STATUS_IND: - as_msg.msgID = _emm_as_status_ind( - &msg->u.status, - &as_msg.msg.ul_info_transfer_req); - break; - - case _EMMAS_RELEASE_REQ: - as_msg.msgID = _emm_as_release_req( - &msg->u.release, - &as_msg.msg.nas_release_req); - break; - - case _EMMAS_SECURITY_REQ: - as_msg.msgID = _emm_as_security_req( - &msg->u.security, - &as_msg.msg.dl_info_transfer_req); - break; - - case _EMMAS_SECURITY_REJ: - as_msg.msgID = _emm_as_security_rej( - &msg->u.security, - &as_msg.msg.dl_info_transfer_req); - break; - - case _EMMAS_ESTABLISH_CNF: - as_msg.msgID = _emm_as_establish_cnf( - &msg->u.establish, - &as_msg.msg.nas_establish_rsp); - break; - - case _EMMAS_ESTABLISH_REJ: - as_msg.msgID = _emm_as_establish_rej( - &msg->u.establish, - &as_msg.msg.nas_establish_rsp); - break; - - case _EMMAS_PAGE_IND: - as_msg.msgID = _emm_as_page_ind(&msg->u.page, - &as_msg.msg.paging_req); - break; - - - case _EMMAS_CELL_INFO_REQ: - as_msg.msgID = _emm_as_cell_info_req(&msg->u.cell_info, - &as_msg.msg.cell_info_req); - /* - * TODO: NAS may provide a list of equivalent PLMNs, if available, - * that AS shall use for cell selection and cell reselection. - */ - break; - - default: - as_msg.msgID = 0; - break; - } - - /* Send the message to the Access Stratum or S1AP in case of MME */ - if (as_msg.msgID > 0) { -#if defined(NAS_BUILT_IN_EPC) - LOG_TRACE(DEBUG, "EMMAS-SAP - " - "Sending msg with id 0x%x, primitive %s (%d) to S1AP layer for transmission", - as_msg.msgID, - _emm_as_primitive_str[msg->primitive - _EMMAS_START - 1], - msg->primitive); - - switch (as_msg.msgID) { - case AS_DL_INFO_TRANSFER_REQ: { - nas_itti_dl_data_req( - as_msg.msg.dl_info_transfer_req.UEid, - as_msg.msg.dl_info_transfer_req.nasMsg.data, - as_msg.msg.dl_info_transfer_req.nasMsg.length); - LOG_FUNC_RETURN (RETURNok); - } - break; - - case AS_NAS_ESTABLISH_RSP: - case AS_NAS_ESTABLISH_CNF: { - if (as_msg.msg.nas_establish_rsp.errCode != AS_SUCCESS) { - nas_itti_dl_data_req( - as_msg.msg.nas_establish_rsp.UEid, - as_msg.msg.nas_establish_rsp.nasMsg.data, - as_msg.msg.nas_establish_rsp.nasMsg.length); - LOG_FUNC_RETURN (RETURNok); - } else { - LOG_TRACE(DEBUG, "EMMAS-SAP - " - "Sending nas_itti_establish_cnf to S1AP UE ID 0x%x" - " selected_encryption_algorithm 0x%04X", - " selected_integrity_algorithm 0x%04X", - as_msg.msg.nas_establish_rsp.UEid, - as_msg.msg.nas_establish_rsp.selected_encryption_algorithm, - as_msg.msg.nas_establish_rsp.selected_integrity_algorithm); - /* Handle success case */ - nas_itti_establish_cnf( - as_msg.msg.nas_establish_rsp.UEid, - as_msg.msg.nas_establish_rsp.errCode, - as_msg.msg.nas_establish_rsp.nasMsg.data, - as_msg.msg.nas_establish_rsp.nasMsg.length, - as_msg.msg.nas_establish_rsp.selected_encryption_algorithm, - as_msg.msg.nas_establish_rsp.selected_integrity_algorithm); - LOG_FUNC_RETURN (RETURNok); - } - } - break; - - default: - break; - } - -#endif - } - - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_data_req() ** - ** ** - ** Description: Processes the EMMAS-SAP data transfer request ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: DATA_REQ - Data transfer procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_data_req(const emm_as_data_t *msg, - ul_info_transfer_req_t *as_msg) -{ - LOG_FUNC_IN; - - int size = 0; - int is_encoded = FALSE; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS data transfer request"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS information message */ - if (emm_msg != NULL) switch (msg->NASinfo) { - - case EMM_AS_NAS_DATA_DETACH: - size = emm_send_detach_accept(msg, &emm_msg->detach_accept); - break; - - default: - /* Send other NAS messages as already encoded ESM messages */ - size = msg->NASmsg.length; - is_encoded = TRUE; - break; - } - - if (size > 0) { - int bytes; - emm_security_context_t *emm_security_context = NULL; - struct emm_data_context_s *emm_ctx = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - } - - - - if (emm_security_context) { - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } - - if (!is_encoded) { - /* Encode the NAS information message */ - bytes = _emm_as_encode(&as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - } else { - /* Encrypt the NAS information message */ - bytes = _emm_as_encrypt(&as_msg->nasMsg, - &nas_msg.header, - (char *)(msg->NASmsg.value), - size, - emm_security_context); - } - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_status_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP status indication primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: STATUS_IND - EMM status report procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_status_ind(const emm_as_status_t *msg, - ul_info_transfer_req_t *as_msg) -{ - LOG_FUNC_IN; - - int size = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS status indication (cause=%d)", - msg->emm_cause); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS information message */ - if (emm_msg != NULL) { - size = emm_send_status(msg, &emm_msg->emm_status); - } - - if (size > 0) { - emm_security_context_t *emm_security_context = NULL; - struct emm_data_context_s *emm_ctx = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - } - - if (emm_security_context) { - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } - - /* Encode the NAS information message */ - int bytes = _emm_as_encode( - &as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_release_req() ** - ** ** - ** Description: Processes the EMMAS-SAP connection release request ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: RELEASE_REQ - NAS signalling release procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_release_req(const emm_as_release_t *msg, - nas_release_req_t *as_msg) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS release request"); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - if (msg->cause == EMM_AS_CAUSE_AUTHENTICATION) { - as_msg->cause = AS_AUTHENTICATION_FAILURE; - } else if (msg->cause == EMM_AS_CAUSE_DETACH) { - as_msg->cause = AS_DETACH; - } - - LOG_FUNC_RETURN (AS_NAS_RELEASE_REQ); -} - - -/**************************************************************************** - ** ** - ** Name: _emm_as_security_req() ** - ** ** - ** Description: Processes the EMMAS-SAP security request primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: SECURITY_REQ - Security mode control procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_security_req(const emm_as_security_t *msg, - dl_info_transfer_req_t *as_msg) -{ - LOG_FUNC_IN; - - int size = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS security request"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS security message */ - if (emm_msg != NULL) switch (msg->msgType) { - case EMM_AS_MSG_TYPE_IDENT: - if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send IDENTITY_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send IDENTITY_REQUEST to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_identity_request(msg, - &emm_msg->identity_request); - break; - - case EMM_AS_MSG_TYPE_AUTH: - if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REQUEST to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_authentication_request(msg, - &emm_msg->authentication_request); - break; - - case EMM_AS_MSG_TYPE_SMC: - if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send SECURITY_MODE_COMMAND to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send SECURITY_MODE_COMMAND to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_security_mode_command(msg, - &emm_msg->security_mode_command); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of NAS security " - "message 0x%.2x is not valid", msg->msgType); - } - - if (size > 0) { - struct emm_data_context_s *emm_ctx = NULL; - emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - - if (emm_security_context) { - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } - } - - /* Encode the NAS security message */ - int bytes = _emm_as_encode( - &as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_security_rej() ** - ** ** - ** Description: Processes the EMMAS-SAP security reject primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: SECURITY_REJ - Security mode control procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_security_rej(const emm_as_security_t *msg, - dl_info_transfer_req_t *as_msg) -{ - LOG_FUNC_IN; - - int size = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS security reject"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS security message */ - if (emm_msg != NULL) switch (msg->msgType) { - case EMM_AS_MSG_TYPE_AUTH: - if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_authentication_reject( - &emm_msg->authentication_reject); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of NAS security " - "message 0x%.2x is not valid", msg->msgType); - } - - if (size > 0) { - struct emm_data_context_s *emm_ctx = NULL; - emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - if (emm_security_context) { - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } else { - LOG_TRACE(DEBUG, - "No security context, not set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } - } - - /* Encode the NAS security message */ - int bytes = _emm_as_encode( - &as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_cnf() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish confirm ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: ESTABLISH_CNF - NAS signalling connection ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_cnf(const emm_as_establish_t *msg, - nas_establish_rsp_t *as_msg) -{ - EMM_msg *emm_msg; - int size = 0; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS connection establish confirmation"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - as_msg->UEid = msg->ueid; - - if (msg->UEid.guti == NULL) { - LOG_TRACE(WARNING, "EMMAS-SAP - GUTI is NULL..."); - LOG_FUNC_RETURN (0); - } - - as_msg->s_tmsi.MMEcode = msg->UEid.guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->UEid.guti->m_tmsi; - - /* Setup the NAS security header */ - emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the initial NAS information message */ - if (emm_msg != NULL) switch (msg->NASinfo) { - case EMM_AS_NAS_INFO_ATTACH: - LOG_TRACE(WARNING, - "EMMAS-SAP - emm_as_establish.nasMSG.length=%d", - msg->NASmsg.length); - - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_ACCEPT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - - size = emm_send_attach_accept(msg, &emm_msg->attach_accept); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of initial NAS " - "message 0x%.2x is not valid", msg->NASinfo); - break; - } - - if (size > 0) { - struct emm_data_context_s *emm_ctx = NULL; - emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - - if (emm_security_context) { - as_msg->nas_ul_count = 0x00000000 | - (emm_security_context->ul_count.overflow << 8) | - emm_security_context->ul_count.seq_num; - LOG_TRACE(DEBUG, "EMMAS-SAP - NAS UL COUNT %8x", - as_msg->nas_ul_count); - } - - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - - as_msg->selected_encryption_algorithm = htons(0x8000 >> emm_security_context->selected_algorithms.encryption); - as_msg->selected_integrity_algorithm = htons(0x8000 >> emm_security_context->selected_algorithms.integrity); - - LOG_TRACE(DEBUG, - "Set nas_msg.selected_encryption_algorithm -> NBO: 0x%04X (%u)", - as_msg->selected_encryption_algorithm, - emm_security_context->selected_algorithms.encryption); - LOG_TRACE(DEBUG, - "Set nas_msg.selected_integrity_algorithm -> NBO: 0x%04X (%u)", - as_msg->selected_integrity_algorithm, - emm_security_context->selected_algorithms.integrity); - - } - - /* Encode the initial NAS information message */ - int bytes = _emm_as_encode( - &as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - - if (bytes > 0) { - as_msg->errCode = AS_SUCCESS; - LOG_FUNC_RETURN (AS_NAS_ESTABLISH_CNF); - } - } - - LOG_TRACE(WARNING, "EMMAS-SAP - Size <= 0"); - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_rej() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish reject ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: ESTABLISH_REJ - NAS signalling connection ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_rej(const emm_as_establish_t *msg, - nas_establish_rsp_t *as_msg) -{ - EMM_msg *emm_msg; - int size = 0; - nas_message_t nas_msg; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS connection establish reject"); - - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->UEid.guti) { - as_msg->s_tmsi.MMEcode = msg->UEid.guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->UEid.guti->m_tmsi; - } else { - as_msg->UEid = msg->ueid; - } - - /* Setup the NAS security header */ - emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS information message */ - if (emm_msg != NULL) switch (msg->NASinfo) { - case EMM_AS_NAS_INFO_ATTACH: - if (msg->UEid.guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_attach_reject(msg, &emm_msg->attach_reject); - break; - - case EMM_AS_NAS_INFO_TAU: - if (msg->UEid.guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send TRACKING_AREA_UPDATE_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); - } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send TRACKING_AREA_UPDATE_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); - } - size = emm_send_tracking_area_update_reject(msg, - &emm_msg->tracking_area_update_reject); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of initial NAS " - "message 0x%.2x is not valid", msg->NASinfo); - break; - } - - if (size > 0) { - struct emm_data_context_s *emm_ctx = NULL; - emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); -#else - - if (msg->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[msg->ueid]; - } - -#endif - - if (emm_ctx) { - emm_security_context = emm_ctx->security; - - if (emm_security_context) { - nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; - LOG_TRACE(DEBUG, - "Set nas_msg.header.sequence_number -> %u", - nas_msg.header.sequence_number); - } - } - - /* Encode the initial NAS information message */ - int bytes = _emm_as_encode( - &as_msg->nasMsg, - &nas_msg, - size, - emm_security_context); - - if (bytes > 0) { - as_msg->errCode = AS_TERMINATED_NAS; - LOG_FUNC_RETURN (AS_NAS_ESTABLISH_RSP); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_page_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP paging data indication primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: PAGE_IND - Paging data procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_page_ind(const emm_as_page_t *msg, paging_req_t *as_msg) -{ - LOG_FUNC_IN; - - int bytes = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS data paging indication"); - - /* TODO */ - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_PAGING_IND); - } - - LOG_FUNC_RETURN (0); -} - - -/**************************************************************************** - ** ** - ** Name: _emm_as_cell_info_req() ** - ** ** - ** Description: Processes the EMMAS-SAP cell information request ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: CELL_INFO_REQ - PLMN and cell selection procedure ** - ** The NAS requests the AS to select a cell belonging to the ** - ** selected PLMN with associated Radio Access Technologies. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_cell_info_req(const emm_as_cell_info_t *msg, - cell_info_req_t *as_msg) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS cell information request"); - - as_msg->plmnID = msg->plmnIDs.plmn[0]; - as_msg->rat = msg->rat; - - LOG_FUNC_RETURN (AS_CELL_INFO_REQ); -} - diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_as.h b/openair-cn/NAS/MME/EMM/SAP/emm_as.h deleted file mode 100644 index ca4fc449b7..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_as.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_as.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMAS Service Access Point that provides - services to the EPS Mobility Management for NAS message - transfer to/from the Access Stratum sublayer. - -*****************************************************************************/ -#ifndef __EMM_AS_H__ -#define __EMM_AS_H__ - -#include "emm_asDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void emm_as_initialize(void); - -int emm_as_send(const emm_as_t *msg); - -#endif /* __EMM_AS_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_asDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_asDef.h deleted file mode 100644 index fbd2a6b38e..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_asDef.h +++ /dev/null @@ -1,276 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_asDef.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMM primitives available at the EMMAS Service - Access Point to transfer NAS messages to/from the Access - Stratum sublayer. - -*****************************************************************************/ -#ifndef __EMM_ASDEF_H__ -#define __EMM_ASDEF_H__ - -#include "commonDef.h" -#include "OctetString.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * EMMAS-SAP primitives - */ -typedef enum emm_as_primitive_u { - _EMMAS_START = 200, - _EMMAS_SECURITY_REQ, /* EMM->AS: Security request */ - _EMMAS_SECURITY_IND, /* AS->EMM: Security indication */ - _EMMAS_SECURITY_RES, /* EMM->AS: Security response */ - _EMMAS_SECURITY_REJ, /* EMM->AS: Security reject */ - _EMMAS_ESTABLISH_REQ, /* EMM->AS: Connection establish request */ - _EMMAS_ESTABLISH_CNF, /* AS->EMM: Connection establish confirm */ - _EMMAS_ESTABLISH_REJ, /* AS->EMM: Connection establish reject */ - _EMMAS_RELEASE_REQ, /* EMM->AS: Connection release request */ - _EMMAS_RELEASE_IND, /* AS->EMM: Connection release indication */ - _EMMAS_DATA_REQ, /* EMM->AS: Data transfer request */ - _EMMAS_DATA_IND, /* AS->EMM: Data transfer indication */ - _EMMAS_PAGE_IND, /* AS->EMM: Paging data indication */ - _EMMAS_STATUS_IND, /* AS->EMM: Status indication */ - _EMMAS_CELL_INFO_REQ, /* EMM->AS: Cell information request */ - _EMMAS_CELL_INFO_RES, /* AS->EMM: Cell information response */ - _EMMAS_CELL_INFO_IND, /* AS->EMM: Cell information indication */ - _EMMAS_END -} emm_as_primitive_t; - -/* Data used to setup EPS NAS security */ -typedef struct emm_as_security_data_s { - uint8_t is_new; /* New security data indicator */ -#define EMM_AS_NO_KEY_AVAILABLE 0xff - uint8_t ksi; /* NAS key set identifier */ - uint8_t sqn; /* Sequence number */ - uint32_t count; /* NAS counter */ - const OctetString *k_enc; /* NAS cyphering key */ - const OctetString *k_int; /* NAS integrity key */ -} emm_as_security_data_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * EMMAS primitive for security - * ---------------------------- - */ -typedef struct emm_as_security_s { - uint32_t ueid; /* UE lower layer identifier */ - const GUTI_t *guti; /* GUTI temporary mobile identity */ - emm_as_security_data_t sctx;/* EPS NAS security context */ - int emm_cause; /* EMM failure cause code */ - /* - * Identity request/response - */ - uint8_t identType; /* Type of requested UE's identity */ - const imsi_t *imsi; /* The requested IMSI of the UE */ - const imei_t *imei; /* The requested IMEI of the UE */ - uint32_t tmsi; /* The requested TMSI of the UE */ - /* - * Authentication request/response - */ - uint8_t ksi; /* NAS key set identifier */ - const OctetString *rand; /* Random challenge number */ - const OctetString *autn; /* Authentication token */ - const OctetString *res; /* Authentication response */ - const OctetString *auts; /* Synchronisation failure */ - /* - * Security Mode Command - */ - uint8_t eea; /* Replayed EPS encryption algorithms */ - uint8_t eia; /* Replayed EPS integrity algorithms */ - uint8_t uea; /* Replayed UMTS encryption algorithms */ - uint8_t ucs2; - uint8_t uia; /* Replayed UMTS integrity algorithms */ - uint8_t gea; /* Replayed GPRS encryption algorithms */ - uint8_t umts_present; - uint8_t gprs_present; - - // Added by LG - uint8_t selected_eea; /* Selected EPS encryption algorithms */ - uint8_t selected_eia; /* Selected EPS integrity algorithms */ - -#define EMM_AS_MSG_TYPE_IDENT 0x01 /* Identification message */ -#define EMM_AS_MSG_TYPE_AUTH 0x02 /* Authentication message */ -#define EMM_AS_MSG_TYPE_SMC 0x03 /* Security Mode Command */ - uint8_t msgType; /* Type of NAS security message to transfer */ -} emm_as_security_t; - -/* - * EMMAS primitive for connection establishment - * -------------------------------------------- - */ -typedef struct emm_as_EPS_identity_s { - const GUTI_t *guti; /* The GUTI, if valid */ - const tai_t *tai; /* The last visited registered Tracking - * Area Identity, if available */ - const imsi_t *imsi; /* IMSI in case of "AttachWithImsi" */ - const imei_t *imei; /* UE's IMEI for emergency bearer services */ -} emm_as_EPS_identity_t; - -typedef struct emm_as_establish_s { - uint32_t ueid; /* UE lower layer identifier */ - emm_as_EPS_identity_t UEid; /* UE's EPS mobile identity */ - emm_as_security_data_t sctx;/* EPS NAS security context */ - int switch_off; /* TRUE if the UE is switched off */ - uint8_t type; /* Network attach/detach type */ - uint8_t RRCcause; /* Connection establishment cause */ - uint8_t RRCtype; /* Associated call type */ - const plmn_t *plmnID; /* Identifier of the selected PLMN */ - uint8_t ksi; /* NAS key set identifier */ - uint8_t encryption:4; /* Ciphering algorithm */ - uint8_t integrity:4; /* Integrity protection algorithm */ - int emm_cause; /* EMM failure cause code */ - const GUTI_t *new_guti; /* New GUTI, if re-allocated */ - int n_tacs; /* Number of concecutive tracking areas - * the UE is registered to */ - tac_t tac; /* Code of the first tracking area the UE - * is registered to */ -#define EMM_AS_NAS_INFO_ATTACH 0x01 /* Attach request */ -#define EMM_AS_NAS_INFO_DETACH 0x02 /* Detach request */ -#define EMM_AS_NAS_INFO_TAU 0x03 /* Tracking Area Update request */ -#define EMM_AS_NAS_INFO_SR 0x04 /* Service Request */ -#define EMM_AS_NAS_INFO_EXTSR 0x05 /* Extended Service Request */ - uint8_t NASinfo; /* Type of initial NAS information to transfer */ - OctetString NASmsg; /* NAS message to be transfered within - * initial NAS information message */ -} emm_as_establish_t; - -/* - * EMMAS primitive for connection release - * -------------------------------------- - */ -typedef struct emm_as_release_s { - uint32_t ueid; /* UE lower layer identifier */ - const GUTI_t *guti; /* GUTI temporary mobile identity */ -#define EMM_AS_CAUSE_AUTHENTICATION 0x01 /* Authentication failure */ -#define EMM_AS_CAUSE_DETACH 0x02 /* Detach requested */ - uint8_t cause; /* Release cause */ -} emm_as_release_t; - -/* - * EMMAS primitive for data transfer - * --------------------------------- - */ -typedef struct emm_as_data_s { - uint32_t ueid; /* UE lower layer identifier */ - const GUTI_t *guti; /* GUTI temporary mobile identity */ - emm_as_security_data_t sctx;/* EPS NAS security context */ - int switch_off; /* TRUE if the UE is switched off */ - uint8_t type; /* Network detach type */ - uint8_t delivered; /* Data message delivery indicator */ -#define EMM_AS_NAS_DATA_ATTACH 0x01 /* Attach complete */ -#define EMM_AS_NAS_DATA_DETACH 0x02 /* Detach request */ - uint8_t NASinfo; /* Type of NAS information to transfer */ - OctetString NASmsg; /* NAS message to be transfered */ -} emm_as_data_t; - -/* - * EMMAS primitive for paging - * -------------------------- - */ -typedef struct emm_as_page_s {} emm_as_page_t; - -/* - * EMMAS primitive for status indication - * ------------------------------------- - */ -typedef struct emm_as_status_s { - uint32_t ueid; /* UE lower layer identifier */ - const GUTI_t *guti; /* GUTI temporary mobile identity */ - emm_as_security_data_t sctx;/* EPS NAS security context */ - int emm_cause; /* EMM failure cause code */ -} emm_as_status_t; - -/* - * EMMAS primitive for cell information - * ------------------------------------ - */ -typedef struct emm_as_cell_info_s { - uint8_t found; /* Indicates whether a suitable cell is found */ -#define EMM_AS_PLMN_LIST_SIZE 6 - PLMN_LIST_T(EMM_AS_PLMN_LIST_SIZE) plmnIDs; - /* List of identifiers of available PLMNs */ - Byte_t rat; /* Bitmap of Radio Access Technologies */ - tac_t tac; /* Tracking Area Code */ - ci_t cellID; /* cell identity */ -} emm_as_cell_info_t; - -/* - * -------------------------------- - * Structure of EMMAS-SAP primitive - * -------------------------------- - */ -typedef struct emm_as_s { - emm_as_primitive_t primitive; - union { - emm_as_security_t security; - emm_as_establish_t establish; - emm_as_release_t release; - emm_as_data_t data; - emm_as_page_t page; - emm_as_status_t status; - emm_as_cell_info_t cell_info; - } u; -} emm_as_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * Defined in LowerLayer.c - * Setup security data according to the given EPS security context - */ -void emm_as_set_security_data(emm_as_security_data_t *data, const void *context, - int is_new, int is_ciphered); - -#endif /* __EMM_ASDEF_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_cn.c b/openair-cn/NAS/MME/EMM/SAP/emm_cn.c deleted file mode 100644 index 603e849c14..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_cn.c +++ /dev/null @@ -1,468 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_cn.c - -Version 0.1 - -Date 2013/12/05 - -Product NAS stack - -Subsystem EPS Core Network - -Author Sebastien Roux, Lionel GAUTHIER - -Description - -*****************************************************************************/ - -#include - -#if defined(NAS_BUILT_IN_EPC) - -#include "nas_log.h" -#include "commonDef.h" - -#include "emm_cn.h" -#include "emm_sap.h" -#include "emm_proc.h" -#include "emm_cause.h" - -#include "esm_send.h" // LG -#include "esm_proc.h" // LG -#include "esm_cause.h" // LG -#include "assertions.h"// LG -#include "emmData.h" // LG -#include "esm_sap.h" // LG -#include "EmmCommon.h" // LG -extern int emm_cn_wrapper_attach_accept(emm_data_context_t *emm_ctx, void *data); - -/* - * Internal data used for attach procedure - */ -typedef struct { - unsigned int ueid; /* UE identifier */ -#define ATTACH_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - OctetString esm_msg; /* ESM message to be sent within - * the Attach Accept message */ -} attach_data_t; - -/* - * String representation of EMMCN-SAP primitives - */ -static const char *_emm_cn_primitive_str[] = { - "EMM_CN_AUTHENTICATION_PARAM_RES", - "EMM_CN_AUTHENTICATION_PARAM_FAIL", - "EMM_CN_DEREGISTER_UE", - "EMM_CN_PDN_CONNECTIVITY_RES", - "EMM_CN_PDN_CONNECTIVITY_FAIL", -}; - -#define EMM_CN_SAP_BUFFER_SIZE 4096 -static char _emm_cn_sap_buffer[EMM_CN_SAP_BUFFER_SIZE]; - -static int _emm_cn_authentication_res(const emm_cn_auth_res_t *msg) -{ - emm_data_context_t *emm_ctx = NULL; - int rc = RETURNerror; - OctetString loc_rand; - OctetString autn; - - /* We received security vector from HSS. Try to setup security with UE */ - - LOG_FUNC_IN; - - emm_ctx = emm_data_context_get(&_emm_data, msg->ue_id); - - if (emm_ctx == NULL) { - LOG_TRACE(ERROR, "EMM-PROC - " - "Failed to find UE associated to id "NAS_UE_ID_FMT"...", msg->ue_id); - LOG_FUNC_RETURN (rc); - } - - /* Copy provided vector to user context */ - memcpy(emm_ctx->vector.kasme, msg->vector.kasme, AUTH_KASME_SIZE); - memcpy(emm_ctx->vector.autn, msg->vector.autn, AUTH_AUTN_SIZE); - memcpy(emm_ctx->vector.rand, msg->vector.rand, AUTH_RAND_SIZE); - memcpy(emm_ctx->vector.xres, msg->vector.xres.data, msg->vector.xres.size); - - LOG_TRACE(INFO, "EMM-PROC - Received RAND ..: "RAND_FORMAT"\n", - RAND_DISPLAY(msg->vector.rand)); - LOG_TRACE(INFO, "EMM-PROC - Received AUTN ..: "AUTN_FORMAT"\n", - AUTN_DISPLAY(msg->vector.autn)); - LOG_TRACE(INFO, "EMM-PROC - Received KASME .: "KASME_FORMAT" "KASME_FORMAT"\n", - KASME_DISPLAY_1(msg->vector.kasme), - KASME_DISPLAY_2(msg->vector.kasme)); - - loc_rand.value = emm_ctx->vector.rand; - loc_rand.length = AUTH_RAND_SIZE; - - autn.value = emm_ctx->vector.autn; - autn.length = AUTH_AUTN_SIZE; - - emm_ctx->vector.xres_size = msg->vector.xres.size; - - /* 3GPP TS 24.401, Figure 5.3.2.1-1, point 5a - * No EMM context exists for the UE in the network; authentication - * and NAS security setup to activate integrity protection and NAS - * ciphering are mandatory. - */ - rc = emm_proc_authentication(emm_ctx, - emm_ctx->ueid, - 0, // TODO: eksi != 0 - &loc_rand, - &autn, - emm_attach_security, - NULL, - NULL); - - if (rc != RETURNok) { - /* Failed to initiate the authentication procedure */ - LOG_TRACE(WARNING, "EMM-PROC - " - "Failed to initiate authentication procedure"); - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - LOG_FUNC_RETURN (rc); -} - -static int _emm_cn_authentication_fail(const emm_cn_auth_fail_t *msg) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - rc = emm_proc_attach_reject(msg->ue_id, msg->cause); - - LOG_FUNC_RETURN (rc); -} - -static int _emm_cn_deregister_ue(const uint32_t ue_id) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - LOG_TRACE(WARNING, "EMM-PROC - " - "TODO deregister UE "NAS_UE_ID_FMT", following procedure is a test", ue_id); - emm_proc_detach_request(ue_id, EMM_DETACH_TYPE_EPS /* ??? emm_proc_detach_type_t*/, - 1 /*switch_off*/, 0 /*native_ksi*/, 0 /*ksi*/, - NULL /*guti*/, NULL /*imsi*/, NULL /*imei*/); - LOG_FUNC_RETURN (rc); -} - -static int _emm_cn_pdn_connectivity_res(const emm_cn_pdn_res_t *msg_pP) -{ - int rc = RETURNok; - struct emm_data_context_s *emm_ctx_p = NULL; - esm_proc_pdn_type_t esm_pdn_type = ESM_PDN_TYPE_IPV4; - esm_proc_data_t *esm_proc_data_p = NULL; - ESM_msg esm_msg; - EpsQualityOfService qos; - ProtocolConfigurationOptions pco; - unsigned int pco_in_index = 0; - signed int length_in_pco = 0; - uint16_t pi_or_ci = 0; // protocol identifier or container identifier; - uint8_t length_pi_or_ci = 0; - - OctetString rsp = { 0, NULL}; - int is_standalone = 0; // warning hardcoded - int triggered_by_ue = 1; // warning hardcoded - attach_data_t *data_p = NULL; - int esm_cause = ESM_CAUSE_SUCCESS; - int pid = 0; - unsigned int new_ebi = 0; - - - LOG_FUNC_IN; - emm_ctx_p = emm_data_context_get(&_emm_data, msg_pP->ue_id); - - if (emm_ctx_p == NULL) { - LOG_TRACE(ERROR, "EMMCN-SAP - " - "Failed to find UE associated to id "NAS_UE_ID_FMT"...", msg_pP->ue_id); - LOG_FUNC_RETURN (rc); - } - - memset(&esm_msg, 0 , sizeof(ESM_msg)); - - switch (msg_pP->pdn_type) { - case IPv4: - LOG_TRACE(INFO, "EMM - esm_pdn_type = ESM_PDN_TYPE_IPV4"); - esm_pdn_type = ESM_PDN_TYPE_IPV4; - break; - - case IPv6: - LOG_TRACE(INFO, "EMM - esm_pdn_type = ESM_PDN_TYPE_IPV6"); - esm_pdn_type = ESM_PDN_TYPE_IPV6; - break; - - case IPv4_AND_v6: - LOG_TRACE(INFO, "EMM - esm_pdn_type = ESM_PDN_TYPE_IPV4V6"); - esm_pdn_type = ESM_PDN_TYPE_IPV4V6; - break; - - default: - LOG_TRACE(INFO, "EMM - esm_pdn_type = ESM_PDN_TYPE_IPV4 (forced to default)"); - esm_pdn_type = ESM_PDN_TYPE_IPV4; - } - - LOG_TRACE(INFO, "EMM - qci = %u ", msg_pP->qci); - LOG_TRACE(INFO, "EMM - qos.qci = %u ", msg_pP->qos.qci); - LOG_TRACE(INFO, "EMM - qos.mbrUL = %u ", msg_pP->qos.mbrUL); - LOG_TRACE(INFO, "EMM - qos.mbrDL = %u ", msg_pP->qos.mbrDL); - LOG_TRACE(INFO, "EMM - qos.gbrUL = %u ", msg_pP->qos.gbrUL); - LOG_TRACE(INFO, "EMM - qos.gbrDL = %u ", msg_pP->qos.gbrDL); - qos.bitRatesPresent = 0; - qos.bitRatesExtPresent = 0; -#warning "Some work to do here about qos" - qos.qci = msg_pP->qci; - qos.bitRates.maxBitRateForUL = 0;//msg_pP->qos.mbrUL; - qos.bitRates.maxBitRateForDL = 0;//msg_pP->qos.mbrDL; - qos.bitRates.guarBitRateForUL = 0;//msg_pP->qos.gbrUL; - qos.bitRates.guarBitRateForDL = 0;//msg_pP->qos.gbrDL; - - qos.bitRatesExt.maxBitRateForUL = 0; - qos.bitRatesExt.maxBitRateForDL = 0; - qos.bitRatesExt.guarBitRateForUL = 0; - qos.bitRatesExt.guarBitRateForDL = 0; - - //-------------------------------------------------------------------------- - // PCO processing - //-------------------------------------------------------------------------- - memset(&pco, 0, sizeof(ProtocolConfigurationOptions)); - length_in_pco = msg_pP->pco.byte[1]; - if ((length_in_pco+1+1) != msg_pP->pco.length) { - LOG_TRACE(WARNING, "PCO: mismatch in lengths length_pco+1+1 %u != msg_pP->pco.length %u\n", - length_in_pco+1+1, msg_pP->pco.length); - } - pco.configurationprotol = msg_pP->pco.byte[2] & 0x07; - - for (int i = 0; i < msg_pP->pco.length; i++) { - LOG_TRACE(WARNING, "EMMCN_PDN_CONNECTIVITY_RES.pco.byte[%u] = 0x%x", i, msg_pP->pco.byte[i]); - } - - - if ((length_in_pco > 0) && (msg_pP->pco.byte[2] & 0x80)) { - pco_in_index = PCO_MIN_LENGTH; - while (length_in_pco >= 3) { - pi_or_ci = (((uint16_t)msg_pP->pco.byte[pco_in_index]) << 8) | (uint16_t)msg_pP->pco.byte[pco_in_index+1]; - pco_in_index += 2; - length_pi_or_ci = msg_pP->pco.byte[pco_in_index++]; - pco.protocolid[pco.num_protocol_id_or_container_id] = pi_or_ci; - pco.lengthofprotocolid[pco.num_protocol_id_or_container_id] = length_pi_or_ci; - pco.protocolidcontents[pco.num_protocol_id_or_container_id].value = malloc(length_pi_or_ci); - pco.protocolidcontents[pco.num_protocol_id_or_container_id].length = length_pi_or_ci; - memcpy(pco.protocolidcontents[pco.num_protocol_id_or_container_id].value, - &msg_pP->pco.byte[pco_in_index], - length_pi_or_ci); - - LOG_TRACE(WARNING, "PCO: Found pi_or_ci 0x%x length %u content %s\n", - pi_or_ci, length_pi_or_ci, dump_octet_string(&pco.protocolidcontents[pco.num_protocol_id_or_container_id])); - pco.num_protocol_id_or_container_id++; - pco_in_index += length_pi_or_ci; - - length_in_pco = length_in_pco - (length_pi_or_ci + 2 + 1); - } // while (length_in_pco >= 3) { - } // if ((length_in_pco > 0) && (msg_pP->pco.byte[2] & 0x80)) { - /*************************************************************************/ - /* CODE THAT WAS IN esm_recv.c/esm_recv_pdn_connectivity_request() */ - /*************************************************************************/ - /* Execute the PDN connectivity procedure requested by the UE */ - pid = esm_proc_pdn_connectivity_request( - emm_ctx_p, - msg_pP->pti, - msg_pP->request_type, - &msg_pP->apn, - esm_pdn_type, - &msg_pP->pdn_addr, - NULL, - &esm_cause); - LOG_TRACE(INFO, "EMM - APN = %s ", (char *)(msg_pP->apn.value)); - - if (pid != RETURNerror) { - /* Create local default EPS bearer context */ - rc = esm_proc_default_eps_bearer_context( - emm_ctx_p, - pid, - &new_ebi, - &msg_pP->qos, - &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } else { - LOG_FUNC_RETURN (rc); - } - - /**************************************************************************/ - /* END OF CODE THAT WAS IN esm_recv.c/esm_recv_pdn_connectivity_request() */ - /**************************************************************************/ - LOG_TRACE(INFO, "EMM - APN = %s ", (char *)(msg_pP->apn.value)); - - - /*************************************************************************/ - /* CODE THAT WAS IN esm_sap.c/_esm_sap_recv() */ - /*************************************************************************/ - /* Return default EPS bearer context request message */ - rc = esm_send_activate_default_eps_bearer_context_request( - msg_pP->pti, - new_ebi, //msg_pP->ebi, - &esm_msg.activate_default_eps_bearer_context_request, - &msg_pP->apn, - &pco, - esm_pdn_type, - &msg_pP->pdn_addr, - &qos, - ESM_CAUSE_SUCCESS); - - - if (rc != RETURNerror) { - /* Encode the returned ESM response message */ - int size = esm_msg_encode(&esm_msg, (uint8_t *)_emm_cn_sap_buffer, - EMM_CN_SAP_BUFFER_SIZE); - LOG_TRACE(INFO, "ESM encoded MSG size %d ", size); - - if (size > 0) { - rsp.length = size; - rsp.value = (uint8_t *)(_emm_cn_sap_buffer); - } - - /* Complete the relevant ESM procedure */ - rc = esm_proc_default_eps_bearer_context_request( - is_standalone, - emm_ctx_p, - new_ebi, //0, //ESM_EBI_UNASSIGNED, //msg->ebi, - &rsp, - triggered_by_ue); - - if (rc != RETURNok) { - /* Return indication that ESM procedure failed */ - LOG_FUNC_RETURN (rc); - } - } else { - LOG_TRACE(INFO, "ESM send activate_default_eps_bearer_context_request failed"); - } - - /*************************************************************************/ - /* END OF CODE THAT WAS IN esm_sap.c/_esm_sap_recv() */ - /*************************************************************************/ - - LOG_TRACE(INFO, "EMM - APN = %s ", (char *)(msg_pP->apn.value)); - data_p = (attach_data_t *)emm_proc_common_get_args(msg_pP->ue_id); - - /* Setup the ESM message container */ - data_p->esm_msg.value = (uint8_t *)malloc(rsp.length); - - if (data_p->esm_msg.value) { - data_p->esm_msg.length = rsp.length; - LOG_TRACE(INFO, "EMM - copy ESM MSG %d bytes", data_p->esm_msg.length); - memcpy(data_p->esm_msg.value, - rsp.value, - rsp.length); - } else { - data_p->esm_msg.length = 0; - } - - /* Send attach accept message to the UE */ - rc = emm_cn_wrapper_attach_accept(emm_ctx_p, data_p); - - if (rc != RETURNerror) { - if (emm_ctx_p->guti_is_new && emm_ctx_p->old_guti) { - /* Implicit GUTI reallocation; - * Notify EMM that common procedure has been initiated - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = msg_pP->ue_id; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_TRACE(INFO, "EMM - APN = %s ", (char *)(msg_pP->apn.value)); - LOG_FUNC_RETURN (rc); -} - -static int _emm_cn_pdn_connectivity_fail(const emm_cn_pdn_fail_t *msg) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - - LOG_FUNC_RETURN (rc); -} - -int emm_cn_send(const emm_cn_t *msg) -{ - int rc = RETURNerror; - emm_cn_primitive_t primitive = msg->primitive; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMCN-SAP - Received primitive %s (%d)", - _emm_cn_primitive_str[primitive - _EMMCN_START - 1], primitive); - - switch (primitive) { - case _EMMCN_AUTHENTICATION_PARAM_RES: - rc = _emm_cn_authentication_res(msg->u.auth_res); - break; - - case _EMMCN_AUTHENTICATION_PARAM_FAIL: - rc = _emm_cn_authentication_fail(msg->u.auth_fail); - break; - - case EMMCN_DEREGISTER_UE: - rc = _emm_cn_deregister_ue(msg->u.deregister.UEid); - break; - - case EMMCN_PDN_CONNECTIVITY_RES: - rc = _emm_cn_pdn_connectivity_res(msg->u.emm_cn_pdn_res); - break; - - case EMMCN_PDN_CONNECTIVITY_FAIL: - rc = _emm_cn_pdn_connectivity_fail(msg->u.emm_cn_pdn_fail); - break; - - default: - /* Other primitives are forwarded to the Access Stratum */ - rc = RETURNerror; - break; - } - - if (rc != RETURNok) { - LOG_TRACE(ERROR, "EMMCN-SAP - Failed to process primitive %s (%d)", - _emm_cn_primitive_str[primitive - _EMMCN_START - 1], - primitive); - } - - LOG_FUNC_RETURN (rc); -} -#endif diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_cn.h b/openair-cn/NAS/MME/EMM/SAP/emm_cn.h deleted file mode 100644 index cb4e687b62..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_cn.h +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_cn.h - -Version 0.1 - -Date 2013/12/05 - -Product NAS stack - -Subsystem EPS Core Network - -Author Sebastien Roux, Lionel GAUTHIER - -Description - -*****************************************************************************/ - -#include "emm_cnDef.h" - -#ifndef _EMM_CN_H_ -#define _EMM_CN_H_ - -#if defined(NAS_BUILT_IN_EPC) -int emm_cn_send(const emm_cn_t *msg); -#endif - -#endif /* _EMM_CN_H_ */ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h deleted file mode 100644 index 738871e5eb..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_cnDef.h - -Version 0.1 - -Date 2013/12/05 - -Product NAS stack - -Subsystem EPS Core Network - -Author Sebastien Roux, Lionel GAUTHIER - -Description - -*****************************************************************************/ - -#if defined(NAS_BUILT_IN_EPC) -#include "intertask_interface.h" -#endif - -#ifndef __EMM_CNDEF_H__ -#define __EMM_CNDEF_H__ - -typedef enum emmcn_primitive_s { - _EMMCN_START = 400, -#if defined(NAS_BUILT_IN_EPC) - _EMMCN_AUTHENTICATION_PARAM_RES, - _EMMCN_AUTHENTICATION_PARAM_FAIL, - _EMMCN_DEREGISTER_UE, - _EMMCN_PDN_CONNECTIVITY_RES, // LG - _EMMCN_PDN_CONNECTIVITY_FAIL,// LG -#endif - _EMMCN_END -} emm_cn_primitive_t; - -#if defined(NAS_BUILT_IN_EPC) -typedef nas_auth_param_rsp_t emm_cn_auth_res_t; -typedef nas_auth_param_fail_t emm_cn_auth_fail_t; -typedef nas_pdn_connectivity_rsp_t emm_cn_pdn_res_t; -typedef nas_pdn_connectivity_fail_t emm_cn_pdn_fail_t; - -typedef struct emm_cn_deregister_ue_s { - uint32_t UEid; -} emm_cn_deregister_ue_t; - -typedef struct emm_mme_ul_s { - emm_cn_primitive_t primitive; - union { - emm_cn_auth_res_t *auth_res; - emm_cn_auth_fail_t *auth_fail; - emm_cn_deregister_ue_t deregister; - emm_cn_pdn_res_t *emm_cn_pdn_res; - emm_cn_pdn_fail_t *emm_cn_pdn_fail; - } u; -} emm_cn_t; -#endif - -#endif /* __EMM_CNDEF_H__ */ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_esm.c b/openair-cn/NAS/MME/EMM/SAP/emm_esm.c deleted file mode 100644 index 2a7af5c780..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_esm.c +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_esm.c - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMESM Service Access Point that provides - interlayer services to the EPS Session Management sublayer - for service registration and activate/deactivate PDN - connections. - -*****************************************************************************/ - -#include "emm_esm.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "LowerLayer.h" - - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * String representation of EMMESM-SAP primitives - */ -static const char *_emm_esm_primitive_str[] = { - "EMMESM_RELEASE_IND", - "EMMESM_UNITDATA_REQ", - "EMMESM_UNITDATA_IND", -}; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_esm_initialize() ** - ** ** - ** Description: Initializes the EMMESM Service Access Point ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: NONE ** - ** ** - ***************************************************************************/ -void emm_esm_initialize(void) -{ - LOG_FUNC_IN; - - /* TODO: Initialize the EMMESM-SAP */ - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_esm_send() ** - ** ** - ** Description: Processes the EMMESM Service Access Point primitive ** - ** ** - ** Inputs: msg: The EMMESM-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_esm_send(const emm_esm_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - emm_esm_primitive_t primitive = msg->primitive; - - LOG_TRACE(INFO, "EMMESM-SAP - Received primitive %s (%d)", - _emm_esm_primitive_str[primitive - _EMMESM_START - 1], primitive); - - switch (primitive) { - - case _EMMESM_UNITDATA_REQ: - /* ESM requests EMM to transfer ESM data unit to lower layer */ - rc = lowerlayer_data_req(msg->ueid, &msg->u.data.msg); - break; - - default: - break; - - } - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "EMMESM-SAP - Failed to process primitive %s (%d)", - _emm_esm_primitive_str[primitive - _EMMESM_START - 1], - primitive); - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_esm.h b/openair-cn/NAS/MME/EMM/SAP/emm_esm.h deleted file mode 100644 index 6967b97ca1..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_esm.h +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_esm.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMESM Service Access Point that provides - interlayer services to the EPS Session Management sublayer - for service registration and activate/deactivate PDP context. - -*****************************************************************************/ -#ifndef __EMM_ESM_H__ -#define __EMM_ESM_H__ - -#include "emm_esmDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void emm_esm_initialize(void); - -int emm_esm_send(const emm_esm_t *msg); - -#endif /* __EMM_ESM_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h deleted file mode 100644 index 3fbc035bdf..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_esmDef.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMESM Service Access Point that provides - interlayer services to the EPS Session Management sublayer - for service registration and activate/deactivate PDN - connections. - -*****************************************************************************/ -#ifndef __EMM_ESMDEF_H__ -#define __EMM_ESMDEF_H__ - -#include "OctetString.h" -#include "emmData.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * EMMESM-SAP primitives - */ -typedef enum { - _EMMESM_START = 100, - _EMMESM_RELEASE_IND, - _EMMESM_UNITDATA_REQ, - _EMMESM_UNITDATA_IND, - _EMMESM_END -} emm_esm_primitive_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * EMMESM primitive for connection establishment - * --------------------------------------------- - */ -typedef struct { - int is_emergency; /* Indicates whether the PDN connection is established - * for emergency bearer services only */ - int is_attached; /* Indicates whether the UE remains attached to the - * network */ -} emm_esm_establish_t; - -/* - * EMMESM primitive for data transfer - * ---------------------------------- - */ -typedef struct { - OctetString msg; /* ESM message to be transfered */ -} emm_esm_data_t; - -/* - * --------------------------------- - * Structure of EMMESM-SAP primitive - * --------------------------------- - */ -typedef struct { - emm_esm_primitive_t primitive; - unsigned int ueid; - emm_data_context_t *ctx; - union { - emm_esm_establish_t establish; - emm_esm_data_t data; - } u; - /* TODO: complete emm_esm_t structure definition */ -} emm_esm_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif /* __EMM_ESMDEF_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c deleted file mode 100644 index bbbace861b..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c +++ /dev/null @@ -1,328 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_fsm.c - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EPS Mobility Management procedures executed at - the EMMREG Service Access Point. - -*****************************************************************************/ - -#include "emm_fsm.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "mme_api.h" -#include "emmData.h" - -#if defined(NAS_BUILT_IN_EPC) -# include "assertions.h" -#endif -# include "msc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - - -#define EMM_FSM_NB_UE_MAX (MME_API_NB_UE_MAX + 1) - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * ----------------------------------------------------------------------------- - * Data used for trace logging - * ----------------------------------------------------------------------------- - */ - -/* String representation of EMM events */ -static const char *_emm_fsm_event_str[] = { - "COMMON_PROC_REQ", - "COMMON_PROC_CNF", - "COMMON_PROC_REJ", - "PROC_ABORT", - "ATTACH_CNF", - "ATTACH_REJ", - "DETACH_INIT", - "DETACH_REQ", - "DETACH_FAILED", - "DETACH_CNF", - "TAU_REQ", - "TAU_CNF", - "TAU_REJ", - "SERVICE_REQ", - "SERVICE_CNF", - "SERVICE_REJ", - "LOWERLAYER_SUCCESS", - "LOWERLAYER_FAILURE", - "LOWERLAYER_RELEASE", -}; - -/* String representation of EMM status */ -static const char *_emm_fsm_status_str[EMM_STATE_MAX] = { - "INVALID", - "DEREGISTERED", - "REGISTERED", - "DEREGISTERED-INITIATED", - "COMMON-PROCEDURE-INITIATED", -}; - -/* - * ----------------------------------------------------------------------------- - * EPS Mobility Management state machine handlers - * ----------------------------------------------------------------------------- - */ - -/* Type of the EPS Mobility Management state machine handler */ -typedef int(*emm_fsm_handler_t)(const emm_reg_t *); - -int EmmDeregistered(const emm_reg_t *); -int EmmRegistered(const emm_reg_t *); -int EmmDeregisteredInitiated(const emm_reg_t *); -int EmmCommonProcedureInitiated(const emm_reg_t *); - -/* EMM state machine handlers */ -static const emm_fsm_handler_t _emm_fsm_handlers[EMM_STATE_MAX] = { - NULL, - EmmDeregistered, - EmmRegistered, - EmmDeregisteredInitiated, - EmmCommonProcedureInitiated, -}; - -/* - * ----------------------------------------------------------------------------- - * Current EPS Mobility Management status - * ----------------------------------------------------------------------------- - */ - -#if !defined(NAS_BUILT_IN_EPC) -emm_fsm_state_t _emm_fsm_status[EMM_FSM_NB_UE_MAX]; -#endif - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_fsm_initialize() ** - ** ** - ** Description: Initializes the EMM state machine ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _emm_fsm_status ** - ** ** - ***************************************************************************/ -void emm_fsm_initialize(void) -{ - int ueid; - LOG_FUNC_IN; - - -#if !defined(NAS_BUILT_IN_EPC) - - for (ueid = 0; ueid < EMM_FSM_NB_UE_MAX; ueid++) { - _emm_fsm_status[ueid] = EMM_DEREGISTERED; - } - -#endif - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_fsm_set_status() ** - ** ** - ** Description: Set the EPS Mobility Management status to the given state ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** status: The new EMM status ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_fsm_status ** - ** ** - ***************************************************************************/ -int emm_fsm_set_status( - unsigned int ueid, - void *ctx, - emm_fsm_state_t status) -{ - LOG_FUNC_IN; - -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; - - DevAssert(emm_ctx != NULL); - - if ((status < EMM_STATE_MAX) && (ueid > 0)) { - - if (status != emm_ctx->_emm_fsm_status) { - LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", - _emm_fsm_status_str[emm_ctx->_emm_fsm_status], - _emm_fsm_status_str[status]); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 EMM state %s ", _emm_fsm_status_str[status]); - emm_ctx->_emm_fsm_status = status; - } - - LOG_FUNC_RETURN (RETURNok); - } - -#else - - if ( (status < EMM_STATE_MAX) && (ueid < EMM_FSM_NB_UE_MAX) ) { - if (status != _emm_fsm_status[ueid]) { - LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", - _emm_fsm_status_str[_emm_fsm_status[ueid]], - _emm_fsm_status_str[status]); - - _emm_fsm_status[ueid] = status; - } - - LOG_FUNC_RETURN (RETURNok); - } - -#endif - - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: emm_fsm_get_status() ** - ** ** - ** Description: Get the current value of the EPS Mobility Management ** - ** status ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** Others: _emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: The current value of the EMM status ** - ** Others: None ** - ** ** - ***************************************************************************/ -emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx) -{ -# if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; - if (emm_ctx == NULL) { - LOG_TRACE(INFO, "EMM-FSM - try again get context ueid "NAS_UE_ID_FMT" ", - ueid); - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - if (emm_ctx != NULL) { - return emm_ctx->_emm_fsm_status; - } - -# else - - if (ueid < EMM_FSM_NB_UE_MAX) { - return (_emm_fsm_status[ueid]); - } -#endif - return EMM_STATE_MAX; -} - -/**************************************************************************** - ** ** - ** Name: emm_fsm_process() ** - ** ** - ** Description: Executes the EMM state machine ** - ** ** - ** Inputs: evt: The EMMREG-SAP event to process ** - ** Others: _emm_fsm_status ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_fsm_process(const emm_reg_t *evt) -{ - int rc; - emm_fsm_state_t status; - emm_reg_primitive_t primitive; - - LOG_FUNC_IN; - - primitive = evt->primitive; - -# if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)evt->ctx; - DevAssert(emm_ctx != NULL); - - status = emm_fsm_get_status(0, emm_ctx); -# else - - if (evt->ueid >= EMM_FSM_NB_UE_MAX) { - LOG_FUNC_RETURN (RETURNerror); - } - - status = _emm_fsm_status[evt->ueid]; -# endif - - LOG_TRACE(INFO, "EMM-FSM - Received event %s (%d) in state %s", - _emm_fsm_event_str[primitive - _EMMREG_START - 1], primitive, - _emm_fsm_status_str[status]); - -#if defined(NAS_BUILT_IN_EPC) - DevAssert(status != EMM_INVALID); -#endif - - /* Execute the EMM state machine */ - rc = (_emm_fsm_handlers[status])(evt); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h deleted file mode 100644 index 15ca989cc5..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_fsm.h - -Version 0.1 - -Date 2012/10/03 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EPS Mobility Management procedures executed at - the EMMREG Service Access Point. - -*****************************************************************************/ -#ifndef __EMM_FSM_H__ -#define __EMM_FSM_H__ - -#include "emm_regDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * States of the EPS Mobility Management sublayer - * ---------------------------------------------- - * The EMM protocol of the UE and the network is described by means of two - * different state machines. - */ -typedef enum { - EMM_INVALID, - EMM_DEREGISTERED, - EMM_REGISTERED, - EMM_DEREGISTERED_INITIATED, - EMM_COMMON_PROCEDURE_INITIATED, - EMM_STATE_MAX -} emm_fsm_state_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void emm_fsm_initialize(void); - -//LG 2015-03-13 struct emm_data_context_t; -int emm_fsm_set_status(unsigned int ueid, void *ctx, emm_fsm_state_t status); -emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx); - -int emm_fsm_process(const emm_reg_t *evt); - -#endif /* __EMM_FSM_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_recv.c b/openair-cn/NAS/MME/EMM/SAP/emm_recv.c deleted file mode 100644 index 2f0d944679..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_recv.c +++ /dev/null @@ -1,748 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_recv.c - -Version 0.1 - -Date 2013/01/30 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines functions executed at the EMMAS Service Access - Point upon receiving EPS Mobility Management messages - from the Access Stratum sublayer. - -*****************************************************************************/ - -#include "emm_recv.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_msgDef.h" -#include "emm_cause.h" -#include "emm_proc.h" - -#include // memcpy - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME upon receiving EMM messages - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_recv_status() ** - ** ** - ** Description: Processes EMM status message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received EMM Status message (cause=%d)", - msg->emmcause); - - /* - * Message checking - */ - *emm_cause = EMM_CAUSE_SUCCESS; - /* - * Message processing - */ - rc = emm_proc_status_ind(ueid, msg->emmcause); - - LOG_FUNC_RETURN (rc); -} - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME upon receiving EMM message from the UE - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_recv_attach_request() ** - ** ** - ** Description: Processes Attach Request message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_attach_request(unsigned int ueid, const attach_request_msg *msg, - int *emm_cause) -{ - int rc; - uint8_t gea = 0; - emm_proc_attach_type_t type; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Request message"); - - /* - * Message checking - */ -#if !defined(UPDATE_RELEASE_9) - - /* SR: In releases 9 and beyond the mandatory ie (old GUTI) has been removed */ - if ( (msg->oldgutiorimsi.guti.typeofidentity == EPS_MOBILE_IDENTITY_GUTI) && - !(msg->presencemask & ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT) ) { - /* The Old GUTI type IE shall be included if the type of identity - * in the EPS mobile identity IE is set to "GUTI" */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - LOG_TRACE(WARNING, "EMMAS-SAP - [%08x] - Received GUTI identity without " - "old GUTI IEI", ueid); - } else -#endif /* !defined(UPDATE_RELEASE_9) */ - if (msg->uenetworkcapability.spare != 0b000) { - /* Spare bits shall be coded as zero */ - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - LOG_TRACE(WARNING, "EMMAS-SAP - [%08x] - Non zero spare bits is suspicious", - ueid); - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - /* 3GPP TS 24.301, section 5.5.1.2.7, case b - * Perform protocol error abnormal case on the network side */ - rc = emm_proc_attach_reject(ueid, *emm_cause); - *emm_cause = EMM_CAUSE_SUCCESS; - LOG_FUNC_RETURN (rc); - } - - /* - * Message processing - */ - /* Get the EPS attach type */ - if (msg->epsattachtype == EPS_ATTACH_TYPE_EPS) { - type = EMM_ATTACH_TYPE_EPS; - } else if (msg->epsattachtype == EPS_ATTACH_TYPE_IMSI) { - type = EMM_ATTACH_TYPE_IMSI; - } else if (msg->epsattachtype == EPS_ATTACH_TYPE_EMERGENCY) { - type = EMM_ATTACH_TYPE_EMERGENCY; - } else if (msg->epsattachtype == EPS_ATTACH_TYPE_RESERVED) { - type = EMM_ATTACH_TYPE_RESERVED; - } else { - /* All other values shall be interpreted as "EPS attach" */ - type = EMM_ATTACH_TYPE_EPS; - } - - /* Get the EPS mobile identity */ - GUTI_t guti, *p_guti = NULL; - imsi_t imsi, *p_imsi = NULL; - imei_t imei, *p_imei = NULL; - - if (msg->oldgutiorimsi.guti.typeofidentity == EPS_MOBILE_IDENTITY_GUTI) { - /* Get the GUTI */ - p_guti = &guti; - guti.gummei.plmn.MCCdigit1 = msg->oldgutiorimsi.guti.mccdigit1; - guti.gummei.plmn.MCCdigit2 = msg->oldgutiorimsi.guti.mccdigit2; - guti.gummei.plmn.MCCdigit3 = msg->oldgutiorimsi.guti.mccdigit3; - guti.gummei.plmn.MNCdigit1 = msg->oldgutiorimsi.guti.mncdigit1; - guti.gummei.plmn.MNCdigit2 = msg->oldgutiorimsi.guti.mncdigit2; - guti.gummei.plmn.MNCdigit3 = msg->oldgutiorimsi.guti.mncdigit3; - guti.gummei.MMEgid = msg->oldgutiorimsi.guti.mmegroupid; - guti.gummei.MMEcode = msg->oldgutiorimsi.guti.mmecode; - guti.m_tmsi = msg->oldgutiorimsi.guti.mtmsi; - } else if (msg->oldgutiorimsi.imsi.typeofidentity == EPS_MOBILE_IDENTITY_IMSI) { - /* Get the IMSI */ - p_imsi = &imsi; - imsi.u.num.digit1 = msg->oldgutiorimsi.imsi.digit1; - imsi.u.num.digit2 = msg->oldgutiorimsi.imsi.digit2; - imsi.u.num.digit3 = msg->oldgutiorimsi.imsi.digit3; - imsi.u.num.digit4 = msg->oldgutiorimsi.imsi.digit4; - imsi.u.num.digit5 = msg->oldgutiorimsi.imsi.digit5; - imsi.u.num.digit6 = msg->oldgutiorimsi.imsi.digit6; - imsi.u.num.digit7 = msg->oldgutiorimsi.imsi.digit7; - imsi.u.num.digit8 = msg->oldgutiorimsi.imsi.digit8; - imsi.u.num.digit9 = msg->oldgutiorimsi.imsi.digit9; - imsi.u.num.digit10 = msg->oldgutiorimsi.imsi.digit10; - imsi.u.num.digit11 = msg->oldgutiorimsi.imsi.digit11; - imsi.u.num.digit12 = msg->oldgutiorimsi.imsi.digit12; - imsi.u.num.digit13 = msg->oldgutiorimsi.imsi.digit13; - imsi.u.num.digit14 = msg->oldgutiorimsi.imsi.digit14; - imsi.u.num.digit15 = msg->oldgutiorimsi.imsi.digit15; - imsi.u.num.parity = msg->oldgutiorimsi.imsi.oddeven; - } else if (msg->oldgutiorimsi.imei.typeofidentity == EPS_MOBILE_IDENTITY_IMEI) { - /* Get the IMEI */ - p_imei = &imei; - imei.u.num.digit1 = msg->oldgutiorimsi.imei.digit1; - imei.u.num.digit2 = msg->oldgutiorimsi.imei.digit2; - imei.u.num.digit3 = msg->oldgutiorimsi.imei.digit3; - imei.u.num.digit4 = msg->oldgutiorimsi.imei.digit4; - imei.u.num.digit5 = msg->oldgutiorimsi.imei.digit5; - imei.u.num.digit6 = msg->oldgutiorimsi.imei.digit6; - imei.u.num.digit7 = msg->oldgutiorimsi.imei.digit7; - imei.u.num.digit8 = msg->oldgutiorimsi.imei.digit8; - imei.u.num.digit9 = msg->oldgutiorimsi.imei.digit9; - imei.u.num.digit10 = msg->oldgutiorimsi.imei.digit10; - imei.u.num.digit11 = msg->oldgutiorimsi.imei.digit11; - imei.u.num.digit12 = msg->oldgutiorimsi.imei.digit12; - imei.u.num.digit13 = msg->oldgutiorimsi.imei.digit13; - imei.u.num.digit14 = msg->oldgutiorimsi.imei.digit14; - imei.u.num.digit15 = msg->oldgutiorimsi.imei.digit15; - imei.u.num.parity = msg->oldgutiorimsi.imei.oddeven; - } - - /* TODO: Get the UE network capabilities */ - - /* Get the Last visited registered TAI */ - tai_t tai, *p_tai = NULL; - - if (msg->presencemask & ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_PRESENT) { - p_tai = &tai; - tai.plmn.MCCdigit1 = msg->lastvisitedregisteredtai.mccdigit1; - tai.plmn.MCCdigit2 = msg->lastvisitedregisteredtai.mccdigit2; - tai.plmn.MCCdigit3 = msg->lastvisitedregisteredtai.mccdigit3; - tai.plmn.MNCdigit1 = msg->lastvisitedregisteredtai.mncdigit1; - tai.plmn.MNCdigit2 = msg->lastvisitedregisteredtai.mncdigit2; - tai.plmn.MNCdigit3 = msg->lastvisitedregisteredtai.mncdigit3; - tai.tac = msg->lastvisitedregisteredtai.tac; - } - - /* Execute the requested UE attach procedure */ -#warning " TODO gea to be review" - - if (msg->msnetworkcapability.msnetworkcapabilityvalue.length > 0) { - gea = (msg->msnetworkcapability.msnetworkcapabilityvalue.value[0] & 0x80) >> 1; - - if ((gea) && (msg->msnetworkcapability.msnetworkcapabilityvalue.length >= 2)) { - gea |= ((msg->msnetworkcapability.msnetworkcapabilityvalue.value[1] & 0x60) >> 1); - } - } - - rc = emm_proc_attach_request(ueid, type, - msg->naskeysetidentifier.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, - msg->naskeysetidentifier.naskeysetidentifier, - msg->oldgutitype != GUTI_MAPPED, p_guti, p_imsi, p_imei, p_tai, - msg->uenetworkcapability.eea, - msg->uenetworkcapability.eia, - msg->uenetworkcapability.ucs2, - msg->uenetworkcapability.uea, - msg->uenetworkcapability.uia, - gea, - msg->uenetworkcapability.umts_present, - msg->uenetworkcapability.gprs_present, - &msg->esmmessagecontainer.esmmessagecontainercontents); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_attach_complete() ** - ** ** - ** Description: Processes Attach Complete message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_attach_complete(unsigned int ueid, const attach_complete_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Complete message"); - - /* Execute the attach procedure completion */ - rc = emm_proc_attach_complete(ueid, - &msg->esmmessagecontainer.esmmessagecontainercontents); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_detach_request() ** - ** ** - ** Description: Processes Detach Request message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_detach_request(unsigned int ueid, const detach_request_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Detach Request message"); - - /* - * Message processing - */ - /* Get the detach type */ - emm_proc_detach_type_t type; - - if (msg->detachtype.typeofdetach == DETACH_TYPE_EPS) { - type = EMM_DETACH_TYPE_EPS; - } else if (msg->detachtype.typeofdetach == DETACH_TYPE_IMSI) { - type = EMM_DETACH_TYPE_IMSI; - } else if (msg->detachtype.typeofdetach == DETACH_TYPE_EPS_IMSI) { - type = EMM_DETACH_TYPE_EPS_IMSI; - } else if (msg->detachtype.typeofdetach == DETACH_TYPE_RESERVED_1) { - type = EMM_DETACH_TYPE_RESERVED; - } else if (msg->detachtype.typeofdetach == DETACH_TYPE_RESERVED_2) { - type = EMM_DETACH_TYPE_RESERVED; - } else { - /* All other values are interpreted as "combined EPS/IMSI detach" */ - type = DETACH_TYPE_EPS_IMSI; - } - - /* Get the EPS mobile identity */ - GUTI_t guti, *p_guti = NULL; - imsi_t imsi, *p_imsi = NULL; - imei_t imei, *p_imei = NULL; - - if (msg->gutiorimsi.guti.typeofidentity == EPS_MOBILE_IDENTITY_GUTI) { - /* Get the GUTI */ - p_guti = &guti; - guti.gummei.plmn.MCCdigit1 = msg->gutiorimsi.guti.mccdigit1; - guti.gummei.plmn.MCCdigit2 = msg->gutiorimsi.guti.mccdigit2; - guti.gummei.plmn.MCCdigit3 = msg->gutiorimsi.guti.mccdigit3; - guti.gummei.plmn.MNCdigit1 = msg->gutiorimsi.guti.mncdigit1; - guti.gummei.plmn.MNCdigit2 = msg->gutiorimsi.guti.mncdigit2; - guti.gummei.plmn.MNCdigit3 = msg->gutiorimsi.guti.mncdigit3; - guti.gummei.MMEgid = msg->gutiorimsi.guti.mmegroupid; - guti.gummei.MMEcode = msg->gutiorimsi.guti.mmecode; - guti.m_tmsi = msg->gutiorimsi.guti.mtmsi; - } else if (msg->gutiorimsi.imsi.typeofidentity == EPS_MOBILE_IDENTITY_IMSI) { - /* Get the IMSI */ - p_imsi = &imsi; - imsi.u.num.digit1 = msg->gutiorimsi.imsi.digit1; - imsi.u.num.digit2 = msg->gutiorimsi.imsi.digit2; - imsi.u.num.digit3 = msg->gutiorimsi.imsi.digit3; - imsi.u.num.digit4 = msg->gutiorimsi.imsi.digit4; - imsi.u.num.digit5 = msg->gutiorimsi.imsi.digit5; - imsi.u.num.digit6 = msg->gutiorimsi.imsi.digit6; - imsi.u.num.digit7 = msg->gutiorimsi.imsi.digit7; - imsi.u.num.digit8 = msg->gutiorimsi.imsi.digit8; - imsi.u.num.digit9 = msg->gutiorimsi.imsi.digit9; - imsi.u.num.digit10 = msg->gutiorimsi.imsi.digit10; - imsi.u.num.digit11 = msg->gutiorimsi.imsi.digit11; - imsi.u.num.digit12 = msg->gutiorimsi.imsi.digit12; - imsi.u.num.digit13 = msg->gutiorimsi.imsi.digit13; - imsi.u.num.digit14 = msg->gutiorimsi.imsi.digit14; - imsi.u.num.digit15 = msg->gutiorimsi.imsi.digit15; - imsi.u.num.parity = msg->gutiorimsi.imsi.oddeven; - } else if (msg->gutiorimsi.imei.typeofidentity == EPS_MOBILE_IDENTITY_IMEI) { - /* Get the IMEI */ - p_imei = &imei; - imei.u.num.digit1 = msg->gutiorimsi.imei.digit1; - imei.u.num.digit2 = msg->gutiorimsi.imei.digit2; - imei.u.num.digit3 = msg->gutiorimsi.imei.digit3; - imei.u.num.digit4 = msg->gutiorimsi.imei.digit4; - imei.u.num.digit5 = msg->gutiorimsi.imei.digit5; - imei.u.num.digit6 = msg->gutiorimsi.imei.digit6; - imei.u.num.digit7 = msg->gutiorimsi.imei.digit7; - imei.u.num.digit8 = msg->gutiorimsi.imei.digit8; - imei.u.num.digit9 = msg->gutiorimsi.imei.digit9; - imei.u.num.digit10 = msg->gutiorimsi.imei.digit10; - imei.u.num.digit11 = msg->gutiorimsi.imei.digit11; - imei.u.num.digit12 = msg->gutiorimsi.imei.digit12; - imei.u.num.digit13 = msg->gutiorimsi.imei.digit13; - imei.u.num.digit14 = msg->gutiorimsi.imei.digit14; - imei.u.num.digit15 = msg->gutiorimsi.imei.digit15; - imei.u.num.parity = msg->gutiorimsi.imei.oddeven; - } - - /* Execute the UE initiated detach procedure completion by the network */ - rc = emm_proc_detach_request(ueid, type, - msg->detachtype.switchoff != DETACH_TYPE_NORMAL_DETACH, - msg->naskeysetidentifier.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, - msg->naskeysetidentifier.naskeysetidentifier, - p_guti, p_imsi, p_imei); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_tracking_area_update_request() ** - ** ** - ** Description: Processes Tracking Area Update Request message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_tracking_area_update_request(unsigned int ueid, - const tracking_area_update_request_msg *msg, - int *emm_cause) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Tracking Area Update Request message"); - - /* LW: Not completely implemented; send a Received Tracking Area Update Reject to induce a Attach Request from UE! */ - rc = emm_proc_tracking_area_update_reject(ueid, EMM_CAUSE_IMPLICITLY_DETACHED); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_identity_response() ** - ** ** - ** Description: Processes Identity Response message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_identity_response(unsigned int ueid, identity_response_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Identity Response message"); - - /* - * Message processing - */ - /* Get the mobile identity */ - imsi_t imsi, *p_imsi = NULL; - imei_t imei, *p_imei = NULL; - struct tmsi_struct_t { - uint8_t digit1:4; - uint8_t digit2:4; - uint8_t digit3:4; - uint8_t digit4:4; - uint8_t digit5:4; - uint8_t digit6:4; - uint8_t digit7:4; - uint8_t digit8:4; - } tmsi, *p_tmsi = NULL; - - if (msg->mobileidentity.imsi.typeofidentity == MOBILE_IDENTITY_IMSI) { - /* Get the IMSI */ - p_imsi = &imsi; - imsi.u.num.digit1 = msg->mobileidentity.imsi.digit1; - imsi.u.num.digit2 = msg->mobileidentity.imsi.digit2; - imsi.u.num.digit3 = msg->mobileidentity.imsi.digit3; - imsi.u.num.digit4 = msg->mobileidentity.imsi.digit4; - imsi.u.num.digit5 = msg->mobileidentity.imsi.digit5; - imsi.u.num.digit6 = msg->mobileidentity.imsi.digit6; - imsi.u.num.digit7 = msg->mobileidentity.imsi.digit7; - imsi.u.num.digit8 = msg->mobileidentity.imsi.digit8; - imsi.u.num.digit9 = msg->mobileidentity.imsi.digit9; - imsi.u.num.digit10 = msg->mobileidentity.imsi.digit10; - imsi.u.num.digit11 = msg->mobileidentity.imsi.digit11; - imsi.u.num.digit12 = msg->mobileidentity.imsi.digit12; - imsi.u.num.digit13 = msg->mobileidentity.imsi.digit13; - imsi.u.num.digit14 = msg->mobileidentity.imsi.digit14; - imsi.u.num.digit15 = msg->mobileidentity.imsi.digit15; - imsi.u.num.parity = msg->mobileidentity.imsi.oddeven; - } else if ((msg->mobileidentity.imei.typeofidentity == MOBILE_IDENTITY_IMEI) || - (msg->mobileidentity.imeisv.typeofidentity==MOBILE_IDENTITY_IMEISV)) { - /* Get the IMEI */ - p_imei = &imei; - imei.u.num.digit1 = msg->mobileidentity.imei.digit1; - imei.u.num.digit2 = msg->mobileidentity.imei.digit2; - imei.u.num.digit3 = msg->mobileidentity.imei.digit3; - imei.u.num.digit4 = msg->mobileidentity.imei.digit4; - imei.u.num.digit5 = msg->mobileidentity.imei.digit5; - imei.u.num.digit6 = msg->mobileidentity.imei.digit6; - imei.u.num.digit7 = msg->mobileidentity.imei.digit7; - imei.u.num.digit8 = msg->mobileidentity.imei.digit8; - imei.u.num.digit9 = msg->mobileidentity.imei.digit9; - imei.u.num.digit10 = msg->mobileidentity.imei.digit10; - imei.u.num.digit11 = msg->mobileidentity.imei.digit11; - imei.u.num.digit12 = msg->mobileidentity.imei.digit12; - imei.u.num.digit13 = msg->mobileidentity.imei.digit13; - imei.u.num.digit14 = msg->mobileidentity.imei.digit14; - imei.u.num.digit15 = msg->mobileidentity.imei.digit15; - imei.u.num.parity = msg->mobileidentity.imei.oddeven; - } else if (msg->mobileidentity.tmsi.typeofidentity == MOBILE_IDENTITY_TMSI) { - /* Get the TMSI */ - p_tmsi = &tmsi; - tmsi.digit1 = msg->mobileidentity.tmsi.digit2; - tmsi.digit2 = msg->mobileidentity.tmsi.digit3; - tmsi.digit3 = msg->mobileidentity.tmsi.digit4; - tmsi.digit4 = msg->mobileidentity.tmsi.digit5; - tmsi.digit5 = msg->mobileidentity.tmsi.digit6; - tmsi.digit6 = msg->mobileidentity.tmsi.digit7; - tmsi.digit7 = msg->mobileidentity.tmsi.digit8; - tmsi.digit8 = msg->mobileidentity.tmsi.digit9; - } - - /* Execute the identification completion procedure */ - rc = emm_proc_identification_complete(ueid, p_imsi, p_imei, - (uint32_t *)(p_tmsi)); - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_authentication_response() ** - ** ** - ** Description: Processes Authentication Response message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_authentication_response(unsigned int ueid, - authentication_response_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Response message"); - - /* - * Message checking - */ - if (msg->authenticationresponseparameter.res.length == 0) { - /* RES parameter shall not be null */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - /* Execute the authentication completion procedure */ - rc = emm_proc_authentication_complete(ueid, EMM_CAUSE_SUCCESS, - &msg->authenticationresponseparameter.res); - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_authentication_failure() ** - ** ** - ** Description: Processes Authentication Failure message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_authentication_failure(unsigned int ueid, - authentication_failure_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Failure message"); - - /* - * Message checking - */ - if (msg->emmcause == EMM_CAUSE_SUCCESS) { - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } else if ( (msg->emmcause == EMM_CAUSE_SYNCH_FAILURE) && - !(msg->presencemask & - AUTHENTICATION_FAILURE_AUTHENTICATION_FAILURE_PARAMETER_PRESENT) ) { - /* AUTS parameter shall be present in case of "synch failure" */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - /* Execute the authentication completion procedure */ - rc = emm_proc_authentication_complete(ueid, msg->emmcause, - &msg->authenticationfailureparameter.auts); - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_security_mode_complete() ** - ** ** - ** Description: Processes Security Mode Complete message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int -emm_recv_security_mode_complete( - unsigned int ueid, - security_mode_complete_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Security Mode Complete message"); - - /* - * Message processing - */ - /* Execute the NAS security mode control completion procedure */ - rc = emm_proc_security_mode_complete(ueid); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_security_mode_reject() ** - ** ** - ** Description: Processes Security Mode Reject message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_security_mode_reject(unsigned int ueid, - security_mode_reject_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Security Mode Reject message " - "(cause=%d)", msg->emmcause); - - /* - * Message checking - */ - if (msg->emmcause == EMM_CAUSE_SUCCESS) { - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - /* Execute the NAS security mode commend not accepted by the UE */ - rc = emm_proc_security_mode_reject(ueid); - - LOG_FUNC_RETURN (rc); -} diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_recv.h b/openair-cn/NAS/MME/EMM/SAP/emm_recv.h deleted file mode 100644 index 6b59722c54..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_recv.h +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_recv.h - -Version 0.1 - -Date 2013/01/30 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines functions executed at the EMMAS Service Access - Point upon receiving EPS Mobility Management messages - from the Access Stratum sublayer. - -*****************************************************************************/ -#ifndef __EMM_RECV_H__ -#define __EMM_RECV_H__ - -#include "EmmStatus.h" - -#include "DetachRequest.h" -#include "DetachAccept.h" - - -#include "AttachRequest.h" -#include "AttachComplete.h" -#include "TrackingAreaUpdateRequest.h" -#include "TrackingAreaUpdateComplete.h" -#include "ServiceRequest.h" -#include "ExtendedServiceRequest.h" -#include "GutiReallocationComplete.h" -#include "AuthenticationResponse.h" -#include "AuthenticationFailure.h" -#include "IdentityResponse.h" -#include "NASSecurityModeComplete.h" -#include "SecurityModeReject.h" -#include "UplinkNasTransport.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME upon receiving EMM messages - * -------------------------------------------------------------------------- - */ -int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause); - -/* - * -------------------------------------------------------------------------- - * Functions executed by the UE upon receiving EMM message from the network - * -------------------------------------------------------------------------- - */ - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME upon receiving EMM message from the UE - * -------------------------------------------------------------------------- - */ -int emm_recv_attach_request(unsigned int ueid, const attach_request_msg *msg, - int *emm_cause); -int emm_recv_attach_complete(unsigned int ueid, const attach_complete_msg *msg, - int *emm_cause); - -int emm_recv_detach_request(unsigned int ueid, const detach_request_msg *msg, - int *emm_cause); - -int emm_recv_tracking_area_update_request(unsigned int ueid, - const tracking_area_update_request_msg *msg, - int *emm_cause); - -int emm_recv_identity_response(unsigned int ueid, identity_response_msg *msg, - int *emm_cause); -int emm_recv_authentication_response(unsigned int ueid, - authentication_response_msg *msg, int *emm_cause); -int emm_recv_authentication_failure(unsigned int ueid, - authentication_failure_msg *msg, int *emm_cause); -int emm_recv_security_mode_complete(unsigned int ueid, - security_mode_complete_msg *msg, int *emm_cause); -int emm_recv_security_mode_reject(unsigned int ueid, - security_mode_reject_msg *msg, int *emm_cause); - -#endif /* __EMM_RECV_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_reg.c b/openair-cn/NAS/MME/EMM/SAP/emm_reg.c deleted file mode 100644 index ca19566cb9..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_reg.c +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_reg.c - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMREG Service Access Point that provides - registration services for location updating and attach/detach - procedures. - -*****************************************************************************/ - -#include "emm_reg.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_fsm.h" - -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_reg_initialize() ** - ** ** - ** Description: Initializes the EMMREG Service Access Point ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: NONE ** - ** ** - ***************************************************************************/ -void emm_reg_initialize(void) -{ - LOG_FUNC_IN; - - /* Initialize the EMM state machine */ - emm_fsm_initialize(); - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_reg_send() ** - ** ** - ** Description: Processes the EMMREG Service Access Point primitive ** - ** ** - ** Inputs: msg: The EMMREG-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_reg_send(const emm_reg_t *msg) -{ - LOG_FUNC_IN; - - int rc; - - /* Check the EMM-SAP primitive */ - emm_reg_primitive_t primitive = msg->primitive; - assert( (primitive > _EMMREG_START) && (primitive < _EMMREG_END)); - - /* Execute the EMM procedure */ - rc = emm_fsm_process(msg); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_reg.h b/openair-cn/NAS/MME/EMM/SAP/emm_reg.h deleted file mode 100644 index 62d333395c..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_reg.h +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_reg.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMREG Service Access Point that provides - registration services for location updating and attach/detach - procedures. - -*****************************************************************************/ -#ifndef __EMM_REG_H__ -#define __EMM_REG_H__ - -#include "emm_regDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void emm_reg_initialize(void); - -int emm_reg_send(const emm_reg_t *msg); - -#endif /* __EMM_REG_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h deleted file mode 100644 index 801e107fe1..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_regDef.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMMREG Service Access Point that provides - registration services for location updating and attach/detach - procedures. - -*****************************************************************************/ -#ifndef __EMM_REGDEF_H__ -#define __EMM_REGDEF_H__ - -#include "commonDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * EMMREG-SAP primitives - */ -typedef enum { - _EMMREG_START = 0, - _EMMREG_COMMON_PROC_REQ, /* EMM common procedure requested */ - _EMMREG_COMMON_PROC_CNF, /* EMM common procedure successful */ - _EMMREG_COMMON_PROC_REJ, /* EMM common procedure failed */ - _EMMREG_PROC_ABORT, /* EMM procedure aborted */ - _EMMREG_ATTACH_CNF, /* EPS network attach accepted */ - _EMMREG_ATTACH_REJ, /* EPS network attach rejected */ - _EMMREG_DETACH_INIT, /* Network detach initiated */ - _EMMREG_DETACH_REQ, /* Network detach requested */ - _EMMREG_DETACH_FAILED, /* Network detach attempt failed */ - _EMMREG_DETACH_CNF, /* Network detach accepted */ - _EMMREG_TAU_REQ, - _EMMREG_TAU_CNF, - _EMMREG_TAU_REJ, - _EMMREG_SERVICE_REQ, - _EMMREG_SERVICE_CNF, - _EMMREG_SERVICE_REJ, - _EMMREG_LOWERLAYER_SUCCESS, /* Data successfully delivered */ - _EMMREG_LOWERLAYER_FAILURE, /* Lower layer failure indication */ - _EMMREG_LOWERLAYER_RELEASE, /* NAS signalling connection released */ - _EMMREG_END -} emm_reg_primitive_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - - -/* - * EMMREG primitive for attach procedure - * ------------------------------------- - */ -typedef struct { - int is_emergency; /* TRUE if the UE was attempting to register to - * the network for emergency services only */ -} emm_reg_attach_t; - -/* - * EMMREG primitive for detach procedure - * ------------------------------------- - */ -typedef struct { - int switch_off; /* TRUE if the UE is switched off */ - int type; /* Network detach type */ -} emm_reg_detach_t; - -/* - * EMMREG primitive for EMM common procedures - * ------------------------------------------ - */ -typedef struct { - int is_attached; /* UE context attach indicator */ -} emm_reg_common_t; - -/* - * Structure of EMMREG-SAP primitive - */ -typedef struct { - emm_reg_primitive_t primitive; - unsigned int ueid; - void *ctx; - - union { - emm_reg_attach_t attach; - emm_reg_detach_t detach; - emm_reg_common_t common; - } u; -} emm_reg_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif /* __EMM_REGDEF_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_sap.c b/openair-cn/NAS/MME/EMM/SAP/emm_sap.c deleted file mode 100644 index b1aa086864..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_sap.c +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_sap.c - -Version 0.1 - -Date 2012/10/01 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMM Service Access Points at which the EPS - Mobility Management sublayer provides procedures for the - control of security and mobility when the User Equipment - is using the Evolved UTRA Network. - -*****************************************************************************/ - -#include "emm_sap.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_reg.h" -#include "emm_esm.h" -#include "emm_as.h" -#include "emm_cn.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_sap_initialize() ** - ** ** - ** Description: Initializes the EMM Service Access Points ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: NONE ** - ** ** - ***************************************************************************/ -void emm_sap_initialize(void) -{ - LOG_FUNC_IN; - - emm_reg_initialize(); - emm_esm_initialize(); - emm_as_initialize(); - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_sap_send() ** - ** ** - ** Description: Processes the EMM Service Access Point primitive ** - ** ** - ** Inputs: msg: The EMM-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: msg: The EMM-SAP primitive to process ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_sap_send(emm_sap_t *msg) -{ - int rc = RETURNerror; - - emm_primitive_t primitive = msg->primitive; - - LOG_FUNC_IN; - - /* Check the EMM-SAP primitive */ - if ( (primitive > (emm_primitive_t)EMMREG_PRIMITIVE_MIN) && - (primitive < (emm_primitive_t)EMMREG_PRIMITIVE_MAX) ) { - /* Forward to the EMMREG-SAP */ - msg->u.emm_reg.primitive = primitive; - rc = emm_reg_send(&msg->u.emm_reg); - } else if ( (primitive > (emm_primitive_t)EMMESM_PRIMITIVE_MIN) && - (primitive < (emm_primitive_t)EMMESM_PRIMITIVE_MAX) ) { - /* Forward to the EMMESM-SAP */ - msg->u.emm_esm.primitive = primitive; - rc = emm_esm_send(&msg->u.emm_esm); - } else if ( (primitive > (emm_primitive_t)EMMAS_PRIMITIVE_MIN) && - (primitive < (emm_primitive_t)EMMAS_PRIMITIVE_MAX) ) { - /* Forward to the EMMAS-SAP */ - msg->u.emm_as.primitive = primitive; - rc = emm_as_send(&msg->u.emm_as); - } - -#if defined(NAS_BUILT_IN_EPC) - else if ( (primitive > (emm_primitive_t)EMMCN_PRIMITIVE_MIN) && - (primitive < (emm_primitive_t)EMMCN_PRIMITIVE_MAX) ) { - /* Forward to the EMMCN-SAP */ - msg->u.emm_cn.primitive = primitive; - rc = emm_cn_send(&msg->u.emm_cn); - } - -#endif - else { - LOG_TRACE(WARNING, "EMM-SAP - Out of range primitive (%d)", primitive); - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_sap.h b/openair-cn/NAS/MME/EMM/SAP/emm_sap.h deleted file mode 100644 index 7cee702e60..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_sap.h +++ /dev/null @@ -1,171 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_sap.h - -Version 0.1 - -Date 2012/10/01 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EMM Service Access Points at which the EPS - Mobility Management sublayer provides procedures for the - control of security and mobility when the User Equipment - is using the Evolved UTRA Network. - -*****************************************************************************/ -#ifndef __EMM_SAP_H__ -#define __EMM_SAP_H__ - -#include "emmData.h" -#include "emm_regDef.h" -#include "emm_esmDef.h" -#include "emm_asDef.h" -#include "emm_cnDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * EPS Mobility Management primitives - * ---------------------------------- - * EMMREG-SAP provides registration services for location updating and - * attach/detach procedures; - * EMMESM-SAP provides interlayer services to the EPS Session Management - * sublayer for service registration and activate/deactivate PDP context; - * EMMAS-SAP provides services to the Access Stratum sublayer for NAS message - * transfer; - */ -typedef enum { - /* EMMREG-SAP */ - EMMREG_COMMON_PROC_REQ = _EMMREG_COMMON_PROC_REQ, - EMMREG_COMMON_PROC_CNF = _EMMREG_COMMON_PROC_CNF, - EMMREG_COMMON_PROC_REJ = _EMMREG_COMMON_PROC_REJ, - EMMREG_PROC_ABORT = _EMMREG_PROC_ABORT, - EMMREG_ATTACH_CNF = _EMMREG_ATTACH_CNF, - EMMREG_ATTACH_REJ = _EMMREG_ATTACH_REJ, - EMMREG_DETACH_INIT = _EMMREG_DETACH_INIT, - EMMREG_DETACH_REQ = _EMMREG_DETACH_REQ, - EMMREG_DETACH_FAILED = _EMMREG_DETACH_FAILED, - EMMREG_DETACH_CNF = _EMMREG_DETACH_CNF, - EMMREG_TAU_REQ = _EMMREG_TAU_REQ, - EMMREG_TAU_CNF = _EMMREG_TAU_CNF, - EMMREG_TAU_REJ = _EMMREG_TAU_REJ, - EMMREG_SERVICE_REQ = _EMMREG_SERVICE_REQ, - EMMREG_SERVICE_CNF = _EMMREG_SERVICE_CNF, - EMMREG_SERVICE_REJ = _EMMREG_SERVICE_REJ, - EMMREG_LOWERLAYER_SUCCESS = _EMMREG_LOWERLAYER_SUCCESS, - EMMREG_LOWERLAYER_FAILURE = _EMMREG_LOWERLAYER_FAILURE, - EMMREG_LOWERLAYER_RELEASE = _EMMREG_LOWERLAYER_RELEASE, - /* EMMESM-SAP */ - EMMESM_RELEASE_IND = _EMMESM_RELEASE_IND, - EMMESM_UNITDATA_REQ = _EMMESM_UNITDATA_REQ, - EMMESM_UNITDATA_IND = _EMMESM_UNITDATA_IND, - /* EMMAS-SAP */ - EMMAS_SECURITY_REQ = _EMMAS_SECURITY_REQ, - EMMAS_SECURITY_IND = _EMMAS_SECURITY_IND, - EMMAS_SECURITY_RES = _EMMAS_SECURITY_RES, - EMMAS_SECURITY_REJ = _EMMAS_SECURITY_REJ, - EMMAS_ESTABLISH_REQ = _EMMAS_ESTABLISH_REQ, - EMMAS_ESTABLISH_CNF = _EMMAS_ESTABLISH_CNF, - EMMAS_ESTABLISH_REJ = _EMMAS_ESTABLISH_REJ, - EMMAS_RELEASE_REQ = _EMMAS_RELEASE_REQ, - EMMAS_RELEASE_IND = _EMMAS_RELEASE_IND, - EMMAS_DATA_REQ = _EMMAS_DATA_REQ, - EMMAS_DATA_IND = _EMMAS_DATA_IND, - EMMAS_PAGE_IND = _EMMAS_PAGE_IND, - EMMAS_STATUS_IND = _EMMAS_STATUS_IND, - EMMAS_CELL_INFO_REQ = _EMMAS_CELL_INFO_REQ, - EMMAS_CELL_INFO_RES = _EMMAS_CELL_INFO_RES, - EMMAS_CELL_INFO_IND = _EMMAS_CELL_INFO_IND, - -#ifdef NAS_BUILT_IN_EPC - EMMCN_AUTHENTICATION_PARAM_RES = _EMMCN_AUTHENTICATION_PARAM_RES, - EMMCN_AUTHENTICATION_PARAM_FAIL = _EMMCN_AUTHENTICATION_PARAM_FAIL, - EMMCN_DEREGISTER_UE = _EMMCN_DEREGISTER_UE, - EMMCN_PDN_CONNECTIVITY_RES = _EMMCN_PDN_CONNECTIVITY_RES, - EMMCN_PDN_CONNECTIVITY_FAIL = _EMMCN_PDN_CONNECTIVITY_FAIL -#endif -} emm_primitive_t; - -/* - * Minimal identifier for EMM-SAP primitives - */ -#define EMMREG_PRIMITIVE_MIN _EMMREG_START -#define EMMESM_PRIMITIVE_MIN _EMMESM_START -#define EMMAS_PRIMITIVE_MIN _EMMAS_START -#define EMMCN_PRIMITIVE_MIN _EMMCN_START - -/* - * Maximal identifier for EMM-SAP primitives - */ -#define EMMREG_PRIMITIVE_MAX _EMMREG_END -#define EMMESM_PRIMITIVE_MAX _EMMESM_END -#define EMMAS_PRIMITIVE_MAX _EMMAS_END -#define EMMCN_PRIMITIVE_MAX _EMMCN_END - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * Structure of EPS Mobility Management primitive - */ -typedef struct emm_sap_s { - emm_primitive_t primitive; - union { - emm_reg_t emm_reg; /* EMMREG-SAP primitives */ - emm_esm_t emm_esm; /* EMMESM-SAP primitives */ - emm_as_t emm_as; /* EMMAS-SAP primitives */ -#if defined(NAS_BUILT_IN_EPC) - emm_cn_t emm_cn; /* EMMCN-SAP primitives */ -#endif - } u; -} emm_sap_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void emm_sap_initialize(void); - -int emm_sap_send(emm_sap_t *msg); - -#endif /* __EMM_SAP_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_send.c b/openair-cn/NAS/MME/EMM/SAP/emm_send.c deleted file mode 100644 index 3dac6eb7e0..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_send.c +++ /dev/null @@ -1,509 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_send.c - -Version 0.1 - -Date 2013/01/30 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines functions executed at the EMMAS Service Access - Point to send EPS Mobility Management messages to the - Access Stratum sublayer. - -*****************************************************************************/ - -#include "emm_send.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emm_msgDef.h" -#include "emm_proc.h" - -#include // strlen - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME to send EMM messages - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_send_status() ** - ** ** - ** Description: Builds EMM status message ** - ** ** - ** The EMM status message is sent by the UE or the network ** - ** at any time to report certain error conditions. ** - ** ** - ** Inputs: emm_cause: EMM cause code ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_status(const emm_as_status_t *msg, emm_status_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(WARNING, "EMMAS-SAP - Send EMM Status message (cause=%d)", - msg->emm_cause); - - /* Mandatory - Message type */ - emm_msg->messagetype = EMM_STATUS; - - /* Mandatory - EMM cause */ - size += EMM_CAUSE_MAXIMUM_LENGTH; - emm_msg->emmcause = msg->emm_cause; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_detach_accept() ** - ** ** - ** Description: Builds Detach Accept message ** - ** ** - ** The Detach Accept message is sent by the UE or the net- ** - ** work to indicate that the detach procedure has been com- ** - ** pleted. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_detach_accept(const emm_as_data_t *msg, - detach_accept_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Detach Accept message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = DETACH_ACCEPT; - - LOG_FUNC_RETURN (size); -} - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send EMM messages to the UE - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: emm_send_attach_accept() ** - ** ** - ** Description: Builds Attach Accept message ** - ** ** - ** The Attach Accept message is sent by the network to the ** - ** UE to indicate that the corresponding attach request has ** - ** been accepted. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_attach_accept(const emm_as_establish_t *msg, - attach_accept_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Accept message"); - LOG_TRACE(INFO, "EMMAS-SAP - size = EMM_HEADER_MAXIMUM_LENGTH(%d)", - size); - - /* Mandatory - Message type */ - emm_msg->messagetype = ATTACH_ACCEPT; - - /* Mandatory - EPS attach result */ - size += EPS_ATTACH_RESULT_MAXIMUM_LENGTH; - emm_msg->epsattachresult = EPS_ATTACH_RESULT_EPS; - - /* Mandatory - T3412 value */ - size += GPRS_TIMER_MAXIMUM_LENGTH; - emm_msg->t3412value.unit = GPRS_TIMER_UNIT_0S; - LOG_TRACE(INFO, "EMMAS-SAP - size += GPRS_TIMER_MAXIMUM_LENGTH(%d) (%d)", - GPRS_TIMER_MAXIMUM_LENGTH, size); - - /* Mandatory - Tracking area identity list */ - size += TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH; - emm_msg->tailist.typeoflist = - TRACKING_AREA_IDENTITY_LIST_ONE_PLMN_CONSECUTIVE_TACS; - emm_msg->tailist.numberofelements = msg->n_tacs; - emm_msg->tailist.mccdigit1 = msg->UEid.guti->gummei.plmn.MCCdigit1; - emm_msg->tailist.mccdigit2 = msg->UEid.guti->gummei.plmn.MCCdigit2; - emm_msg->tailist.mccdigit3 = msg->UEid.guti->gummei.plmn.MCCdigit3; - emm_msg->tailist.mncdigit1 = msg->UEid.guti->gummei.plmn.MNCdigit1; - emm_msg->tailist.mncdigit2 = msg->UEid.guti->gummei.plmn.MNCdigit2; - emm_msg->tailist.mncdigit3 = msg->UEid.guti->gummei.plmn.MNCdigit3; - emm_msg->tailist.tac = msg->tac; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH(%d) (%d)", - TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH, - size); - - /* Mandatory - ESM message container */ - size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; - emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH(%d) (%d)", - ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH, - size); - - /* Optional - GUTI */ - if (msg->new_guti) { - size += EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH; - emm_msg->presencemask |= ATTACH_ACCEPT_GUTI_PRESENT; - emm_msg->guti.guti.typeofidentity = EPS_MOBILE_IDENTITY_GUTI; - emm_msg->guti.guti.oddeven = EPS_MOBILE_IDENTITY_EVEN; - emm_msg->guti.guti.mmegroupid = msg->new_guti->gummei.MMEgid; - emm_msg->guti.guti.mmecode = msg->new_guti->gummei.MMEcode; - emm_msg->guti.guti.mtmsi = msg->new_guti->m_tmsi; - emm_msg->guti.guti.mccdigit1 = msg->new_guti->gummei.plmn.MCCdigit1; - emm_msg->guti.guti.mccdigit2 = msg->new_guti->gummei.plmn.MCCdigit2; - emm_msg->guti.guti.mccdigit3 = msg->new_guti->gummei.plmn.MCCdigit3; - emm_msg->guti.guti.mncdigit1 = msg->new_guti->gummei.plmn.MNCdigit1; - emm_msg->guti.guti.mncdigit2 = msg->new_guti->gummei.plmn.MNCdigit2; - emm_msg->guti.guti.mncdigit3 = msg->new_guti->gummei.plmn.MNCdigit3; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH(%d) (%d)", - EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH, - size); - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_attach_reject() ** - ** ** - ** Description: Builds Attach Reject message ** - ** ** - ** The Attach Reject message is sent by the network to the ** - ** UE to indicate that the corresponding attach request has ** - ** been rejected. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_attach_reject(const emm_as_establish_t *msg, - attach_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Reject message (cause=%d)", - msg->emm_cause); - - /* Mandatory - Message type */ - emm_msg->messagetype = ATTACH_REJECT; - - /* Mandatory - EMM cause */ - size += EMM_CAUSE_MAXIMUM_LENGTH; - emm_msg->emmcause = msg->emm_cause; - - /* Optional - ESM message container */ - if (msg->NASmsg.length > 0) { - size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; - emm_msg->presencemask |= ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT; - emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_tracking_area_update_reject() ** - ** ** - ** Description: Builds Tracking Area Update Reject message ** - ** ** - ** The Tracking Area Update Reject message is sent by the ** - ** network to the UE to indicate that the corresponding ** - ** tracking area update has been rejected. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, - tracking_area_update_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Tracking Area Update Reject message (cause=%d)", - msg->emm_cause); - - /* Mandatory - Message type */ - emm_msg->messagetype = TRACKING_AREA_UPDATE_REJECT; - - /* Mandatory - EMM cause */ - size += EMM_CAUSE_MAXIMUM_LENGTH; - emm_msg->emmcause = msg->emm_cause; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_identity_request() ** - ** ** - ** Description: Builds Identity Request message ** - ** ** - ** The Identity Request message is sent by the network to ** - ** the UE to request the UE to provide the specified identi- ** - ** ty. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_identity_request(const emm_as_security_t *msg, - identity_request_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Identity Request message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = IDENTITY_REQUEST; - - /* Mandatory - Identity type 2 */ - size += IDENTITY_TYPE_2_MAXIMUM_LENGTH; - - if (msg->identType == EMM_IDENT_TYPE_IMSI) { - emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; - } else if (msg->identType == EMM_IDENT_TYPE_TMSI) { - emm_msg->identitytype = IDENTITY_TYPE_2_TMSI; - } else if (msg->identType == EMM_IDENT_TYPE_IMEI) { - emm_msg->identitytype = IDENTITY_TYPE_2_IMEI; - } else { - /* All other values are interpreted as "IMSI" */ - emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_authentication_request() ** - ** ** - ** Description: Builds Authentication Request message ** - ** ** - ** The Authentication Request message is sent by the network ** - ** to the UE to initiate authentication of the UE identity. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_authentication_request(const emm_as_security_t *msg, - authentication_request_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Request message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = AUTHENTICATION_REQUEST; - - /* Mandatory - NAS key set identifier */ - size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; - emm_msg->naskeysetidentifierasme.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; - emm_msg->naskeysetidentifierasme.naskeysetidentifier = msg->ksi; - - /* Mandatory - Authentication parameter RAND */ - size += AUTHENTICATION_PARAMETER_RAND_MAXIMUM_LENGTH; - emm_msg->authenticationparameterrand.rand = *msg->rand; - - /* Mandatory - Authentication parameter AUTN */ - size += AUTHENTICATION_PARAMETER_AUTN_MAXIMUM_LENGTH; - emm_msg->authenticationparameterautn.autn = *msg->autn; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_authentication_reject() ** - ** ** - ** Description: Builds Authentication Reject message ** - ** ** - ** The Authentication Reject message is sent by the network ** - ** to the UE to indicate that the authentication procedure ** - ** has failed and that the UE shall abort all activities. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_authentication_reject(authentication_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Reject message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = AUTHENTICATION_REJECT; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_security_mode_command() ** - ** ** - ** Description: Builds Security Mode Command message ** - ** ** - ** The Security Mode Command message is sent by the network ** - ** to the UE to establish NAS signalling security. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_security_mode_command(const emm_as_security_t *msg, - security_mode_command_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Security Mode Command message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = SECURITY_MODE_COMMAND; - - /* Selected NAS security algorithms */ - size += NAS_SECURITY_ALGORITHMS_MAXIMUM_LENGTH; - emm_msg->selectednassecurityalgorithms.typeofcipheringalgorithm = - msg->selected_eea; - emm_msg->selectednassecurityalgorithms.typeofintegrityalgorithm = - msg->selected_eia; - - /* NAS key set identifier */ - size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; - emm_msg->naskeysetidentifier.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; - emm_msg->naskeysetidentifier.naskeysetidentifier = msg->ksi; - - /* Replayed UE security capabilities */ - size += UE_SECURITY_CAPABILITY_MAXIMUM_LENGTH; - emm_msg->replayeduesecuritycapabilities.eea = msg->eea; - emm_msg->replayeduesecuritycapabilities.eia = msg->eia; - emm_msg->replayeduesecuritycapabilities.umts_present = msg->umts_present; - emm_msg->replayeduesecuritycapabilities.gprs_present = msg->gprs_present; - - emm_msg->replayeduesecuritycapabilities.uea = msg->uea; - emm_msg->replayeduesecuritycapabilities.uia = msg->uia; - emm_msg->replayeduesecuritycapabilities.gea = msg->gea; - - LOG_FUNC_RETURN (size); -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_send.h b/openair-cn/NAS/MME/EMM/SAP/emm_send.h deleted file mode 100644 index 16c9c5f9d5..0000000000 --- a/openair-cn/NAS/MME/EMM/SAP/emm_send.h +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - -Source emm_send.h - -Version 0.1 - -Date 2013/01/30 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines functions executed at the EMMAS Service Access - Point to send EPS Mobility Management messages to the - Access Stratum sublayer. - -*****************************************************************************/ -#ifndef __EMM_SEND_H__ -#define __EMM_SEND_H__ - -#include "EmmStatus.h" - -#include "DetachRequest.h" -#include "DetachAccept.h" - -#include "AttachAccept.h" -#include "AttachReject.h" -#include "TrackingAreaUpdateAccept.h" -#include "TrackingAreaUpdateReject.h" -#include "ServiceReject.h" -#include "GutiReallocationCommand.h" -#include "AuthenticationRequest.h" -#include "AuthenticationReject.h" -#include "IdentityRequest.h" -#include "NASSecurityModeCommand.h" -#include "EmmInformation.h" -#include "DownlinkNasTransport.h" -#include "CsServiceNotification.h" - -#include "emm_asDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME to send EMM messages - * -------------------------------------------------------------------------- - */ -int emm_send_status(const emm_as_status_t *, emm_status_msg *); - -int emm_send_detach_accept(const emm_as_data_t *, detach_accept_msg *); - -/* - * -------------------------------------------------------------------------- - * Functions executed by the UE to send EMM messages to the network - * -------------------------------------------------------------------------- - */ - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send EMM messages to the UE - * -------------------------------------------------------------------------- - */ -int emm_send_attach_accept(const emm_as_establish_t *, attach_accept_msg *); -int emm_send_attach_reject(const emm_as_establish_t *, attach_reject_msg *); - -int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, - tracking_area_update_reject_msg *emm_msg); - -int emm_send_identity_request(const emm_as_security_t *, identity_request_msg *); -int emm_send_authentication_request(const emm_as_security_t *, - authentication_request_msg *); -int emm_send_authentication_reject(authentication_reject_msg *); -int emm_send_security_mode_command(const emm_as_security_t *, - security_mode_command_msg *); - -#endif /* __EMM_SEND_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SecurityModeControl.c b/openair-cn/NAS/MME/EMM/SecurityModeControl.c deleted file mode 100644 index bd04316ee2..0000000000 --- a/openair-cn/NAS/MME/EMM/SecurityModeControl.c +++ /dev/null @@ -1,804 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source SecurityModeControl.c - -Version 0.1 - -Date 2013/04/22 - -Product NAS stack - -Subsystem Template body file - -Author Frederic Maurel - -Description Defines the security mode control EMM procedure executed by the - Non-Access Stratum. - - The purpose of the NAS security mode control procedure is to - take an EPS security context into use, and initialise and start - NAS signalling security between the UE and the MME with the - corresponding EPS NAS keys and EPS security algorithms. - - Furthermore, the network may also initiate a SECURITY MODE COM- - MAND in order to change the NAS security algorithms for a cur- - rent EPS security context already in use. - -*****************************************************************************/ - -#include // malloc, free -#include // memcpy -#include - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "emm_cause.h" - -#include "UeSecurityCapability.h" - -#if defined(ENABLE_ITTI) -# include "assertions.h" -#endif -#include "secu_defs.h" -#include "msc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the security mode control procedure in the UE - * -------------------------------------------------------------------------- - */ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the security mode control procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_security_t3460_handler(void *); - -/* - * Function executed whenever the ongoing EMM procedure that initiated - * the security mode control procedure is aborted or the maximum value of the - * retransmission timer counter is exceed - */ -static int _security_abort(void *); -static int _security_select_algorithms( - const int ue_eiaP, - const int ue_eeaP, - int * const mme_eiaP, - int * const mme_eeaP); -/* - * Internal data used for security mode control procedure - */ -typedef struct { - unsigned int ueid; /* UE identifier */ -#define SECURITY_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - int ksi; /* NAS key set identifier */ - int eea; /* Replayed EPS encryption algorithms */ - int eia; /* Replayed EPS integrity algorithms */ - int ucs2; /* Replayed Alphabet */ - int uea; /* Replayed UMTS encryption algorithms */ - int uia; /* Replayed UMTS integrity algorithms */ - int gea; /* Replayed G encryption algorithms */ - int umts_present:1; - int gprs_present:1; - int selected_eea; /* Selected EPS encryption algorithms */ - int selected_eia; /* Selected EPS integrity algorithms */ - int notify_failure; /* Indicates whether the security mode control - * procedure failure shall be notified to the - * ongoing EMM procedure */ -} security_data_t; - -static int _security_request(security_data_t *data, int is_new); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Security mode control procedure executed by the MME - * -------------------------------------------------------------------------- - */ - - -/**************************************************************************** - ** ** - ** Name: emm_proc_security_mode_control() ** - ** ** - ** Description: Initiates the security mode control procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.3.2 ** - ** The MME initiates the NAS security mode control procedure ** - ** by sending a SECURITY MODE COMMAND message to the UE and ** - ** starting timer T3460. The message shall be sent unciphe- ** - ** red but shall be integrity protected using the NAS inte- ** - ** grity key based on KASME. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** ksi: NAS key set identifier ** - ** eea: Replayed EPS encryption algorithms ** - ** eia: Replayed EPS integrity algorithms ** - ** success: Callback function executed when the secu- ** - ** rity mode control procedure successfully ** - ** completes ** - ** reject: Callback function executed when the secu- ** - ** rity mode control procedure fails or is ** - ** rejected ** - ** failure: Callback function executed whener a lower ** - ** layer failure occured before the security ** - ** mode control procedure comnpletes ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_security_mode_control(unsigned int ueid, int ksi, - int eea, int eia,int ucs2, int uea, int uia, int gea, int umts_present, int gprs_present, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure) -{ - int rc = RETURNerror; - int security_context_is_new = FALSE; - int mme_eea = NAS_SECURITY_ALGORITHMS_EEA0; - int mme_eia = NAS_SECURITY_ALGORITHMS_EIA0; - /* Get the UE context */ - emm_data_context_t *emm_ctx = NULL; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Initiate security mode control procedure " - "KSI = %d EEA = %d EIA = %d", - ksi, eea, eia); - -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - -#endif - - if (emm_ctx && emm_ctx->security) { - if (emm_ctx->security->type == EMM_KSI_NOT_AVAILABLE) { - /* The security mode control procedure is initiated to take into use - * the EPS security context created after a successful execution of - * the EPS authentication procedure */ - emm_ctx->security->type = EMM_KSI_NATIVE; - emm_ctx->security->eksi = ksi; - emm_ctx->security->dl_count.overflow = 0; - emm_ctx->security->dl_count.seq_num = 0; - - /* TODO !!! Compute Kasme, and NAS cyphering and integrity keys */ - // LG: Kasme should have been received from authentication - // information request (S6A) - // Kasme is located in emm_ctx->vector.kasme - FREE_OCTET_STRING(emm_ctx->security->kasme); - - emm_ctx->security->kasme.value = malloc(32); - memcpy(emm_ctx->security->kasme.value, - emm_ctx->vector.kasme, - 32); - emm_ctx->security->kasme.length = 32; - - rc = _security_select_algorithms( - eia, - eea, - &mme_eia, - &mme_eea); - - emm_ctx->security->selected_algorithms.encryption = mme_eea; - emm_ctx->security->selected_algorithms.integrity = mme_eia; - - if (rc == RETURNerror) { - LOG_TRACE(WARNING, - "EMM-PROC - Failed to select security algorithms"); - LOG_FUNC_RETURN (RETURNerror); - } - - if ( ! emm_ctx->security->knas_int.value) { - emm_ctx->security->knas_int.value = malloc(AUTH_KNAS_INT_SIZE); - } else { - LOG_TRACE(ERROR, - " TODO realloc emm_ctx->security->knas_int OctetString"); - LOG_FUNC_RETURN (RETURNerror); - } - - emm_ctx->security->knas_int.length = AUTH_KNAS_INT_SIZE; - derive_key_nas( - NAS_INT_ALG, - emm_ctx->security->selected_algorithms.integrity, - emm_ctx->vector.kasme, - emm_ctx->security->knas_int.value); - - if ( ! emm_ctx->security->knas_enc.value) { - emm_ctx->security->knas_enc.value = malloc(AUTH_KNAS_ENC_SIZE); - } else { - LOG_TRACE(ERROR, - " TODO realloc emm_ctx->security->knas_enc OctetString"); - LOG_FUNC_RETURN (RETURNerror); - } - - emm_ctx->security->knas_enc.length = AUTH_KNAS_ENC_SIZE; - derive_key_nas( - NAS_ENC_ALG, - emm_ctx->security->selected_algorithms.encryption, - emm_ctx->vector.kasme, - emm_ctx->security->knas_enc.value); - - /* Set new security context indicator */ - security_context_is_new = TRUE; - } - } else { - LOG_TRACE(WARNING, "EMM-PROC - No EPS security context exists"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Allocate parameters of the retransmission timer callback */ - security_data_t *data = - (security_data_t *)malloc(sizeof(security_data_t)); - - if (data != NULL) { - /* Setup ongoing EMM procedure callback functions */ - rc = emm_proc_common_initialize(ueid, success, reject, failure, - _security_abort, data); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "Failed to initialize EMM callback functions"); - free(data); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Set the UE identifier */ - data->ueid = ueid; - /* Reset the retransmission counter */ - data->retransmission_count = 0; - /* Set the key set identifier */ - data->ksi = ksi; - /* Set the EPS encryption algorithms to be replayed to the UE */ - data->eea = eea; - /* Set the EPS integrity algorithms to be replayed to the UE */ - data->eia = eia; - data->ucs2 = ucs2; - /* Set the UMTS encryption algorithms to be replayed to the UE */ - data->uea = uea; - /* Set the UMTS integrity algorithms to be replayed to the UE */ - data->uia = uia; - /* Set the GPRS integrity algorithms to be replayed to the UE */ - data->gea = gea; - data->umts_present = umts_present; - data->gprs_present = gprs_present; - /* Set the EPS encryption algorithms selected to the UE */ - data->selected_eea = emm_ctx->security->selected_algorithms.encryption; - /* Set the EPS integrity algorithms selected to the UE */ - data->selected_eia = emm_ctx->security->selected_algorithms.integrity; - /* Set the failure notification indicator */ - data->notify_failure = FALSE; - /* Send security mode command message to the UE */ - rc = _security_request(data, security_context_is_new); - - if (rc != RETURNerror) { - /* - * Notify EMM that common procedure has been initiated - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (security mode control)", ueid); - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_security_mode_complete() ** - ** ** - ** Description: Performs the security mode control completion procedure ** - ** executed by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.4.3.4 ** - ** Upon receiving the SECURITY MODE COMPLETE message, the ** - ** MME shall stop timer T3460. ** - ** From this time onward the MME shall integrity protect and ** - ** encipher all signalling messages with the selected NAS ** - ** integrity and ciphering algorithms. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_security_mode_complete(unsigned int ueid) -{ - emm_data_context_t *emm_ctx = NULL; - - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Security mode complete (ueid="NAS_UE_ID_FMT")", ueid); - - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } -#else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } -#endif - - if (emm_ctx) { - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); - } - /* Release retransmission timer paramaters */ - security_data_t *data = (security_data_t *)(emm_proc_common_get_args(ueid)); - - if (data) { - free(data); - } - - if (emm_ctx && emm_ctx->security) { - /* - * Notify EMM that the authentication procedure successfully completed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" (security mode complete)", ueid); - emm_sap.primitive = EMMREG_COMMON_PROC_CNF; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - emm_sap.u.emm_reg.u.common.is_attached = emm_ctx->is_attached; - } else { - LOG_TRACE(ERROR, "EMM-PROC - No EPS security context exists"); - /* - * Notify EMM that the authentication procedure failed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security mode complete)", ueid); - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - } - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_security_mode_reject() ** - ** ** - ** Description: Performs the security mode control not accepted by the UE ** - ** ** - ** 3GPP TS 24.301, section 5.4.3.5 ** - ** Upon receiving the SECURITY MODE REJECT message, the MME ** - ** shall stop timer T3460 and abort the ongoing procedure ** - ** that triggered the initiation of the NAS security mode ** - ** control procedure. ** - ** The MME shall apply the EPS security context in use befo- ** - ** re the initiation of the security mode control procedure, ** - ** if any, to protect any subsequent messages. ** - ** ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_security_mode_reject(unsigned int ueid) -{ - emm_data_context_t *emm_ctx = NULL; - int rc = RETURNerror; - - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "EMM-PROC - Security mode command not accepted by the UE" - "(ueid="NAS_UE_ID_FMT")", ueid); - - - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - DevAssert(emm_ctx != NULL); - } -#else - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } -#endif - if (emm_ctx) { - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); - } - /* Release retransmission timer paramaters */ - security_data_t *data = (security_data_t *)(emm_proc_common_get_args(ueid)); - if (data) { - free(data); - } - - /* Set the key set identifier to its previous value */ - if (emm_ctx && emm_ctx->security) { - /* XXX - Usually, the MME should be able to maintain a current and - * a non-current EPS security context simultaneously as the UE do. - * This implementation choose to have only one security context by UE - * in the MME, thus security mode control procedure is only performed - * to take into use the first EPS security context created after a - * successful execution of the EPS authentication procedure */ - emm_ctx->security->type = EMM_KSI_NOT_AVAILABLE; - } - - /* - * Notify EMM that the authentication procedure failed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security mode reject)", ueid); - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _security_t3460_handler() ** - ** ** - ** Description: T3460 timeout handler ** - ** Upon T3460 timer expiration, the security mode command ** - ** message is retransmitted and the timer restarted. When ** - ** retransmission counter is exceed, the MME shall abort the ** - ** security mode control procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.3.7, case b ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_security_t3460_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - security_data_t *data = (security_data_t *)(args); - - /* Increment the retransmission counter */ - data->retransmission_count += 1; - - LOG_TRACE(WARNING, "EMM-PROC - T3460 timer expired, retransmission " - "counter = %d", data->retransmission_count); - - if (data->retransmission_count < SECURITY_COUNTER_MAX) { - /* Send security mode command message to the UE */ - rc = _security_request(data, FALSE); - } else { - /* Set the failure notification indicator */ - data->notify_failure = TRUE; - /* Abort the security mode control procedure */ - rc = _security_abort(data); - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _security_request() ** - ** ** - ** Description: Sends SECURITY MODE COMMAND message and start timer T3460 ** - ** ** - ** Inputs: data: Security mode control internal data ** - ** is_new: Indicates whether a new security context ** - ** has just been taken into use ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -int _security_request(security_data_t *data, int is_new) -{ - struct emm_data_context_s *emm_ctx = NULL; - - emm_sap_t emm_sap; - int rc; - - LOG_FUNC_IN; - - /* - * Notify EMM-AS SAP that Security Mode Command message has to be sent - * to the UE - */ - emm_sap.primitive = EMMAS_SECURITY_REQ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = data->ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_SMC; - emm_sap.u.emm_as.u.security.ksi = data->ksi; - emm_sap.u.emm_as.u.security.eea = data->eea; - emm_sap.u.emm_as.u.security.eia = data->eia; - emm_sap.u.emm_as.u.security.ucs2 = data->ucs2; - emm_sap.u.emm_as.u.security.uea = data->uea; - emm_sap.u.emm_as.u.security.uia = data->uia; - emm_sap.u.emm_as.u.security.gea = data->gea; - emm_sap.u.emm_as.u.security.umts_present = data->umts_present; - emm_sap.u.emm_as.u.security.gprs_present = data->gprs_present; - emm_sap.u.emm_as.u.security.selected_eea = data->selected_eea; - emm_sap.u.emm_as.u.security.selected_eia = data->selected_eia; - -#if defined(NAS_BUILT_IN_EPC) - if (data->ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); - } -#else - if (data->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[data->ueid]; - } -#endif - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, is_new, FALSE); - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3460 timer */ - emm_ctx->T3460.id = nas_timer_restart(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 restarted UE "NAS_UE_ID_FMT" ", data->ueid); - } else { - /* Start T3460 timer */ - emm_ctx->T3460.id = nas_timer_start(emm_ctx->T3460.sec, _security_t3460_handler, data); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 started UE "NAS_UE_ID_FMT" ", data->ueid); - } - LOG_TRACE(INFO,"EMM-PROC - Timer T3460 (%d) expires in %ld seconds", - emm_ctx->T3460.id, emm_ctx->T3460.sec); - } - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _security_abort() ** - ** ** - ** Description: Aborts the security mode control procedure currently in ** - ** progress ** - ** ** - ** Inputs: args: Security mode control data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -static int _security_abort(void *args) -{ - LOG_FUNC_IN; - - struct emm_data_context_s *emm_ctx = NULL; - int rc = RETURNerror; - - security_data_t *data = (security_data_t *)(args); - - if (data) { - unsigned int ueid = data->ueid; - int notify_failure = data->notify_failure; - - LOG_TRACE(WARNING, "EMM-PROC - Abort security mode control procedure " - "(ueid="NAS_UE_ID_FMT")", ueid); -#if defined(NAS_BUILT_IN_EPC) - if (data->ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); - } -#else - if (data->ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[data->ueid]; - } -#endif - /* Stop timer T3460 */ - if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); - emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); - } - - /* Release retransmission timer paramaters */ - free(data); - - /* - * Notify EMM that the security mode control procedure failed - */ - if (notify_failure) { - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security abort)", data->ueid); - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - rc = emm_sap_send(&emm_sap); - } else { - rc = RETURNok; - } - } - - LOG_FUNC_RETURN (rc); -} - - -/**************************************************************************** - ** ** - ** Name: _security_select_algorithms() ** - ** ** - ** Description: Select int and enc algorithms based on UE capabilities and** - ** MME capabilities and MME preferences ** - ** ** - ** Inputs: ue_eia: integrity algorithms supported by UE ** - ** ue_eea: ciphering algorithms supported by UE ** - ** ** - ** Outputs: mme_eia: integrity algorithms supported by MME ** - ** mme_eea: ciphering algorithms supported by MME ** - ** ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _security_select_algorithms( - const int ue_eiaP, - const int ue_eeaP, - int * const mme_eiaP, - int * const mme_eeaP) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - int preference_index; - - *mme_eiaP = NAS_SECURITY_ALGORITHMS_EIA0; - *mme_eeaP = NAS_SECURITY_ALGORITHMS_EEA0; - - for (preference_index = 0; preference_index < 8; preference_index++) { - if (ue_eiaP & (0x80 >> _emm_data.conf.prefered_integrity_algorithm[preference_index])) { - LOG_TRACE(DEBUG, - "Selected NAS_SECURITY_ALGORITHMS_EIA%d (choice num %d)", - _emm_data.conf.prefered_integrity_algorithm[preference_index], - preference_index); - *mme_eiaP = _emm_data.conf.prefered_integrity_algorithm[preference_index]; - break; - } - } - - for (preference_index = 0; preference_index < 8; preference_index++) { - if (ue_eeaP & (0x80 >> _emm_data.conf.prefered_ciphering_algorithm[preference_index])) { - LOG_TRACE(DEBUG, - "Selected NAS_SECURITY_ALGORITHMS_EEA%d (choice num %d)", - _emm_data.conf.prefered_ciphering_algorithm[preference_index], - preference_index); - *mme_eeaP = _emm_data.conf.prefered_ciphering_algorithm[preference_index]; - break; - } - } - - LOG_FUNC_RETURN (RETURNok); -} - - diff --git a/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c b/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c deleted file mode 100644 index 1655b22d71..0000000000 --- a/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source ServiceRequest.c - -Version 0.1 - -Date 2013/05/07 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the service request EMM procedure executed by the - Non-Access Stratum. - - The purpose of the service request procedure is to transfer - the EMM mode from EMM-IDLE to EMM-CONNECTED mode and establish - the radio and S1 bearers when uplink user data or signalling - is to be sent. - - This procedure is used when the network has downlink signalling - pending, the UE has uplink signalling pending, the UE or the - network has user data pending and the UE is in EMM-IDLE mode. - -*****************************************************************************/ - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the service request procedure in the UE - * -------------------------------------------------------------------------- - */ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the service request procedure in the MME - * -------------------------------------------------------------------------- - */ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - diff --git a/openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c b/openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c deleted file mode 100644 index 09ae70da85..0000000000 --- a/openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source TrackingAreaUpdate.c - -Version 0.1 - -Date 2013/05/07 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the tracking area update EMM procedure executed by the - Non-Access Stratum. - - The tracking area updating procedure is always initiated by the - UE and is used to update the registration of the actual tracking - area of a UE in the network, to periodically notify the availa- - bility of the UE to the network, for MME load balancing, to up- - date certain UE specific parameters in the network. - -*****************************************************************************/ - -#include "emm_proc.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "emmData.h" - -#include "emm_sap.h" -#include "emm_cause.h" - -#include // memcmp, memcpy - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the tracking area update procedure in the MME - * -------------------------------------------------------------------------- - */ -static int _emm_tracking_area_update_reject(void *args); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: emm_proc_tracking_area_update_reject() ** - ** ** - ** Description: ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: EMM cause code to be reported ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -int emm_proc_tracking_area_update_reject(unsigned int ueid, int emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - /* Create temporary UE context */ - emm_data_context_t ue_ctx; - memset(&ue_ctx, 0 , sizeof(emm_data_context_t)); - ue_ctx.is_dynamic = FALSE; - ue_ctx.ueid = ueid; - - /* Update the EMM cause code */ -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) -#else - if (ueid < EMM_DATA_NB_UE_MAX) -#endif - { - ue_ctx.emm_cause = emm_cause; - } else { - ue_ctx.emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - /* Do not accept attach request with protocol error */ - rc = _emm_tracking_area_update_reject(&ue_ctx); - - LOG_FUNC_RETURN(rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - - -/**************************************************************************** - ** ** - ** Name: _emm_tracking_area_update_reject() ** - ** ** - ** Description: Performs the tracking area update procedure not accepted ** - ** by the network. ** - ** ** - ** Inputs: args: UE context data ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_tracking_area_update_reject(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - - if (emm_ctx) { - emm_sap_t emm_sap; - LOG_TRACE(WARNING, "EMM-PROC - EMM tracking area update procedure not accepted " - "by the network (ueid="NAS_UE_ID_FMT", cause=%d)", - emm_ctx->ueid, emm_ctx->emm_cause); - /* - * Notify EMM-AS SAP that Tracking Area Update Reject message has to be sent - * onto the network - */ - emm_sap.primitive = EMMAS_ESTABLISH_REJ; - emm_sap.u.emm_as.u.establish.ueid = emm_ctx->ueid; - emm_sap.u.emm_as.u.establish.UEid.guti = NULL; - - if (emm_ctx->emm_cause == EMM_CAUSE_SUCCESS) { - emm_ctx->emm_cause = EMM_CAUSE_ILLEGAL_UE; - } - - emm_sap.u.emm_as.u.establish.emm_cause = emm_ctx->emm_cause; - emm_sap.u.emm_as.u.establish.NASinfo = EMM_AS_NAS_INFO_TAU; - emm_sap.u.emm_as.u.establish.NASmsg.length = 0; - emm_sap.u.emm_as.u.establish.NASmsg.value = NULL; - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.establish.sctx, - emm_ctx->security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN(rc); -} - diff --git a/openair-cn/NAS/MME/EMM/emmData.h b/openair-cn/NAS/MME/EMM/emmData.h deleted file mode 100644 index e17214badb..0000000000 --- a/openair-cn/NAS/MME/EMM/emmData.h +++ /dev/null @@ -1,285 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emmData.h - -Version 0.1 - -Date 2012/10/18 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines internal private data handled by EPS Mobility - Management sublayer. - -*****************************************************************************/ -#ifndef __EMMDATA_H__ -#define __EMMDATA_H__ - -#include "commonDef.h" -#include "networkDef.h" -#include "securityDef.h" - -#include "OctetString.h" -#include "nas_timer.h" - -#include "esmData.h" - -#include "emm_fsm.h" -#include "mme_api.h" -# if defined(NAS_BUILT_IN_EPC) -# include "tree.h" -# endif - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - - -/* Checks Mobile Country Code equality */ -#define MCCS_ARE_EQUAL(n1, n2) (((n1).MCCdigit1 == (n2).MCCdigit1) && \ - ((n1).MCCdigit2 == (n2).MCCdigit2) && \ - ((n1).MCCdigit3 == (n2).MCCdigit3)) - -/* Checks Mobile Network Code equality */ -#define MNCS_ARE_EQUAL(n1, n2) (((n1).MNCdigit1 == (n2).MNCdigit1) && \ - ((n1).MNCdigit2 == (n2).MNCdigit2) && \ - ((n1).MNCdigit3 == (n2).MNCdigit3)) - -/* Checks PLMNs equality */ -#define PLMNS_ARE_EQUAL(p1, p2) ((MCCS_ARE_EQUAL((p1),(p2))) && \ - (MNCS_ARE_EQUAL((p1),(p2)))) - -/* Checks TAIs equality */ -#define TAIS_ARE_EQUAL(t1, t2) ((PLMNS_ARE_EQUAL((t1).plmn,(t2).plmn)) && \ - ((t1).tac == (t2).tac)) - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * EPS NAS security context handled by EPS Mobility Management sublayer in - * the UE and in the MME - * -------------------------------------------------------------------------- - */ -/* Type of security context */ -typedef enum { - EMM_KSI_NOT_AVAILABLE = 0, - EMM_KSI_NATIVE, - EMM_KSI_MAPPED -} emm_ksi_t; - -/* EPS NAS security context structure */ -typedef struct emm_security_context_s { - emm_ksi_t type; /* Type of security context */ - int eksi; /* NAS key set identifier for E-UTRAN */ - OctetString kasme; /* ASME security key (native context) */ - //OctetString ksgsn; /* SGSN security key (mapped context) */ - OctetString knas_enc; /* NAS cyphering key */ - OctetString knas_int; /* NAS integrity key */ - struct count_s{ - uint32_t spare:8; - uint32_t overflow:16; - uint32_t seq_num:8; - } dl_count, ul_count; /* Downlink and uplink count parameters */ - struct { - uint8_t eps_encryption; /* algorithm used for ciphering */ - uint8_t eps_integrity; /* algorithm used for integrity protection */ - uint8_t umts_encryption; /* algorithm used for ciphering */ - uint8_t umts_integrity; /* algorithm used for integrity protection */ - uint8_t gprs_encryption; /* algorithm used for ciphering */ - uint8_t umts_present:1; - uint8_t gprs_present:1; - } capability; /* UE network capability */ - struct { - uint8_t encryption:4; /* algorithm used for ciphering */ - uint8_t integrity:4; /* algorithm used for integrity protection */ - } selected_algorithms; /* MME selected algorithms */ -} emm_security_context_t; - -/* - * -------------------------------------------------------------------------- - * EMM internal data handled by EPS Mobility Management sublayer in the UE - * -------------------------------------------------------------------------- - */ - -/* - * -------------------------------------------------------------------------- - * EMM internal data handled by EPS Mobility Management sublayer in the MME - * -------------------------------------------------------------------------- - */ -/* - * Structure of the EMM context established by the network for a particular UE - * --------------------------------------------------------------------------- - */ -typedef struct emm_data_context_s { -#if defined(NAS_BUILT_IN_EPC) - RB_ENTRY(emm_data_context_s) entries; -#endif - - unsigned int ueid; /* UE identifier */ - int is_dynamic; /* Dynamically allocated context indicator */ - int is_attached; /* Attachment indicator */ - int is_emergency;/* Emergency bearer services indicator */ - - imsi_t *imsi; /* The IMSI provided by the UE or the MME */ - imei_t *imei; /* The IMEI provided by the UE */ - int guti_is_new; /* New GUTI indicator */ - GUTI_t *guti; /* The GUTI assigned to the UE */ - GUTI_t *old_guti; /* The old GUTI */ - int n_tacs; /* Number of consecutive tracking areas the UE is - * registered to */ - tac_t tac; /* Code of the first tracking area the UE is - * registered to */ - - int ksi; /* Security key set identifier provided by the UE */ - int eea; /* EPS encryption algorithms supported by the UE */ - int eia; /* EPS integrity algorithms supported by the UE */ - int ucs2; /* UCS2 Alphabet*/ - int uea; /* UMTS encryption algorithms supported by the UE */ - int uia; /* UMTS integrity algorithms supported by the UE */ - int gea; /* GPRS encryption algorithms supported by the UE */ - int umts_present; /* For encoding ue network capabilities (variable size)*/ - int gprs_present; /* For encoding ue network capabilities (variable size)*/ - - auth_vector_t vector;/* EPS authentication vector */ - emm_security_context_t *security; /* Current EPS NAS security context */ - OctetString esm_msg; /* ESM message contained within the initial request*/ - int emm_cause; /* EMM failure cause code */ - - emm_fsm_state_t _emm_fsm_status; - - struct nas_timer_t T3450; /* EMM message retransmission timer */ - struct nas_timer_t T3460; /* Authentication timer */ - struct nas_timer_t T3470; /* Identification timer */ - - esm_data_context_t esm_data_ctx; -} emm_data_context_t; - -/* - * Structure of the EMM data - * ------------------------- - */ -typedef struct emm_data_s { - /* - * MME configuration - * ----------------- - */ - mme_api_emm_config_t conf; - /* - * EMM contexts - * ------------ - */ -# if defined(NAS_BUILT_IN_EPC) - /* Use a tree for ue data context within MME */ - RB_HEAD(emm_data_context_map, emm_data_context_s) ctx_map; -# else -# define EMM_DATA_NB_UE_MAX (MME_API_NB_UE_MAX + 1) - emm_data_context_t *ctx [EMM_DATA_NB_UE_MAX]; -# endif -} emm_data_t; - -struct emm_data_context_s *emm_data_context_get( - emm_data_t *_emm_data, unsigned int _ueid); - -struct emm_data_context_s *emm_data_context_remove( - emm_data_t *_emm_data, struct emm_data_context_s *elm); - -void emm_data_context_add(emm_data_t *emm_data, struct emm_data_context_s *elm); -void emm_data_context_dump(struct emm_data_context_s *elm_pP); - -void emm_data_context_dump_all(void); - - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * EPS mobility management data (used within EMM only) - * -------------------------------------------------------------------------- - */ -emm_data_t _emm_data; - - -/* - * -------------------------------------------------------------------------- - * EPS mobility management timers – Network side - * -------------------------------------------------------------------------- - */ -#define T3450_DEFAULT_VALUE 6 /* 6 seconds */ -#define T3460_DEFAULT_VALUE 6 /* 6 seconds */ -#define T3470_DEFAULT_VALUE 6 /* 6 seconds */ - -/* - * mobile reachable timer - * ---------------------- - * The network supervises the periodic tracking area updating procedure - * of the UE by means of the mobile reachable timer. - * If the UE is not attached for emergency bearer services, the mobile - * reachable timer is 4 minutes greater than T3412. - * If the UE is attached for emergency bearer services, the MME shall - * set the mobile reachable timer with a value equal to T3412. When - * the mobile reachable timer expires, the MME shall locally detach the UE. - * - * The mobile reachable timer shall be reset and started, when the MME - * releases the NAS signalling connection for the UE. The mobile reachable - * timer shall be stopped when a NAS signalling connection is established - * for the UE. - */ - -/* - * implicit detach timer - * --------------------- - * If ISR is activated, the default value of the implicit detach timer is - * 4 minutes greater than T3423. - * If the implicit detach timer expires before the UE contacts the network, - * the network shall implicitly detach the UE. - * If the MME includes timer T3346 in the TRACKING AREA UPDATE REJECT message - * or the SERVICE REJECT message and T3346 is greater than T3412, the MME - * sets the mobile reachable timer and the implicit detach timer such that - * the sum of the timer values is greater than T3346. - * - * Upon expiry of the mobile reachable timer the network shall start the - * implicit detach timer. The implicit detach timer shall be stopped when - * a NAS signalling connection is established for the UE. - */ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif /* __EMMDATA_H__*/ diff --git a/openair-cn/NAS/MME/EMM/emm_data_ctx.c b/openair-cn/NAS/MME/EMM/emm_data_ctx.c deleted file mode 100644 index 4030e08e95..0000000000 --- a/openair-cn/NAS/MME/EMM/emm_data_ctx.c +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#if defined(NAS_BUILT_IN_EPC) -#include "assertions.h" -#include "tree.h" -#include "emmData.h" -#include "nas_log.h" -#include "security_types.h" - -static inline -int emm_data_ctxt_compare_ueid(struct emm_data_context_s *p1, - struct emm_data_context_s *p2); - -RB_PROTOTYPE(emm_data_context_map, emm_data_context_s, entries, - emm_data_ctxt_compare_ueid); - -/* Generate functions used for the MAP */ -RB_GENERATE(emm_data_context_map, emm_data_context_s, entries, - emm_data_ctxt_compare_ueid); - -static inline -int emm_data_ctxt_compare_ueid(struct emm_data_context_s *p1, - struct emm_data_context_s *p2) -{ - if (p1->ueid > p2->ueid) { - return 1; - } - - if (p1->ueid < p2->ueid) { - return -1; - } - - /* Matching reference -> return 0 */ - return 0; -} - -struct emm_data_context_s *emm_data_context_get( - emm_data_t *emm_data, unsigned int _ueid) -{ - struct emm_data_context_s reference; - - DevAssert(emm_data != NULL); - DevCheck(_ueid > 0, _ueid, 0, 0); - - memset(&reference, 0, sizeof(struct emm_data_context_s)); - reference.ueid = _ueid; - return RB_FIND(emm_data_context_map, &emm_data->ctx_map, &reference); -} - -struct emm_data_context_s *emm_data_context_remove( - emm_data_t *emm_data, struct emm_data_context_s *elm) -{ - LOG_TRACE(INFO, "EMM-CTX - Remove in context %p UE id "NAS_UE_ID_FMT" ", elm, elm->ueid); - return RB_REMOVE(emm_data_context_map, &emm_data->ctx_map, elm); -} - -void emm_data_context_add(emm_data_t *emm_data, struct emm_data_context_s *elm) -{ - LOG_TRACE(INFO, "EMM-CTX - Add in context %p UE id "NAS_UE_ID_FMT" ", elm, elm->ueid); - RB_INSERT(emm_data_context_map, &emm_data->ctx_map, elm); -} - -void emm_data_context_dump(struct emm_data_context_s *elm_pP) -{ - if (elm_pP != NULL) { - char imsi_str[16]; - char guti_str[22]; - int k, size, remaining_size; - char key_string[KASME_LENGTH_OCTETS*2]; - LOG_TRACE(INFO, "EMM-CTX: ue id: "NAS_UE_ID_FMT" (UE identifier)", elm_pP->ueid); - LOG_TRACE(INFO, " is_dynamic: %u (Dynamically allocated context indicator)", elm_pP->is_dynamic); - LOG_TRACE(INFO, " is_attached: %u (Attachment indicator)", elm_pP->is_attached); - LOG_TRACE(INFO, " is_emergency: %u (Emergency bearer services indicator)", elm_pP->is_emergency); - NAS_IMSI2STR(elm_pP->imsi, imsi_str, 16); - LOG_TRACE(INFO, " imsi: %s (The IMSI provided by the UE or the MME)", imsi_str); - LOG_TRACE(INFO, " imei: TODO (The IMEI provided by the UE)"); - LOG_TRACE(INFO, " guti_is_new: %u (New GUTI indicator)", elm_pP->guti_is_new); - GUTI2STR(elm_pP->guti, guti_str, 22); - LOG_TRACE(INFO, " guti: %s (The GUTI assigned to the UE)", guti_str); - GUTI2STR(elm_pP->old_guti, guti_str, 22); - LOG_TRACE(INFO, " old_guti: %s (The old GUTI)", guti_str); - LOG_TRACE(INFO, " n_tacs: %u (Number of consecutive tracking areas the UE is registered to)", elm_pP->n_tacs); - LOG_TRACE(INFO, " tac: 0x%04x (Code of the first tracking area the UE is registered to)", elm_pP->n_tacs); - LOG_TRACE(INFO, " ksi: %u (Security key set identifier provided by the UE)", elm_pP->ksi); - - LOG_TRACE(INFO, " auth_vector: (EPS authentication vector)"); - LOG_TRACE(INFO, " kasme: "KASME_FORMAT""KASME_FORMAT, KASME_DISPLAY_1(elm_pP->vector.kasme), KASME_DISPLAY_2(elm_pP->vector.kasme)); - LOG_TRACE(INFO, " rand: "RAND_FORMAT, RAND_DISPLAY(elm_pP->vector.rand)); - LOG_TRACE(INFO, " autn: "AUTN_FORMAT, AUTN_DISPLAY(elm_pP->vector.autn)); - for (k = 0; k < XRES_LENGTH_MAX; k++) {sprintf(&key_string[k * 3], "%02x,", elm_pP->vector.xres[k]);} - key_string[k * 3 - 1] = '\0'; - LOG_TRACE(INFO, " xres: %s\n", key_string); - - if (elm_pP->security != NULL) { - LOG_TRACE(INFO, " security context: (Current EPS NAS security context)"); - LOG_TRACE(INFO, " type: %s (Type of security context)", - (elm_pP->security->type == EMM_KSI_NOT_AVAILABLE)?"KSI_NOT_AVAILABLE":(elm_pP->security->type == EMM_KSI_NATIVE)?"KSI_NATIVE":"KSI_MAPPED"); - LOG_TRACE(INFO, " eksi: %u (NAS key set identifier for E-UTRAN)", elm_pP->security->eksi); - - if (elm_pP->security->kasme.length > 0) { - size = 0; - size = 0;remaining_size=KASME_LENGTH_OCTETS*2; - for (k = 0; k < elm_pP->security->kasme.length; k++) { - size +=snprintf(&key_string[size], remaining_size, "0x%x ", elm_pP->security->kasme.value[k]); - remaining_size -= size; - } - } else { - size +=snprintf(&key_string[0], remaining_size, "None"); - } - LOG_TRACE(INFO, " kasme: %s (ASME security key (native context))", key_string); - if (elm_pP->security->knas_enc.length > 0) { - size = 0; - size = 0;remaining_size=KASME_LENGTH_OCTETS*2; - for (k = 0; k < elm_pP->security->knas_enc.length; k++) { - size +=snprintf(&key_string[size], remaining_size, "0x%x ", elm_pP->security->knas_enc.value[k]); - remaining_size -= size; - } - } else { - size +=snprintf(&key_string[0], remaining_size, "None"); - } - LOG_TRACE(INFO, " knas_enc: %s (NAS cyphering key)", key_string); - if (elm_pP->security->knas_int.length > 0) { - size = 0;remaining_size=KASME_LENGTH_OCTETS*2; - for (k = 0; k < elm_pP->security->knas_int.length; k++) { - size +=snprintf(&key_string[size], remaining_size, "0x%x ", elm_pP->security->knas_int.value[k]); - remaining_size -= size; - } - } else { - size +=snprintf(&key_string[0], remaining_size, "None"); - } - LOG_TRACE(INFO, " knas_int: %s (NAS integrity key)", key_string); - LOG_TRACE(INFO, " dl_count.overflow: %u ", elm_pP->security->dl_count.overflow); - LOG_TRACE(INFO, " dl_count.seq_num: %u ", elm_pP->security->dl_count.seq_num); - LOG_TRACE(INFO, " ul_count.overflow: %u ", elm_pP->security->ul_count.overflow); - LOG_TRACE(INFO, " ul_count.seq_num: %u ", elm_pP->security->ul_count.seq_num); - LOG_TRACE(INFO, " TODO capability"); - LOG_TRACE(INFO, " selected_algorithms.encryption: %x ", elm_pP->security->selected_algorithms.encryption); - LOG_TRACE(INFO, " selected_algorithms.integrity: %x ", elm_pP->security->selected_algorithms.integrity); - } else { - LOG_TRACE(INFO, " No security context"); - } - LOG_TRACE(INFO, " _emm_fsm_status %u ", elm_pP->_emm_fsm_status); - LOG_TRACE(INFO, " TODO esm_data_ctx"); - } -} - -void emm_data_context_dump_all(void) -{ - struct emm_data_context_s *elm_p = NULL; - LOG_TRACE(INFO, "EMM-CTX - Dump all contexts:"); - RB_FOREACH(elm_p, emm_data_context_map,&_emm_data.ctx_map) { - emm_data_context_dump(elm_p); - } -} -#endif diff --git a/openair-cn/NAS/MME/EMM/emm_main.c b/openair-cn/NAS/MME/EMM/emm_main.c deleted file mode 100644 index c90a7836f5..0000000000 --- a/openair-cn/NAS/MME/EMM/emm_main.c +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_main.c - -Version 0.1 - -Date 2012/10/10 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EPS Mobility Management procedure call manager, - the main entry point for elementary EMM processing. - -*****************************************************************************/ - -#include "emm_main.h" -#include "nas_log.h" -#include "emmData.h" - - -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -#endif - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/**************************************************************************** - ** ** - ** Name: emm_main_initialize() ** - ** ** - ** Description: Initializes EMM internal data ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) -void emm_main_initialize(mme_config_t *mme_config_p) -#else -void emm_main_initialize(void) -#endif -{ - LOG_FUNC_IN; - - /* Retreive MME supported configuration data */ -#if defined(NAS_BUILT_IN_EPC) - - if (mme_api_get_emm_config(&_emm_data.conf, mme_config_p) != RETURNok) -#else - if (mme_api_get_emm_config(&_emm_data.conf) != RETURNok) -#endif - { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to get MME configuration data"); - } - -#if defined(NAS_BUILT_IN_EPC) - RB_INIT(&_emm_data.ctx_map); -#endif - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: emm_main_cleanup() ** - ** ** - ** Description: Performs the EPS Mobility Management clean up procedure ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void emm_main_cleanup(void) -{ - LOG_FUNC_IN; - - - LOG_FUNC_OUT; -} - - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - diff --git a/openair-cn/NAS/MME/EMM/emm_main.h b/openair-cn/NAS/MME/EMM/emm_main.h deleted file mode 100644 index ac3772a24f..0000000000 --- a/openair-cn/NAS/MME/EMM/emm_main.h +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_main.h - -Version 0.1 - -Date 2012/10/10 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EPS Mobility Management procedure call manager, - the main entry point for elementary EMM processing. - -*****************************************************************************/ -#ifndef __EMM_MAIN_H__ -#define __EMM_MAIN_H__ - -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -#endif - -#include "commonDef.h" -#include "networkDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -# if defined(NAS_BUILT_IN_EPC) -void emm_main_initialize(mme_config_t *mme_config_p); -# else -void emm_main_initialize(void); -# endif -void emm_main_cleanup(void); - - - -#endif /* __EMM_MAIN_H__*/ diff --git a/openair-cn/NAS/MME/EMM/emm_proc.h b/openair-cn/NAS/MME/EMM/emm_proc.h deleted file mode 100644 index d7892a03b1..0000000000 --- a/openair-cn/NAS/MME/EMM/emm_proc.h +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source emm_proc.h - -Version 0.1 - -Date 2012/10/16 - -Product NAS stack - -Subsystem EPS Mobility Management - -Author Frederic Maurel - -Description Defines the EPS Mobility Management procedures executed at - the EMM Service Access Points. - -*****************************************************************************/ -#ifndef __EMM_PROC_H__ -#define __EMM_PROC_H__ - -#include "commonDef.h" -#include "OctetString.h" - -#include "EmmCommon.h" -#include "emmData.h" - - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Type of network attachment */ -typedef enum { - EMM_ATTACH_TYPE_EPS = 0, - EMM_ATTACH_TYPE_IMSI, - EMM_ATTACH_TYPE_EMERGENCY, - EMM_ATTACH_TYPE_RESERVED, -} emm_proc_attach_type_t; - -/* Type of network detach */ -typedef enum { - EMM_DETACH_TYPE_EPS = 0, - EMM_DETACH_TYPE_IMSI, - EMM_DETACH_TYPE_EPS_IMSI, - EMM_DETACH_TYPE_REATTACH, - EMM_DETACH_TYPE_NOT_REATTACH, - EMM_DETACH_TYPE_RESERVED, -} emm_proc_detach_type_t; - -/* Type of requested identity */ -typedef enum { - EMM_IDENT_TYPE_NOT_AVAILABLE = 0, - EMM_IDENT_TYPE_IMSI, - EMM_IDENT_TYPE_IMEI, - EMM_IDENT_TYPE_IMEISV, - EMM_IDENT_TYPE_TMSI -} emm_proc_identity_type_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - *--------------------------------------------------------------------------- - * EMM status procedure - *--------------------------------------------------------------------------- - */ -int emm_proc_status_ind(unsigned int ueid, int emm_cause); -int emm_proc_status(unsigned int ueid, int emm_cause); - -/* - *--------------------------------------------------------------------------- - * Lower layer procedure - *--------------------------------------------------------------------------- - */ - - -/* - *--------------------------------------------------------------------------- - * UE's Idle mode procedure - *--------------------------------------------------------------------------- - */ - - -/* - * -------------------------------------------------------------------------- - * Attach procedure - * -------------------------------------------------------------------------- - */ - - -int emm_proc_attach_request(unsigned int ueid, emm_proc_attach_type_t type, - int native_ksi, int ksi, int native_guti, GUTI_t *guti, imsi_t *imsi, - imei_t *imei, tai_t *tai, int eea, int eia, int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present, const OctetString *esm_msg); -int emm_proc_attach_reject(unsigned int ueid, int emm_cause); -int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg); -int emm_proc_tracking_area_update_reject(unsigned int ueid, int emm_cause); - -/* - * -------------------------------------------------------------------------- - * Detach procedure - * -------------------------------------------------------------------------- - */ - -int emm_proc_detach(unsigned int ueid, emm_proc_detach_type_t type); -int emm_proc_detach_request(unsigned int ueid, emm_proc_detach_type_t type, - int switch_off, int native_ksi, int ksi, GUTI_t *guti, imsi_t *imsi, - imei_t *imei); - -/* - * -------------------------------------------------------------------------- - * Identification procedure - * -------------------------------------------------------------------------- - */ -int emm_proc_identification(unsigned int ueid, - emm_data_context_t *emm_ctx, - emm_proc_identity_type_t type, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure); -int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, - const imei_t *imei, uint32_t *tmsi); - -/* - * -------------------------------------------------------------------------- - * Authentication procedure - * -------------------------------------------------------------------------- - */ - -int emm_proc_authentication(void *ctx, unsigned int ueid, int ksi, - const OctetString *_rand, const OctetString *autn, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure); -int emm_proc_authentication_complete(unsigned int ueid, int emm_cause, - const OctetString *res); - -int emm_attach_security(void *args); - -/* - * -------------------------------------------------------------------------- - * Security mode control procedure - * -------------------------------------------------------------------------- - */ - -int emm_proc_security_mode_control(unsigned int ueid, int ksi, - int eea, int eia,int ucs2, int uea, int uia, int gea, - int umts_present, int gprs_present, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure); -int emm_proc_security_mode_complete(unsigned int ueid); -int emm_proc_security_mode_reject(unsigned int ueid); - -/* - *--------------------------------------------------------------------------- - * Network indication handlers - *--------------------------------------------------------------------------- - */ - - -#endif /* __EMM_PROC_H__*/ diff --git a/openair-cn/NAS/MME/ESM/COPYING b/openair-cn/NAS/MME/ESM/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/MME/ESM/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c b/openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c deleted file mode 100644 index 813b29770d..0000000000 --- a/openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c +++ /dev/null @@ -1,442 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source DedicatedEpsBearerContextActivation.c - -Version 0.1 - -Date 2013/07/16 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the dedicated EPS bearer context activation ESM - procedure executed by the Non-Access Stratum. - - The purpose of the dedicated EPS bearer context activation - procedure is to establish an EPS bearer context with specific - QoS and TFT between the UE and the EPC. - - The procedure is initiated by the network, but may be requested - by the UE by means of the UE requested bearer resource alloca- - tion procedure or the UE requested bearer resource modification - procedure. - It can be part of the attach procedure or be initiated together - with the default EPS bearer context activation procedure when - the UE initiated stand-alone PDN connectivity procedure. - -*****************************************************************************/ - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esm_cause.h" -#include "esm_ebr.h" -#include "esm_ebr_context.h" - -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the dedicated EPS bearer context activation - * procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_dedicated_eps_bearer_activate_t3485_handler(void *); - -/* Maximum value of the activate dedicated EPS bearer context request - * retransmission counter */ -#define DEDICATED_EPS_BEARER_ACTIVATE_COUNTER_MAX 5 - -static int _dedicated_eps_bearer_activate(emm_data_context_t *ctx, int ebi, - const OctetString *msg); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Dedicated EPS bearer context activation procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context() ** - ** ** - ** Description: Allocates resources required for activation of a dedica- ** - ** ted EPS bearer context. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: PDN connection identifier ** - ** esm_qos: EPS bearer level QoS parameters ** - ** tft: Traffic flow template parameters ** - ** Others: None ** - ** ** - ** Outputs: ebi: EPS bearer identity assigned to the new ** - ** dedicated bearer context ** - ** default_ebi: EPS bearer identity of the associated de- ** - ** fault EPS bearer context ** - ** esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context(emm_data_context_t *ctx, int pid, - unsigned int *ebi, - unsigned int *default_ebi, - const esm_proc_qos_t *qos, - const esm_proc_tft_t *tft, - int *esm_cause) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " - "(ueid="NAS_UE_ID_FMT", pid=%d)", ctx->ueid, pid); - - /* Assign new EPS bearer context */ - *ebi = esm_ebr_assign(ctx, ESM_EBI_UNASSIGNED); - - if (*ebi != ESM_EBI_UNASSIGNED) { - /* Create dedicated EPS bearer context */ - *default_ebi = esm_ebr_context_create(ctx, pid, *ebi, FALSE, qos, tft); - - if (*default_ebi == ESM_EBI_UNASSIGNED) { - /* No resource available */ - LOG_TRACE(WARNING, "ESM-PROC - Failed to create dedicated EPS " - "bearer context (ebi=%d)", *ebi); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN (RETURNerror); - } - - LOG_FUNC_RETURN (RETURNok); - } - - LOG_TRACE(WARNING, "ESM-PROC - Failed to assign new EPS bearer context"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_request() ** - ** ** - ** Description: Initiates the dedicated EPS bearer context activation pro-** - ** cedure ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.2 ** - ** The MME initiates the dedicated EPS bearer context activa-** - ** tion procedure by sending an ACTIVATE DEDICATED EPS BEA- ** - ** RER CONTEXT REQUEST message, starting timer T3485 and en- ** - ** tering state BEARER CONTEXT ACTIVE PENDING. ** - ** ** - ** Inputs: is_standalone: Not used (always TRUE) ** - ** ueid: UE lower layer identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_request(int is_standalone, - emm_data_context_t *ctx, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO,"ESM-PROC - Initiate dedicated EPS bearer context " - "activation (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Send activate dedicated EPS bearer context request message and - * start timer T3485 */ - rc = _dedicated_eps_bearer_activate(ctx, ebi, msg); - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE PENDING */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_ACTIVE_PENDING, ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE PENDING state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE PENDING", - ebi); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_accept() ** - ** ** - ** Description: Performs dedicated EPS bearer context activation procedu- ** - ** re accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.3 ** - ** Upon receipt of the ACTIVATE DEDICATED EPS BEARER CONTEXT ** - ** ACCEPT message, the MME shall stop the timer T3485 and ** - ** enter the state BEARER CONTEXT ACTIVE. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " - "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Stop T3485 timer */ - rc = esm_ebr_stop_timer(ctx, ebi); - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_ACTIVE, FALSE); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_reject() ** - ** ** - ** Description: Performs dedicated EPS bearer context activation procedu- ** - ** re not accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.4 ** - ** Upon receipt of the ACTIVATE DEDICATED EPS BEARER CONTEXT ** - ** REJECT message, the MME shall stop the timer T3485, enter ** - ** the state BEARER CONTEXT INACTIVE and abort the dedicated ** - ** EPS bearer context activation procedure. ** - ** The MME also requests the lower layer to release the ra- ** - ** dio resources that were established during the dedicated ** - ** EPS bearer context activation. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, - int *esm_cause) -{ - int rc; - - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "ESM-PROC - Dedicated EPS bearer context activation " - "not accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Stop T3485 timer if running */ - rc = esm_ebr_stop_timer(ctx, ebi); - - if (rc != RETURNerror) { - int pid, bid; - /* Release the dedicated EPS bearer context and enter state INACTIVE */ - rc = esm_proc_eps_bearer_context_deactivate(ctx, TRUE, ebi, - &pid, &bid, NULL); - - if (rc != RETURNok) { - /* Failed to release the dedicated EPS bearer context */ - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } - } - - LOG_FUNC_RETURN (rc); -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _dedicated_eps_bearer_activate_t3485_handler() ** - ** ** - ** Description: T3485 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.6, case a ** - ** On the first expiry of the timer T3485, the MME shall re- ** - ** send the ACTIVATE DEDICATED EPS BEARER CONTEXT REQUEST ** - ** and shall reset and restart timer T3485. This retransmis- ** - ** sion is repeated four times, i.e. on the fifth expiry of ** - ** timer T3485, the MME shall abort the procedure, release ** - ** any resources allocated for this activation and enter the ** - ** state BEARER CONTEXT INACTIVE. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_dedicated_eps_bearer_activate_t3485_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - /* Get retransmission timer parameters data */ - esm_ebr_timer_data_t *data = (esm_ebr_timer_data_t *)(args); - - /* Increment the retransmission counter */ - data->count += 1; - - LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " - "retransmission counter = %d", - data->ueid, data->ebi, data->count); - - if (data->count < DEDICATED_EPS_BEARER_ACTIVATE_COUNTER_MAX) { - /* Re-send activate dedicated EPS bearer context request message - * to the UE */ - rc = _dedicated_eps_bearer_activate(data->ctx, data->ebi, &data->msg); - } else { - /* - * The maximum number of activate dedicated EPS bearer context request - * message retransmission has exceed - */ - int pid, bid; - /* Release the dedicated EPS bearer context and enter state INACTIVE */ - rc = esm_proc_eps_bearer_context_deactivate(data->ctx, TRUE, - data->ebi, &pid, &bid, - NULL); - - if (rc != RETURNerror) { - /* Stop timer T3485 */ - rc = esm_ebr_stop_timer(data->ctx, data->ebi); - } - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _dedicated_eps_bearer_activate() ** - ** ** - ** Description: Sends ACTIVATE DEDICATED EPS BEREAR CONTEXT REQUEST mes- ** - ** sage and starts timer T3485 ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3485 ** - ** ** - ***************************************************************************/ -static int _dedicated_eps_bearer_activate(emm_data_context_t *ctx, int ebi, - const OctetString *msg) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - /* - * Notify EMM that an activate dedicated EPS bearer context request - * message has to be sent to the UE - */ - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_esm->msg = *msg; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Start T3485 retransmission timer */ - rc = esm_ebr_start_timer(ctx, ebi, msg, T3485_DEFAULT_VALUE, - _dedicated_eps_bearer_activate_t3485_handler); - } - - LOG_FUNC_RETURN (rc); -} diff --git a/openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c b/openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c deleted file mode 100644 index 831fc3327d..0000000000 --- a/openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c +++ /dev/null @@ -1,497 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source DefaultEpsBearerContextActivation.c - -Version 0.1 - -Date 2013/01/28 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the default EPS bearer context activation ESM - procedure executed by the Non-Access Stratum. - - The purpose of the default bearer context activation procedure - is to establish a default EPS bearer context between the UE - and the EPC. - - The procedure is initiated by the network as a response to - the PDN CONNECTIVITY REQUEST message received from the UE. - It can be part of the attach procedure. - -*****************************************************************************/ - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esm_cause.h" -#include "esm_ebr.h" -#include "esm_ebr_context.h" - -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the default EPS bearer context activation - * procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_default_eps_bearer_activate_t3485_handler(void *); - -/* Maximum value of the activate default EPS bearer context request - * retransmission counter */ -#define DEFAULT_EPS_BEARER_ACTIVATE_COUNTER_MAX 5 - -static int _default_eps_bearer_activate(emm_data_context_t *ctx, int ebi, - const OctetString *msg); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Default EPS bearer context activation procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context() ** - ** ** - ** Description: Allocates resources required for activation of a default ** - ** EPS bearer context. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: PDN connection identifier ** - ** qos: EPS bearer level QoS parameters ** - ** Others: None ** - ** ** - ** Outputs: ebi: EPS bearer identity assigned to the de- ** - ** fault EPS bearer context ** - ** esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context(emm_data_context_t *ctx, int pid, - unsigned int *ebi, - const esm_proc_qos_t *qos, - int *esm_cause) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " - "(ueid="NAS_UE_ID_FMT", pid=%d, GBR UL %u GBR DL %u, MBR UL %u MBR DL %u QCI %u)", - ctx->ueid, - pid, - qos->gbrUL, - qos->gbrDL, - qos->mbrUL, - qos->mbrDL, - qos->qci); - - /* Assign new EPS bearer context */ - *ebi = esm_ebr_assign(ctx, ESM_EBI_UNASSIGNED); - - if (*ebi != ESM_EBI_UNASSIGNED) { - /* Create default EPS bearer context */ - *ebi = esm_ebr_context_create(ctx, pid, *ebi, TRUE, qos, NULL); - - if (*ebi == ESM_EBI_UNASSIGNED) { - /* No resource available */ - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new default EPS " - "bearer context (ebi=%d)", *ebi); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN (RETURNerror); - } - - LOG_FUNC_RETURN (RETURNok); - } - - LOG_TRACE(WARNING, "ESM-PROC - Failed to assign new EPS bearer context"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_request() ** - ** ** - ** Description: Initiates the default EPS bearer context activation pro- ** - ** cedure ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.2 ** - ** The MME initiates the default EPS bearer context activa- ** - ** tion procedure by sending an ACTIVATE DEFAULT EPS BEARER ** - ** CONTEXT REQUEST message, starting timer T3485 and ente- ** - ** ring state BEARER CONTEXT ACTIVE PENDING. ** - ** ** - ** Inputs: is_standalone: Indicate whether the default bearer is ** - ** activated as part of the attach procedure ** - ** or as the response to a stand-alone PDN ** - ** CONNECTIVITY REQUEST message ** - ** ueid: UE lower layer identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_request(int is_standalone, - emm_data_context_t *ctx, int ebi, - OctetString *msg, int ue_triggered) -{ - int rc = RETURNok; - - LOG_FUNC_IN; - - - if (is_standalone) { - /* Send activate default EPS bearer context request message and - * start timer T3485 */ - LOG_TRACE(INFO,"ESM-PROC - Initiate standalone default EPS bearer context activation " - "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - rc = _default_eps_bearer_activate(ctx, ebi, msg); - } else { - LOG_TRACE(INFO,"ESM-PROC - Initiate non standalone default EPS bearer context activation " - "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - } - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE PENDING */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_ACTIVE_PENDING, ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE PENDING state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE PENDING", - ebi); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_accept() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.3 ** - ** Upon receipt of the ACTIVATE DEFAULT EPS BEARER CONTEXT ** - ** ACCEPT message, the MME shall enter the state BEARER CON- ** - ** TEXT ACTIVE and stop the timer T3485, if it is running. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " - "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Stop T3485 timer if running */ - rc = esm_ebr_stop_timer(ctx, ebi); - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_ACTIVE, FALSE); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_reject() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** not accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.4 ** - ** Upon receipt of the ACTIVATE DEFAULT EPS BEARER CONTEXT ** - ** REJECT message, the MME shall enter the state BEARER CON- ** - ** TEXT INACTIVE and stop the timer T3485, if it is running. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " - "not accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Stop T3485 timer if running */ - rc = esm_ebr_stop_timer(ctx, ebi); - - if (rc != RETURNerror) { - int pid, bid; - /* Release the default EPS bearer context and enter state INACTIVE */ - rc = esm_proc_eps_bearer_context_deactivate(ctx, TRUE, ebi, - &pid, &bid, NULL); - - if (rc != RETURNok) { - /* Failed to release the default EPS bearer context */ - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_failure() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** upon receiving notification from the EPS Mobility Manage- ** - ** ment sublayer that EMM procedure that initiated EPS de- ** - ** fault bearer context activation locally failed. ** - ** ** - ** The MME releases the default EPS bearer context previous- ** - ** ly allocated when ACTIVATE DEFAULT EPS BEARER CONTEXT RE- ** - ** QUEST message was received. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The identifier of the PDN connection the ** - ** default EPS bearer context belongs to if ** - ** successfully released; ** - ** RETURNerror otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_failure(emm_data_context_t *ctx) -{ - int rc = RETURNerror; - int pid; - - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " - "failure (ueid="NAS_UE_ID_FMT")", ctx->ueid); - - /* Get the EPS bearer identity of the EPS bearer context which is still - * pending in the active pending state */ - int ebi = esm_ebr_get_pending_ebi(ctx, ESM_EBR_ACTIVE_PENDING); - - if (ebi != ESM_EBI_UNASSIGNED) { - int bid; - /* Release the default EPS bearer context and enter state INACTIVE */ - rc = esm_proc_eps_bearer_context_deactivate(ctx, TRUE, ebi, - &pid, &bid, NULL); - } - - if (rc != RETURNerror) { - LOG_FUNC_RETURN (pid); - } - - LOG_FUNC_RETURN (RETURNerror); -} - - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _default_eps_bearer_activate_t3485_handler() ** - ** ** - ** Description: T3485 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.6, case a ** - ** On the first expiry of the timer T3485, the MME shall re- ** - ** send the ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST and ** - ** shall reset and restart timer T3485. This retransmission ** - ** is repeated four times, i.e. on the fifth expiry of timer ** - ** T3485, the MME shall release possibly allocated resources ** - ** for this activation and shall abort the procedure. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_default_eps_bearer_activate_t3485_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - /* Get retransmission timer parameters data */ - esm_ebr_timer_data_t *data = (esm_ebr_timer_data_t *)(args); - - /* Increment the retransmission counter */ - data->count += 1; - - LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " - "retransmission counter = %d", - data->ueid, data->ebi, data->count); - - if (data->count < DEFAULT_EPS_BEARER_ACTIVATE_COUNTER_MAX) { - /* Re-send activate default EPS bearer context request message - * to the UE */ - rc = _default_eps_bearer_activate(data->ctx, data->ebi, &data->msg); - } else { - /* - * The maximum number of activate default EPS bearer context request - * message retransmission has exceed - */ - int pid, bid; - /* Release the default EPS bearer context and enter state INACTIVE */ - rc = esm_proc_eps_bearer_context_deactivate(data->ctx, TRUE, - data->ebi, &pid, &bid, - NULL); - - if (rc != RETURNerror) { - /* Stop timer T3485 */ - rc = esm_ebr_stop_timer(data->ctx, data->ebi); - } - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _default_eps_bearer_activate() ** - ** ** - ** Description: Sends ACTIVATE DEFAULT EPS BEREAR CONTEXT REQUEST message ** - ** and starts timer T3485 ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3485 ** - ** ** - ***************************************************************************/ -static int _default_eps_bearer_activate(emm_data_context_t *ctx, int ebi, - const OctetString *msg) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - /* - * Notify EMM that an activate default EPS bearer context request message - * has to be sent to the UE - */ - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_esm->msg = *msg; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Start T3485 retransmission timer */ - rc = esm_ebr_start_timer(ctx, ebi, msg, T3485_DEFAULT_VALUE, - _default_eps_bearer_activate_t3485_handler); - } - - LOG_FUNC_RETURN (rc); -} diff --git a/openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c b/openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c deleted file mode 100644 index b26240a848..0000000000 --- a/openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c +++ /dev/null @@ -1,483 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EpsBearerContextDeactivation.c - -Version 0.1 - -Date 2013/05/22 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the EPS bearer context deactivation ESM procedure - executed by the Non-Access Stratum. - - The purpose of the EPS bearer context deactivation procedure - is to deactivate an EPS bearer context or disconnect from a - PDN by deactivating all EPS bearer contexts to the PDN. - The EPS bearer context deactivation procedure is initiated - by the network, and it may be triggered by the UE by means - of the UE requested bearer resource modification procedure - or UE requested PDN disconnect procedure. - -*****************************************************************************/ - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emmData.h" -#include "esmData.h" -#include "esm_cause.h" -#include "esm_ebr.h" -#include "esm_ebr_context.h" - -#include "emm_sap.h" -#include "esm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the EPS bearer context deactivation procedure - * in the MME - * -------------------------------------------------------------------------- - */ -/* - * Timer handlers - */ -static void *_eps_bearer_deactivate_t3495_handler(void *); - -/* Maximum value of the deactivate EPS bearer context request - * retransmission counter */ -#define EPS_BEARER_DEACTIVATE_COUNTER_MAX 5 - -static int _eps_bearer_deactivate(emm_data_context_t *ctx, int ebi, - const OctetString *msg); -static int _eps_bearer_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid); - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * EPS bearer context deactivation procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate() ** - ** ** - ** Description: Locally releases the EPS bearer context identified by the ** - ** given EPS bearer identity, without peer-to-peer signal- ** - ** ling between the UE and the MME, or checks whether an EPS ** - ** bearer context with specified EPS bearer identity has ** - ** been activated for the given UE. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** is local: TRUE if the EPS bearer context has to be ** - ** locally released without peer-to-peer si- ** - ** gnalling between the UE and the MME ** - ** ebi: EPS bearer identity of the EPS bearer con- ** - ** text to be deactivated ** - ** Others: _esm_data ** - ** ** - ** Outputs: pid: Identifier of the PDN connection the EPS ** - ** bearer belongs to ** - ** bid: Identifier of the released EPS bearer con- ** - ** text entry ** - ** esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate(emm_data_context_t *ctx, int is_local, - int ebi, int *pid, int *bid, - int *esm_cause) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - if (is_local) { - if (ebi != ESM_SAP_ALL_EBI) { - /* Locally release the specified EPS bearer context */ - rc = _eps_bearer_release(ctx, ebi, pid, bid); - } else if (ctx != NULL) { - /* Locally release all the EPS bearer contexts */ - *bid = 0; - - for (*pid = 0; *pid < ESM_DATA_PDN_MAX; (*pid)++) { - if (ctx->esm_data_ctx.pdn[*pid].data) { - rc = _eps_bearer_release(ctx, ESM_EBI_UNASSIGNED, - pid, bid); - - if (rc != RETURNok) { - break; - } - } - } - } - - LOG_FUNC_RETURN (rc); - } - - LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " - "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - if ((ctx != NULL) && - (*pid < ESM_DATA_PDN_MAX) ) { - if (ctx->esm_data_ctx.pdn[*pid].pid != *pid) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d " - "is not valid", *pid); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } else if (ctx->esm_data_ctx.pdn[*pid].data == NULL) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " - "allocated", *pid); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } else if (!ctx->esm_data_ctx.pdn[*pid].is_active) { - LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d is not active", - *pid); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } else { - int i; - esm_pdn_t *pdn = ctx->esm_data_ctx.pdn[*pid].data; - - *esm_cause = ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; - - for (i = 0; i < pdn->n_bearers; i++) { - if (pdn->bearer[i]->ebi != ebi) { - continue; - } - - /* The EPS bearer context to be released is valid */ - rc = RETURNok; - } - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate_request() ** - ** ** - ** Description: Initiates the EPS bearer context deactivation procedure ** - ** ** - ** 3GPP TS 24.301, section 6.4.4.2 ** - ** If a NAS signalling connection exists, the MME initiates ** - ** the EPS bearer context deactivation procedure by sending ** - ** a DEACTIVATE EPS BEARER CONTEXT REQUEST message to the ** - ** UE, starting timer T3495 and entering state BEARER CON- ** - ** TEXT INACTIVE PENDING. ** - ** ** - ** Inputs: is_standalone: Not used - Always TRUE ** - ** ueid: UE lower layer identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE (not used) ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate_request(int is_standalone, - emm_data_context_t *ctx, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO,"ESM-PROC - Initiate EPS bearer context deactivation " - "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Send deactivate EPS bearer context request message and - * start timer T3495 */ - rc = _eps_bearer_deactivate(ctx, ebi, msg); - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE PENDING */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_INACTIVE_PENDING, - ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE PENDING", - ebi); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate_accept() ** - ** ** - ** Description: Performs EPS bearer context deactivation procedure accep- ** - ** ted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.4.3 ** - ** Upon receipt of the DEACTIVATE EPS BEARER CONTEXT ACCEPT ** - ** message, the MME shall enter the state BEARER CONTEXT ** - ** INACTIVE and stop the timer T3495. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: The identifier of the PDN connection to be ** - ** released, if it exists; ** - ** RETURNerror otherwise. ** - ** Others: T3495 ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc; - int pid = RETURNerror; - - LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " - "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); - - /* Stop T3495 timer if running */ - rc = esm_ebr_stop_timer(ctx, ebi); - - if (rc != RETURNerror) { - int bid; - /* Release the EPS bearer context */ - rc = _eps_bearer_release(ctx, ebi, &pid, &bid); - - if (rc != RETURNok) { - /* Failed to release the EPS bearer context */ - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - pid = RETURNerror; - } - } - - LOG_FUNC_RETURN (pid); -} - - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _eps_bearer_deactivate_t3495_handler() ** - ** ** - ** Description: T3495 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 6.4.4.5, case a ** - ** On the first expiry of the timer T3495, the MME shall re- ** - ** send the DEACTIVATE EPS BEARER CONTEXT REQUEST and shall ** - ** reset and restart timer T3495. This retransmission is ** - ** repeated four times, i.e. on the fifth expiry of timer ** - ** T3495, the MME shall abort the procedure and deactivate ** - ** the EPS bearer context locally. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_eps_bearer_deactivate_t3495_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - /* Get retransmission timer parameters data */ - esm_ebr_timer_data_t *data = (esm_ebr_timer_data_t *)(args); - - /* Increment the retransmission counter */ - data->count += 1; - - LOG_TRACE(WARNING, "ESM-PROC - T3495 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " - "retransmission counter = %d", - data->ueid, data->ebi, data->count); - - if (data->count < EPS_BEARER_DEACTIVATE_COUNTER_MAX) { - /* Re-send deactivate EPS bearer context request message to the UE */ - rc = _eps_bearer_deactivate(data->ctx, data->ebi, &data->msg); - } else { - /* - * The maximum number of deactivate EPS bearer context request - * message retransmission has exceed - */ - int pid, bid; - /* Deactivate the EPS bearer context locally without peer-to-peer - * signalling between the UE and the MME */ - rc = _eps_bearer_release(data->ctx, data->ebi, &pid, &bid); - - if (rc != RETURNerror) { - /* Stop timer T3495 */ - rc = esm_ebr_stop_timer(data->ctx, data->ebi); - } - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _eps_bearer_deactivate() ** - ** ** - ** Description: Sends DEACTIVATE EPS BEREAR CONTEXT REQUEST message and ** - ** starts timer T3495 ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3495 ** - ** ** - ***************************************************************************/ -static int _eps_bearer_deactivate(emm_data_context_t *ctx, int ebi, - const OctetString *msg) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - /* - * Notify EMM that a deactivate EPS bearer context request message - * has to be sent to the UE - */ - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_esm->msg = *msg; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Start T3495 retransmission timer */ - rc = esm_ebr_start_timer(ctx, ebi, msg, T3495_DEFAULT_VALUE, - _eps_bearer_deactivate_t3495_handler); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _eps_bearer_release() ** - ** ** - ** Description: Releases the EPS bearer context identified by the given ** - ** EPS bearer identity and enters state INACTIVE. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: pid: Identifier of the PDN connection the EPS ** - ** bearer belongs to ** - ** bid: Identifier of the released EPS bearer con- ** - ** text entry ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _eps_bearer_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - /* Release the EPS bearer context entry */ - ebi = esm_ebr_context_release(ctx, ebi, pid, bid); - - if (ebi == ESM_EBI_UNASSIGNED) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer context"); - } else { - /* Set the EPS bearer context state to INACTIVE */ - rc = esm_ebr_set_status(ctx, ebi, ESM_EBR_INACTIVE, FALSE); - - if (rc != RETURNok) { - /* The EPS bearer context was already in INACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE", ebi); - } else { - /* Release EPS bearer data */ - rc = esm_ebr_release(ctx, ebi); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "ESM-PROC - Failed to release EPS bearer data"); - } - } - } - - LOG_FUNC_RETURN (rc); -} - diff --git a/openair-cn/NAS/MME/ESM/EsmStatusHdl.c b/openair-cn/NAS/MME/ESM/EsmStatusHdl.c deleted file mode 100644 index 6edada9f0c..0000000000 --- a/openair-cn/NAS/MME/ESM/EsmStatusHdl.c +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source EsmStatus.c - -Version 0.1 - -Date 2013/06/17 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the ESM status procedure executed by the Non-Access - Stratum. - - ESM status procedure can be related to an EPS bearer context - or to a procedure transaction. - - The purpose of the sending of the ESM STATUS message is to - report at any time certain error conditions detected upon - receipt of ESM protocol data. The ESM STATUS message can be - sent by both the MME and the UE. - -*****************************************************************************/ - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esm_cause.h" - -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: esm_proc_status_ind() ** - ** ** - ** Description: Processes received ESM status message. ** - ** ** - ** 3GPP TS 24.301, section 6.7 ** - ** Upon receiving ESM Status message the UE/MME shall take ** - ** different actions depending on the received ESM cause ** - ** value. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** esm_cause: Received ESM cause code ** - ** failure ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_status_ind( - emm_data_context_t *ctx, - int pti, int ebi, int *esm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO,"ESM-PROC - ESM status procedure requested (cause=%d)", - *esm_cause); - - LOG_TRACE(DEBUG, "ESM-PROC - To be implemented"); - - switch (*esm_cause) { - case ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY: - /* - * Abort any ongoing ESM procedure related to the received EPS - * bearer identity, stop any related timer, and deactivate the - * corresponding EPS bearer context locally - */ - /* TODO */ - rc = RETURNok; - break; - - case ESM_CAUSE_INVALID_PTI_VALUE: - /* - * Abort any ongoing ESM procedure related to the received PTI - * value and stop any related timer - */ - /* TODO */ - rc = RETURNok; - break; - - case ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED: - /* - * Abort any ongoing ESM procedure related to the PTI or - * EPS bearer identity and stop any related timer - */ - /* TODO */ - rc = RETURNok; - break; - - default: - /* - * No state transition and no specific action shall be taken; - * local actions are possible - */ - /* TODO */ - rc = RETURNok; - break; - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_status() ** - ** ** - ** Description: Initiates ESM status procedure. ** - ** ** - ** Inputs: is_standalone: Not used - Always TRUE ** - ** ueid: UE lower layer identifier ** - ** ebi: Not used ** - ** msg: Encoded ESM status message to be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_status(int is_standalone, - emm_data_context_t *ctx, - int ebi, OctetString *msg, - int ue_triggered) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - - LOG_TRACE(INFO,"ESM-PROC - ESM status procedure requested"); - - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ diff --git a/openair-cn/NAS/MME/ESM/Makefile b/openair-cn/NAS/MME/ESM/Makefile deleted file mode 100644 index eda83656ac..0000000000 --- a/openair-cn/NAS/MME/ESM/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/../.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(IESDIR) -I$(MMEAPIDIR) \ - -I$(EMMSAPDIR) -I$(ESMSAPDIR) -I$(ESMMSGDIR) -I$(EMMDIR) - -all: $(OBJS) - @$(CD) $(ESMMSGDIR) && $(MAKE) - @$(CD) $(ESMSAPDIR) && $(MAKE) - -clean: - $(RM) $(OBJS) *.bak *~ - @$(CD) $(ESMSAPDIR) && $(MAKE) $@ - -veryclean: clean - @$(CD) $(ESMSAPDIR) && $(MAKE) $@ - @$(CD) $(ESMMSGDIR) && $(MAKE) $@ - $(RM) $(TARGET) - -%.o: %.c Makefile $(PROJDIR)/Makerules $(PROJDIR)/Makefile.inc - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/openair-cn/NAS/MME/ESM/PdnConnectivity.c b/openair-cn/NAS/MME/ESM/PdnConnectivity.c deleted file mode 100644 index e2eda77bed..0000000000 --- a/openair-cn/NAS/MME/ESM/PdnConnectivity.c +++ /dev/null @@ -1,556 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source PdnConnectivity.c - -Version 0.1 - -Date 2013/01/02 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the PDN connectivity ESM procedure executed by the - Non-Access Stratum. - - The PDN connectivity procedure is used by the UE to request - the setup of a default EPS bearer to a PDN. - - The procedure is used either to establish the 1st default - bearer by including the PDN CONNECTIVITY REQUEST message - into the initial attach message, or to establish subsequent - default bearers to additional PDNs in order to allow the UE - simultaneous access to multiple PDNs by sending the message - stand-alone. - -*****************************************************************************/ - -#include // malloc, free -#include // memset, memcpy, memcmp -#include // isprint - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esmData.h" -#include "esm_cause.h" -#include "esm_pt.h" - -# include "mme_api.h" - -#include "emm_sap.h" - -#if defined(ENABLE_ITTI) -# include "assertions.h" -#endif - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the PDN connectivity procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * PDN connection handlers - */ -static int _pdn_connectivity_create(emm_data_context_t *ctx, - int pti, - const OctetString *apn, - esm_proc_pdn_type_t pdn_type, - const OctetString *pdn_addr, - int is_emergency); -int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * PDN connectivity procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_request() ** - ** ** - ** Description: Performs PDN connectivity procedure requested by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.1.3 ** - ** Upon receipt of the PDN CONNECTIVITY REQUEST message, the ** - ** MME checks if connectivity with the requested PDN can be ** - ** established. If no requested APN is provided the MME ** - ** shall use the default APN as the requested APN if the ** - ** request type is different from "emergency", or the APN ** - ** configured for emergency bearer services if the request ** - ** type is "emergency". ** - ** If connectivity with the requested PDN is accepted by the ** - ** network, the MME shall initiate the default EPS bearer ** - ** context activation procedure. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Identifies the PDN connectivity procedure ** - ** requested by the UE ** - ** request_type: Type of the PDN request ** - ** pdn_type: PDN type value (IPv4, IPv6, IPv4v6) ** - ** apn: Requested Access Point Name ** - ** Others: _esm_data ** - ** ** - ** Outputs: apn: Default Access Point Name ** - ** pdn_addr: Assigned IPv4 address and/or IPv6 suffix ** - ** esm_qos: EPS bearer level QoS parameters ** - ** esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: The identifier of the PDN connection if ** - ** successfully created; ** - ** RETURNerror otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, - esm_proc_pdn_request_t request_type, - OctetString *apn, - esm_proc_pdn_type_t pdn_type, - OctetString *pdn_addr, - esm_proc_qos_t *esm_qos, - int *esm_cause) -{ - int rc = RETURNerror; - int pid = RETURNerror; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN connectivity requested by the UE " - "(ueid="NAS_UE_ID_FMT", pti=%d) PDN type = %s, APN = %s pdn addr = %s", ctx->ueid, pti, - (pdn_type == ESM_PDN_TYPE_IPV4)? "IPv4" : - (pdn_type == ESM_PDN_TYPE_IPV6)? "IPv6" : "IPv4v6", - (apn) ? (char *)(apn->value) : "null", - (pdn_addr) ? (char *)(pdn_addr->value) : "null"); - -#if !defined(NAS_BUILT_IN_EPC) - - /* UE identifier sanity check */ - if (ctx->ueid >= ESM_DATA_NB_UE_MAX) { - LOG_TRACE(WARNING, "ESM-PROC - Number of connected UEs exceeded"); - LOG_FUNC_RETURN (RETURNerror); - } - -#endif - - /* - * Check network IP capabilities - */ - *esm_cause = ESM_CAUSE_SUCCESS; - LOG_TRACE(INFO, "ESM-PROC - _esm_data.conf.features %08x", _esm_data.conf.features); -#warning "Uncomment code about _esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6) later" -#if defined(ORIGINAL_CODE) - - switch (_esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6)) { - case (MME_API_IPV4 | MME_API_IPV6): - - /* The network supports both IPv4 and IPv6 connection */ - if ( (pdn_type == ESM_PDN_TYPE_IPV4V6) && - (_esm_data.conf.features & MME_API_SINGLE_ADDR_BEARERS) ) { - /* The network supports single IP version bearers only */ - *esm_cause = ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED; - } - - rc = RETURNok; - break; - - case MME_API_IPV6: - /* The network supports connection to IPv6 only */ - *esm_cause = ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; - - if (pdn_type != ESM_PDN_TYPE_IPV4) { - rc = RETURNok; - } - - break; - - case MME_API_IPV4: - /* The network supports connection to IPv4 only */ - *esm_cause = ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; - - if (pdn_type != ESM_PDN_TYPE_IPV6) { - rc = RETURNok; - } - - break; - - default: - LOG_TRACE(ERROR, - "ESM-PROC - _esm_data.conf.features incorrect value (no IPV4 or IPV6 ) %X", - _esm_data.conf.features); - } - -#else - rc = RETURNok; -#endif - - if (rc != RETURNerror) { - int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); -#if defined(ORIGINAL_CODE) - mme_api_ip_version_t mme_pdn_index; - mme_api_qos_t qos; - - switch (pdn_type) { - case ESM_PDN_TYPE_IPV4: - mme_pdn_index = MME_API_IPV4_ADDR; - break; - - case ESM_PDN_TYPE_IPV6: - mme_pdn_index = MME_API_IPV6_ADDR; - break; - - case ESM_PDN_TYPE_IPV4V6: - default: - mme_pdn_index = MME_API_IPV4V6_ADDR; - break; - } - - /* Check if connectivity with the requested PDN can be established */ - rc = mme_api_subscribe(apn, mme_pdn_index, pdn_addr, is_emergency, &qos); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN " - "cannot be established"); - *esm_cause = ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED; - LOG_FUNC_RETURN (RETURNerror); - } - -#endif - - /* Create new PDN connection */ - pid = _pdn_connectivity_create(ctx, pti, apn, pdn_type, - pdn_addr, is_emergency); -#if defined(ORIGINAL_CODE) - - /* Setup ESM QoS parameters */ - if (esm_qos) { - esm_qos->gbrUL = qos.gbr[MME_API_UPLINK]; - esm_qos->gbrDL = qos.gbr[MME_API_DOWNLINK]; - esm_qos->mbrUL = qos.mbr[MME_API_UPLINK]; - esm_qos->mbrDL = qos.mbr[MME_API_DOWNLINK]; - esm_qos->qci = qos.qci; - } - -#endif - - if (pid < 0) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to create PDN connection"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN(RETURNerror); - } - } - - LOG_FUNC_RETURN(pid); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_reject() ** - ** ** - ** Description: Performs PDN connectivity procedure not accepted by the ** - ** network. ** - ** ** - ** 3GPP TS 24.301, section 6.5.1.4 ** - ** If connectivity with the requested PDN cannot be accepted ** - ** by the network, the MME shall send a PDN CONNECTIVITY RE- ** - ** JECT message to the UE. ** - ** ** - ** Inputs: is_standalone: Indicates whether the PDN connectivity ** - ** procedure was initiated as part of the at- ** - ** tach procedure ** - ** ueid: UE lower layer identifier ** - ** ebi: Not used ** - ** msg: Encoded PDN connectivity reject message to ** - ** be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity not accepted by the " - "network (ueid="NAS_UE_ID_FMT")", ctx->ueid); - - if (is_standalone) { - emm_sap_t emm_sap; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ctx = ctx; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } - - /* If the PDN connectivity procedure initiated as part of the initial - * attach procedure has failed, an error is returned to notify EMM that - * the ESM sublayer did not accept UE requested PDN connectivity */ - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_failure() ** - ** ** - ** Description: Performs PDN connectivity procedure upon receiving noti- ** - ** fication from the EPS Mobility Management sublayer that ** - ** EMM procedure that initiated PDN connectivity activation ** - ** locally failed. ** - ** ** - ** The MME releases the PDN connection entry allocated when ** - ** the PDN connectivity procedure was requested by the UE. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_failure(emm_data_context_t *ctx, int pid) -{ - int pti; - - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity failure (ueid="NAS_UE_ID_FMT", pid=%d)", - ctx->ueid, pid); - - /* Delete the PDN connection entry */ - pti = _pdn_connectivity_delete(ctx, pid); - - if (pti != ESM_PT_UNASSIGNED) { - LOG_FUNC_RETURN (RETURNok); - } - - LOG_FUNC_RETURN (RETURNerror); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - -/* - *--------------------------------------------------------------------------- - * PDN connection handlers - *--------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _pdn_connectivity_create() ** - ** ** - ** Description: Creates a new PDN connection entry for the specified UE ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ctx: UE context ** - ** pti: Procedure transaction identity ** - ** apn: Access Point Name of the PDN connection ** - ** pdn_type: PDN type (IPv4, IPv6, IPv4v6) ** - ** pdn_addr: Network allocated PDN IPv4 or IPv6 address ** - ** is_emergency: TRUE if the PDN connection has to be esta- ** - ** blished for emergency bearer services ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identifier of the PDN connection if ** - ** successfully created; -1 otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -static int _pdn_connectivity_create(emm_data_context_t *ctx, - int pti, - const OctetString *apn, - esm_proc_pdn_type_t pdn_type, - const OctetString *pdn_addr, - int is_emergency) -{ - int pid = ESM_DATA_PDN_MAX; - - LOG_TRACE(INFO, "ESM-PROC - Create new PDN connection " - "(pti=%d) APN = %s, IP address = %s (ueid="NAS_UE_ID_FMT")", pti, apn->value, - (pdn_type == ESM_PDN_TYPE_IPV4)? esm_data_get_ipv4_addr(pdn_addr) : - (pdn_type == ESM_PDN_TYPE_IPV6)? esm_data_get_ipv6_addr(pdn_addr) : - esm_data_get_ipv4v6_addr(pdn_addr), ctx->ueid); - - /* Search for an available PDN connection entry */ - for (pid = 0; pid < ESM_DATA_PDN_MAX; pid++) { - if (ctx->esm_data_ctx.pdn[pid].data != NULL) { - continue; - } - - break; - } - - if (pid < ESM_DATA_PDN_MAX) { - /* Create new PDN connection */ - esm_pdn_t *pdn = (esm_pdn_t *)malloc(sizeof(esm_pdn_t)); - - if (pdn != NULL) { - memset(pdn, 0, sizeof(esm_pdn_t)); - /* Increment the number of PDN connections */ - ctx->esm_data_ctx.n_pdns += 1; - /* Set the PDN connection identifier */ - ctx->esm_data_ctx.pdn[pid].pid = pid; - /* Reset the PDN connection active indicator */ - ctx->esm_data_ctx.pdn[pid].is_active = FALSE; - /* Setup the PDN connection data */ - ctx->esm_data_ctx.pdn[pid].data = pdn; - - /* Set the procedure transaction identity */ - pdn->pti = pti; - /* Set the emergency bearer services indicator */ - pdn->is_emergency = is_emergency; - - /* Setup the Access Point Name */ - if ( apn && (apn->length > 0) ) { - pdn->apn.value = (uint8_t *)malloc(apn->length + 1); - - if (pdn->apn.value) { - pdn->apn.length = apn->length; - memcpy(pdn->apn.value, apn->value, apn->length); - pdn->apn.value[pdn->apn.length] = '\0'; - } - } - - /* Setup the IP address allocated by the network */ - if ( pdn_addr && (pdn_addr->length > 0) ) { - int length = - ((pdn_addr->length < ESM_DATA_IP_ADDRESS_SIZE) ? - pdn_addr->length : ESM_DATA_IP_ADDRESS_SIZE); - memcpy(pdn->ip_addr, pdn_addr->value, length); - pdn->type = pdn_type; - } - - /* Return the identifier of the new PDN connection */ - return (ctx->esm_data_ctx.pdn[pid].pid); - } - - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new PDN connection " - "(pid=%d)", pid); - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: _pdn_connectivity_delete() ** - ** ** - ** Description: Deletes PDN connection to the specified UE associated to ** - ** PDN connection entry with given identifier ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identity of the procedure transaction ** - ** assigned to the PDN connection when suc- ** - ** cessfully released; ** - ** UNASSIGNED value otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid) -{ - int pti = ESM_PT_UNASSIGNED; - - if (ctx == NULL) { - return pti; - } - - if (pid < ESM_DATA_PDN_MAX) { - if (pid != ctx->esm_data_ctx.pdn[pid].pid) { - LOG_TRACE(ERROR, - "ESM-PROC - PDN connection identifier is not valid"); - } else if (ctx->esm_data_ctx.pdn[pid].data == NULL) { - LOG_TRACE(ERROR, - "ESM-PROC - PDN connection has not been allocated"); - } else if (ctx->esm_data_ctx.pdn[pid].is_active) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection is active"); - } else { - /* Get the identity of the procedure transaction that created - * the PDN connection */ - pti = ctx->esm_data_ctx.pdn[pid].data->pti; - } - } - - if (pti != ESM_PT_UNASSIGNED) { - /* Decrement the number of PDN connections */ - ctx->esm_data_ctx.n_pdns -= 1; - /* Set the PDN connection as available */ - ctx->esm_data_ctx.pdn[pid].pid = -1; - - /* Release allocated PDN connection data */ - if (ctx->esm_data_ctx.pdn[pid].data->apn.length > 0) { - free(ctx->esm_data_ctx.pdn[pid].data->apn.value); - } - - free(ctx->esm_data_ctx.pdn[pid].data); - ctx->esm_data_ctx.pdn[pid].data = NULL; - LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d released", pid); - } - - /* Return the procedure transaction identity */ - return (pti); -} diff --git a/openair-cn/NAS/MME/ESM/PdnDisconnect.c b/openair-cn/NAS/MME/ESM/PdnDisconnect.c deleted file mode 100644 index 9dfcbd66fb..0000000000 --- a/openair-cn/NAS/MME/ESM/PdnDisconnect.c +++ /dev/null @@ -1,299 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source PdnDisconnect.c - -Version 0.1 - -Date 2013/05/15 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the PDN disconnect ESM procedure executed by the - Non-Access Stratum. - - The PDN disconnect procedure is used by the UE to request - disconnection from one PDN. - - All EPS bearer contexts established towards this PDN, inclu- - ding the default EPS bearer context, are released. - -*****************************************************************************/ - -#include "esm_proc.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esmData.h" -#include "esm_cause.h" -#include "esm_pt.h" -#include "emm_sap.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -extern int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the PDN disconnect procedure in the MME - * -------------------------------------------------------------------------- - */ -/* - * PDN disconnection handlers - */ -static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti); - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - - -/* - * -------------------------------------------------------------------------- - * PDN disconnect procedure executed by the MME - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_request() ** - ** ** - ** Description: Performs PDN disconnect procedure requested by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.3 ** - ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** - ** is accepted by the network, the MME shall initiate the ** - ** bearer context deactivation procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** pti: Identifies the PDN disconnect procedure ** - ** requested by the UE ** - ** Others: _esm_data ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: The identifier of the PDN connection to be ** - ** released, if it exists; ** - ** RETURNerror otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int *esm_cause) -{ - int pid = RETURNerror; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN disconnect requested by the UE " - "(ueid="NAS_UE_ID_FMT", pti=%d)", ctx->ueid, pti); - - /* Get UE's ESM context */ - if (ctx->esm_data_ctx.n_pdns > 1) { - /* Get the identifier of the PDN connection entry assigned to the - * procedure transaction identity */ - pid = _pdn_disconnect_get_pid(&ctx->esm_data_ctx, pti); - - if (pid < 0) { - LOG_TRACE(ERROR, "ESM-PROC - No PDN connection found (pti=%d)", - pti); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (RETURNerror); - } - } else { - /* Attempt to disconnect from the last PDN disconnection - * is not allowed */ - *esm_cause = ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED; - } - - LOG_FUNC_RETURN(pid); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_accept() ** - ** ** - ** Description: Performs PDN disconnect procedure accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.3 ** - ** On reception of DEACTIVATE EPS BEARER CONTEXT ACCEPT mes- ** - ** sage from the UE, the MME releases all the resources re- ** - ** served for the PDN in the network. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: _esm_data ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_accept(emm_data_context_t *ctx, int pid, int *esm_cause) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN disconnect accepted by the UE " - "(ueid="NAS_UE_ID_FMT", pid=%d)", ctx->ueid, pid); - - /* Release the connectivity with the requested PDN */ - int rc = mme_api_unsubscribe(NULL); - - if (rc != RETURNerror) { - /* Delete the PDN connection entry */ - int pti = _pdn_connectivity_delete(ctx, pid); - - if (pti != ESM_PT_UNASSIGNED) { - LOG_FUNC_RETURN (RETURNok); - } - } - - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_reject() ** - ** ** - ** Description: Performs PDN disconnect procedure not accepted by the ** - ** network. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.4 ** - ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** - ** is not accepted by the network, the MME shall send a PDN ** - ** DISCONNECT REJECT message to the UE. ** - ** ** - ** Inputs: is_standalone: Not used - Always TRUE ** - ** ueid: UE lower layer identifier ** - ** ebi: Not used ** - ** msg: Encoded PDN disconnect reject message to ** - ** be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - - LOG_TRACE(WARNING, "ESM-PROC - PDN disconnect not accepted by the network " - "(ueid="NAS_UE_ID_FMT")", ctx->ueid); - - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - - -/* - *--------------------------------------------------------------------------- - * PDN disconnection handlers - *--------------------------------------------------------------------------- - */ - - -/**************************************************************************** - ** ** - ** Name: _pdn_disconnect_get_pid() ** - ** ** - ** Description: Returns the identifier of the PDN connection to which the ** - ** given procedure transaction identity has been assigned ** - ** to establish connectivity to the specified UE ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: The procedure transaction identity ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identifier of the PDN connection if ** - ** found in the list; -1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti) -{ - int i = ESM_DATA_PDN_MAX; - - if (ctx != NULL) { - for (i = 0; i < ESM_DATA_PDN_MAX; i++) { - if ( (ctx->pdn[i].pid != -1) && - (ctx->pdn[i].data != NULL) ) { - if (ctx->pdn[i].data->pti != pti) { - continue; - } - - /* PDN entry found */ - break; - } - } - } - - /* Return the identifier of the PDN connection */ - return (ctx->pdn[i].pid); -} diff --git a/openair-cn/NAS/MME/ESM/SAP/COPYING b/openair-cn/NAS/MME/ESM/SAP/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/MME/ESM/SAP/Makefile b/openair-cn/NAS/MME/ESM/SAP/Makefile deleted file mode 100644 index 18bae24927..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/../../.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(ESMDIR) \ - -I$(IESDIR) -I$(ESMMSGDIR) -I$(EMMDIR) -I$(MMEAPIDIR) -I$(EMMSAPDIR) - -TARGET = $(LIBESMSAP) -TARGETS = $(TARGET).a $(TARGET).so - -all: $(TARGETS) - -%.o: %.c Makefile $(PROJDIR)/Makerules $(PROJDIR)/Makefile.inc - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -$(TARGET).a: $(OBJS) - @$(RM) $@ - @$(AR) $(ARFLAGS) $@ $(OBJS) - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -$(TARGET).so: $(OBJS) - @$(LD) -G -o $@ $(OBJS) - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -clean: - $(RM) $(OBJS) *.bak *~ - -veryclean: clean - $(RM) $(TARGETS) - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_recv.c b/openair-cn/NAS/MME/ESM/SAP/esm_recv.c deleted file mode 100644 index 1114178154..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_recv.c +++ /dev/null @@ -1,713 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_recv.c - -Version 0.1 - -Date 2013/02/06 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions executed at the ESM Service Access - Point upon receiving EPS Session Management messages - from the EPS Mobility Management sublayer. - -*****************************************************************************/ - -#include "esm_recv.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "esm_pt.h" -#include "esm_ebr.h" -#include "esm_proc.h" - -#include "esm_cause.h" -#include "nas_itti_messaging.h" - - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME upon receiving ESM messages - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_recv_status() ** - ** ** - ** Description: Processes ESM status message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ - -int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, - const esm_status_msg *msg) -{ - int esm_cause; - int rc; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-SAP - Received ESM status message (pti=%d, ebi=%d)", - pti, ebi); - - /* - * Message processing - */ - /* Get the ESM cause */ - esm_cause = msg->esmcause; - - /* Execute the ESM status procedure */ - rc = esm_proc_status_ind(ctx, pti, ebi, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME upon receiving ESM message from the UE - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_recv_pdn_connectivity_request() ** - ** ** - ** Description: Processes PDN connectivity request message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: new_ebi: New assigned EPS bearer identity ** - ** data: PDN connection and EPS bearer context data ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_pdn_connectivity_request(emm_data_context_t *ctx, int pti, int ebi, - const pdn_connectivity_request_msg *msg, - unsigned int *new_ebi, void *data) -{ - int esm_cause = ESM_CAUSE_SUCCESS; - uint8_t i; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-SAP - Received PDN Connectivity Request message " - "(ueid=%u, pti=%d, ebi=%d)", ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case a - * Reserved or unassigned PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( ebi != ESM_EBI_UNASSIGNED ) { - /* 3GPP TS 24.301, section 7.3.2, case a - * Reserved or assigned EPS bearer identity value */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Get PDN connection and EPS bearer context data structure to setup */ - esm_proc_data_t *esm_data = (esm_proc_data_t *)(data); - - if (data == NULL) { - LOG_TRACE(ERROR, "ESM-SAP - Invalid ESM data structure"); - LOG_FUNC_RETURN (ESM_CAUSE_PROTOCOL_ERROR); - } - - /* Get the PDN connectivity request type */ - int request_type = -1; - - if (msg->requesttype == REQUEST_TYPE_INITIAL_REQUEST) { - request_type = ESM_PDN_REQUEST_INITIAL; - } else if (msg->requesttype == REQUEST_TYPE_HANDOVER) { - request_type = ESM_PDN_REQUEST_HANDOVER; - } else if (msg->requesttype == REQUEST_TYPE_EMERGENCY) { - request_type = ESM_PDN_REQUEST_EMERGENCY; - } else { - /* Unkown PDN request type */ - LOG_TRACE(ERROR, "ESM-SAP - Invalid PDN request type"); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_MANDATORY_INFO); - } - - /* Get the value of the PDN type indicator */ - if (msg->pdntype == PDN_TYPE_IPV4) { - esm_data->pdn_type = ESM_PDN_TYPE_IPV4; - } else if (msg->pdntype == PDN_TYPE_IPV6) { - esm_data->pdn_type = ESM_PDN_TYPE_IPV6; - } else if (msg->pdntype == PDN_TYPE_IPV4V6) { - esm_data->pdn_type = ESM_PDN_TYPE_IPV4V6; - } else { - /* Unkown PDN type */ - LOG_TRACE(ERROR, "ESM-SAP - Invalid PDN type"); - LOG_FUNC_RETURN (ESM_CAUSE_UNKNOWN_PDN_TYPE); - } - - /* Get the Access Point Name, if provided */ - if (msg->presencemask & PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT) { - esm_data->apn = msg->accesspointname.accesspointnamevalue; - } - - /* Get the ESM information transfer flag */ - if (msg->presencemask & - PDN_CONNECTIVITY_REQUEST_ESM_INFORMATION_TRANSFER_FLAG_PRESENT) { - /* 3GPP TS 24.301, sections 6.5.1.2, 6.5.1.3 - * ESM information, i.e. protocol configuration options, APN, or both, - * has to be sent after the NAS signalling security has been activated - * between the UE and the MME. - * - * The MME then at a later stage in the PDN connectivity procedure - * initiates the ESM information request procedure in which the UE - * can provide the MME with protocol configuration options or APN - * or both. - * The MME waits for completion of the ESM information request - * procedure before proceeding with the PDN connectivity procedure. - */ - //TODO: rc = esm_proc_information_request(); - } - esm_data->pco = msg->protocolconfigurationoptions; - for (i = 0; i < msg->protocolconfigurationoptions.num_protocol_id_or_container_id; i++) { - DUP_OCTET_STRING(msg->protocolconfigurationoptions.protocolidcontents[i], esm_data->pco.protocolidcontents[i]); - esm_data->pco.protocolid[i] = msg->protocolconfigurationoptions.protocolid[i]; - esm_data->pco.lengthofprotocolid[i] = msg->protocolconfigurationoptions.lengthofprotocolid[i]; - } - - -#if defined(ORIGINAL_CODE) - /* Execute the PDN connectivity procedure requested by the UE */ - int pid = esm_proc_pdn_connectivity_request(ctx, pti, request_type, - &esm_data->apn, - esm_data->pdn_type, - &esm_data->pdn_addr, - &esm_data->qos, - &esm_cause); - - if (pid != RETURNerror) { - /* Create local default EPS bearer context */ - int rc = esm_proc_default_eps_bearer_context(ctx, pid, new_ebi, - &esm_data->qos, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } - -#else - int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); - - nas_itti_pdn_connectivity_req( - pti, - ctx->ueid, - ctx->imsi, - esm_data, - request_type); - esm_cause = ESM_CAUSE_SUCCESS; -#endif - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_pdn_disconnect_request() ** - ** ** - ** Description: Processes PDN disconnect request message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: linked_ebi: Linked EPS bearer identity of the default ** - ** bearer associated with the PDN to discon- ** - ** nect from ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int ebi, - const pdn_disconnect_request_msg *msg, - unsigned int *linked_ebi) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received PDN Disconnect Request message " - "(ueid=%d, pti=%d, ebi=%d)", ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case b - * Reserved or unassigned PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( ebi != ESM_EBI_UNASSIGNED ) { - /* 3GPP TS 24.301, section 7.3.2, case b - * Reserved or assigned EPS bearer identity value */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the PDN disconnect procedure requested by the UE */ - int pid = esm_proc_pdn_disconnect_request(ctx, pti, &esm_cause); - - if (pid != RETURNerror) { - /* Get the identity of the default EPS bearer context assigned to - * the PDN connection to disconnect from */ - *linked_ebi = msg->linkedepsbeareridentity; - /* Release the associated default EPS bearer context */ - int bid = 0; - int rc = esm_proc_eps_bearer_context_deactivate(ctx, FALSE, - *linked_ebi, - &pid, &bid, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_default_eps_bearer_context_accept() ** - ** ** - ** Description: Processes Activate Default EPS Bearer Context Accept ** - ** message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_default_eps_bearer_context_accept(emm_data_context_t *ctx, - int pti, int ebi, - const activate_default_eps_bearer_context_accept_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Default EPS Bearer Context " - "Accept message (ueid=%d, pti=%d, ebi=%d)", ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if (esm_pt_is_reserved(pti)) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( esm_ebr_is_reserved(ebi) || esm_ebr_is_not_in_use(ctx, ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case f - * Reserved or assigned value that does not match an existing EPS - * bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the default EPS bearer context activation procedure accepted - * by the UE */ - int rc = esm_proc_default_eps_bearer_context_accept(ctx, ebi, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_default_eps_bearer_context_reject() ** - ** ** - ** Description: Processes Activate Default EPS Bearer Context Reject ** - ** message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fail ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_default_eps_bearer_context_reject(emm_data_context_t *ctx, - int pti, int ebi, - const activate_default_eps_bearer_context_reject_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Default EPS Bearer Context " - "Reject message (ueid=%d, pti=%d, ebi=%d)", ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if (esm_pt_is_reserved(pti)) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( esm_ebr_is_reserved(ebi) || esm_ebr_is_not_in_use(ctx, ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case f - * Reserved or assigned value that does not match an existing EPS - * bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the default EPS bearer context activation procedure not accepted - * by the UE */ - int rc = esm_proc_default_eps_bearer_context_reject(ctx, ebi, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_dedicated_eps_bearer_context_accept() ** - ** ** - ** Description: Processes Activate Dedicated EPS Bearer Context Accept ** - ** message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, - int pti, int ebi, - const activate_dedicated_eps_bearer_context_accept_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Dedicated EPS Bearer " - "Context Accept message (ueid=%d, pti=%d, ebi=%d)", - ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if (esm_pt_is_reserved(pti)) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( esm_ebr_is_reserved(ebi) || esm_ebr_is_not_in_use(ctx, ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case f - * Reserved or assigned value that does not match an existing EPS - * bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the dedicated EPS bearer context activation procedure accepted - * by the UE */ - int rc = esm_proc_dedicated_eps_bearer_context_accept(ctx, ebi, - &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_dedicated_eps_bearer_context_reject() ** - ** ** - ** Description: Processes Activate Dedicated EPS Bearer Context Reject ** - ** message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fail ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, - int pti, int ebi, - const activate_dedicated_eps_bearer_context_reject_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Dedicated EPS Bearer " - "Context Reject message (ueid=%d, pti=%d, ebi=%d)", - ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if (esm_pt_is_reserved(pti)) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( esm_ebr_is_reserved(ebi) || esm_ebr_is_not_in_use(ctx, ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case f - * Reserved or assigned value that does not match an existing EPS - * bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the dedicated EPS bearer context activation procedure not - * accepted by the UE */ - int rc = esm_proc_dedicated_eps_bearer_context_reject(ctx, ebi, - &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_deactivate_eps_bearer_context_accept() ** - ** ** - ** Description: Processes Deactivate EPS Bearer Context Accept message ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_deactivate_eps_bearer_context_accept(emm_data_context_t *ctx, - int pti, int ebi, - const deactivate_eps_bearer_context_accept_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Deactivate EPS Bearer Context " - "Accept message (ueid=%d, pti=%d, ebi=%d)", ctx->ueid, pti, ebi); - - /* - * Procedure transaction identity checking - */ - if (esm_pt_is_reserved(pti)) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } - /* - * EPS bearer identity checking - */ - else if ( esm_ebr_is_reserved(ebi) || esm_ebr_is_not_in_use(ctx, ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case f - * Reserved or assigned value that does not match an existing EPS - * bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Execute the default EPS bearer context activation procedure accepted - * by the UE */ - int pid = esm_proc_eps_bearer_context_deactivate_accept(ctx, ebi, - &esm_cause); - - if (pid != RETURNerror) { - /* Release all the resources reserved for the PDN */ - int rc = esm_proc_pdn_disconnect_accept(ctx, pid, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_recv.h b/openair-cn/NAS/MME/ESM/SAP/esm_recv.h deleted file mode 100644 index 6883d61885..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_recv.h +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_recv.h - -Version 0.1 - -Date 2013/02/06 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions executed at the ESM Service Access - Point upon receiving EPS Session Management messages - from the EPS Mobility Management sublayer. - -*****************************************************************************/ -#ifndef __ESM_RECV_H__ -#define __ESM_RECV_H__ - -#include "EsmStatus.h" -#include "emmData.h" - - -#include "PdnConnectivityRequest.h" -#include "PdnDisconnectRequest.h" -#include "BearerResourceAllocationRequest.h" -#include "BearerResourceModificationRequest.h" - -#include "ActivateDefaultEpsBearerContextAccept.h" -#include "ActivateDefaultEpsBearerContextReject.h" -#include "ActivateDedicatedEpsBearerContextAccept.h" -#include "ActivateDedicatedEpsBearerContextReject.h" -#include "ModifyEpsBearerContextAccept.h" -#include "ModifyEpsBearerContextReject.h" -#include "DeactivateEpsBearerContextAccept.h" - -#include "EsmInformationResponse.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME upon receiving ESM messages - * -------------------------------------------------------------------------- - */ - -int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, - const esm_status_msg *msg); - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME upon receiving ESM message from the UE - * -------------------------------------------------------------------------- - */ -/* - * Transaction related messages - * ---------------------------- - */ -int esm_recv_pdn_connectivity_request(emm_data_context_t *ctx, int pti, int ebi, - const pdn_connectivity_request_msg *msg, unsigned int *new_ebi, void *data); - -int esm_recv_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int ebi, - const pdn_disconnect_request_msg *msg, - unsigned int *linked_ebi); - -/* - * Messages related to EPS bearer contexts - * --------------------------------------- - */ -int esm_recv_activate_default_eps_bearer_context_accept(emm_data_context_t *ctx, - int pti, int ebi, const activate_default_eps_bearer_context_accept_msg *msg); - -int esm_recv_activate_default_eps_bearer_context_reject(emm_data_context_t *ctx, - int pti, int ebi, const activate_default_eps_bearer_context_reject_msg *msg); - -int esm_recv_activate_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, - int pti, int ebi, const activate_dedicated_eps_bearer_context_accept_msg *msg); - -int esm_recv_activate_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, - int pti, int ebi, const activate_dedicated_eps_bearer_context_reject_msg *msg); - -int esm_recv_deactivate_eps_bearer_context_accept(emm_data_context_t *ctx, int pti, - int ebi, const deactivate_eps_bearer_context_accept_msg *msg); - -#endif /* __ESM_RECV_H__*/ diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_sap.c b/openair-cn/NAS/MME/ESM/SAP/esm_sap.c deleted file mode 100644 index 9c2d07c2c5..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_sap.c +++ /dev/null @@ -1,799 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_sap.c - -Version 0.1 - -Date 2012/11/22 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the ESM Service Access Points at which the EPS - Session Management sublayer provides procedures for the - EPS bearer context handling and resources allocation. - -*****************************************************************************/ - -#include "esm_sap.h" -#include "esm_recv.h" -#include "esm_send.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "OctetString.h" -#include "TLVDecoder.h" -#include "esm_msgDef.h" -#include "esm_msg.h" - -#include "esm_cause.h" -#include "esm_proc.h" - -#include // memset, strlen -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -static int _esm_sap_recv(int msg_type, int is_standalone, emm_data_context_t *ctx, - const OctetString *req, OctetString *rsp, esm_sap_error_t *err); -static int _esm_sap_send(int msg_type, int is_standalone, emm_data_context_t *ctx, - int pti, int ebi, const esm_sap_data_t *data, OctetString *rsp); - -/* - * String representation of ESM-SAP primitives - */ -static const char *_esm_sap_primitive_str[] = { - "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ", - "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF", - "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ", - "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ", - "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF", - "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ", - "ESM_EPS_BEARER_CONTEXT_MODIFY_REQ", - "ESM_EPS_BEARER_CONTEXT_MODIFY_CNF", - "ESM_EPS_BEARER_CONTEXT_MODIFY_REJ", - "ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ", - "ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF", - "ESM_PDN_CONNECTIVITY_REQ", - "ESM_PDN_CONNECTIVITY_REJ", - "ESM_PDN_DISCONNECT_REQ", - "ESM_PDN_DISCONNECT_REJ", - "ESM_BEARER_RESOURCE_ALLOCATE_REQ", - "ESM_BEARER_RESOURCE_ALLOCATE_REJ", - "ESM_BEARER_RESOURCE_MODIFY_REQ", - "ESM_BEARER_RESOURCE_MODIFY_REJ", - "ESM_UNITDATA_IND", -}; - -/* - * Buffer used to encode ESM messages before being returned to the EPS - * Mobility Management sublayer in order to be sent onto the network - */ -#define ESM_SAP_BUFFER_SIZE 4096 -static char _esm_sap_buffer[ESM_SAP_BUFFER_SIZE]; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: esm_sap_initialize() ** - ** ** - ** Description: Initializes the ESM Service Access Point state machine ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: NONE ** - ** ** - ***************************************************************************/ -void esm_sap_initialize(void) -{ - LOG_FUNC_IN; - - /* Initialize ESM state machine */ - //esm_fsm_initialize(); - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: esm_sap_send() ** - ** ** - ** Description: Processes the ESM Service Access Point primitive ** - ** ** - ** Inputs: msg: The ESM-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_sap_send(esm_sap_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - int pid; - - /* Check the ESM-SAP primitive */ - esm_primitive_t primitive = msg->primitive; - assert( (primitive > ESM_START) && (primitive < ESM_END)); - - LOG_TRACE(INFO, "ESM-SAP - Received primitive %s (%d)", - _esm_sap_primitive_str[primitive - ESM_START - 1], primitive); - - switch (primitive) { - case ESM_PDN_CONNECTIVITY_REQ: - - /* The MME received a PDN connectivity request message */ - rc = _esm_sap_recv(PDN_CONNECTIVITY_REQUEST, msg->is_standalone, - msg->ctx, msg->recv, &msg->send, &msg->err); - break; - - case ESM_PDN_CONNECTIVITY_REJ: - /* PDN connectivity locally failed */ - pid = esm_proc_default_eps_bearer_context_failure(msg->ctx); - - if (pid != RETURNerror) { - rc = esm_proc_pdn_connectivity_failure(msg->ctx, pid); - } - break; - - case ESM_PDN_DISCONNECT_REQ: - break; - - case ESM_PDN_DISCONNECT_REJ: - break; - - case ESM_BEARER_RESOURCE_ALLOCATE_REQ: - break; - - case ESM_BEARER_RESOURCE_ALLOCATE_REJ: - break; - - case ESM_BEARER_RESOURCE_MODIFY_REQ: - break; - - case ESM_BEARER_RESOURCE_MODIFY_REJ: - break; - - case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ: - break; - - case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF: - /* The MME received activate default ESP bearer context accept */ - rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT, - msg->is_standalone, msg->ctx, - msg->recv, &msg->send, &msg->err); - break; - - case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ: - /* The MME received activate default ESP bearer context reject */ - rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT, - msg->is_standalone, msg->ctx, - msg->recv, &msg->send, &msg->err); - break; - - case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ: - break; - - case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF: - break; - - case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ: - break; - - case ESM_EPS_BEARER_CONTEXT_MODIFY_REQ: - break; - - case ESM_EPS_BEARER_CONTEXT_MODIFY_CNF: - break; - - case ESM_EPS_BEARER_CONTEXT_MODIFY_REJ: - break; - - case ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ: { - int bid; - /* - * Locally deactivate EPS bearer context - */ - rc = esm_proc_eps_bearer_context_deactivate(msg->ctx, TRUE, - msg->data.eps_bearer_context_deactivate.ebi, - &pid, &bid, NULL); - } - break; - - case ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF: - break; - - case ESM_UNITDATA_IND: - rc = _esm_sap_recv(-1, msg->is_standalone, msg->ctx, - msg->recv, &msg->send, &msg->err); - break; - - default: - break; - } - - - if (rc != RETURNok) { - LOG_TRACE(ERROR, "ESM-SAP - Failed to process primitive %s (%d)", - _esm_sap_primitive_str[primitive - ESM_START - 1], primitive); - } - - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: _esm_sap_recv() ** - ** ** - ** Description: Processes ESM messages received from the network: Decodes ** - ** the message and checks whether it is of the expected ty- ** - ** pe, checks the validity of the procedure transaction iden-** - ** tity, checks the validity of the EPS bearer identity, and ** - ** parses the message content. ** - ** If no protocol error is found the ESM response message is ** - ** returned in order to be sent back onto the network upon ** - ** the relevant ESM procedure completion. ** - ** If a protocol error is found the ESM status message is ** - ** returned including the value of the ESM cause code. ** - ** ** - ** Inputs: msg_type: Expected type of the received ESM message ** - ** is_standalone: Indicates whether the ESM message has been ** - ** received standalone or together within EMM ** - ** attach related message ** - ** ueid: UE identifier within the MME ** - ** req: The encoded ESM request message to process ** - ** Others: None ** - ** ** - ** Outputs: rsp: The encoded ESM response message to be re- ** - ** turned upon ESM procedure completion ** - ** err: Error code of the ESM procedure ** - ** Return: RETURNok, RETURNerror ** - ** Others: _esm_sap_buffer ** - ** ** - ***************************************************************************/ -static int _esm_sap_recv(int msg_type, int is_standalone, - emm_data_context_t *ctx, - const OctetString *req, OctetString *rsp, - esm_sap_error_t *err) -{ - esm_proc_procedure_t esm_procedure = NULL; - int esm_cause = ESM_CAUSE_SUCCESS; - int rc = RETURNerror; - int decoder_rc; - - ESM_msg esm_msg; - - LOG_FUNC_IN; - - memset(&esm_msg, 0 , sizeof(ESM_msg)); - - /* Decode the received ESM message */ - decoder_rc = esm_msg_decode(&esm_msg, req->value, req->length); - - /* Process decoding errors */ - if (decoder_rc < 0) { - /* 3GPP TS 24.301, section 7.2 - * Ignore received message that is too short to contain a complete - * message type information element */ - if (decoder_rc == TLV_DECODE_BUFFER_TOO_SHORT) { - LOG_TRACE(WARNING, "ESM-SAP - Discard message too short to " - "contain a complete message type IE"); - /* Return indication that received message has been discarded */ - *err = ESM_SAP_DISCARDED; - LOG_FUNC_RETURN (RETURNok); - } - /* 3GPP TS 24.301, section 7.2 - * Unknown or unforeseen message type */ - else if (decoder_rc == TLV_DECODE_WRONG_MESSAGE_TYPE) { - esm_cause = ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; - } - /* 3GPP TS 24.301, section 7.7.2 - * Conditional IE errors */ - else if (decoder_rc == TLV_DECODE_UNEXPECTED_IEI) { - esm_cause = ESM_CAUSE_CONDITIONAL_IE_ERROR; - } else { - esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } - } - /* Check the type of the ESM message actually received */ - else if ( (msg_type > 0) && (msg_type != esm_msg.header.message_type) ) { - if (esm_msg.header.message_type != ESM_STATUS) { - /* Semantically incorrect ESM message */ - LOG_TRACE(ERROR, "ESM-SAP - Received ESM message 0x%x is not " - "of the expected type (0x%x)", - esm_msg.header.message_type, msg_type); - esm_cause = ESM_CAUSE_SEMANTICALLY_INCORRECT; - } - } - - /* Get the procedure transaction identity */ - unsigned int pti = esm_msg.header.procedure_transaction_identity; - /* Get the EPS bearer identity */ - unsigned int ebi = esm_msg.header.eps_bearer_identity; - /* Indicate whether the ESM bearer context related procedure was triggered - * by the receipt of a transaction related request message from the UE or - * was triggered network-internally */ - int triggered_by_ue = (pti != PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); - /* Indicate whether the received message shall be ignored */ - int is_discarded = FALSE; - - if (esm_cause != ESM_CAUSE_SUCCESS) { - LOG_TRACE(ERROR, "ESM-SAP - Failed to decode expected ESM message " - "0x%x", msg_type); - } - /* Process the received ESM message */ - else switch (esm_msg.header.message_type) { - - - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT: - /* - * Process activate default EPS bearer context accept message - * received from the UE - */ - esm_cause = esm_recv_activate_default_eps_bearer_context_accept( - ctx, pti, ebi, - &esm_msg.activate_default_eps_bearer_context_accept); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Ignore ESM message received with reserved PTI value - * 3GPP TS 24.301, section 7.3.2, case f - * Ignore ESM message received with reserved or assigned - * value that does not match an existing EPS bearer context - */ - is_discarded = TRUE; - } - - break; - - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT: - /* - * Process activate default EPS bearer context reject message - * received from the UE - */ - esm_cause = esm_recv_activate_default_eps_bearer_context_reject( - ctx, pti, ebi, - &esm_msg.activate_default_eps_bearer_context_reject); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Ignore ESM message received with reserved PTI value - * 3GPP TS 24.301, section 7.3.2, case f - * Ignore ESM message received with reserved or assigned - * value that does not match an existing EPS bearer context - */ - is_discarded = TRUE; - } - - break; - - case DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT: - /* - * Process deactivate EPS bearer context accept message - * received from the UE - */ - esm_cause = esm_recv_deactivate_eps_bearer_context_accept( - ctx, pti, ebi, - &esm_msg.deactivate_eps_bearer_context_accept); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Ignore ESM message received with reserved PTI value - * 3GPP TS 24.301, section 7.3.2, case f - * Ignore ESM message received with reserved or assigned - * value that does not match an existing EPS bearer context - */ - is_discarded = TRUE; - } - - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT: - /* - * Process activate dedicated EPS bearer context accept message - * received from the UE - */ - esm_cause = esm_recv_activate_dedicated_eps_bearer_context_accept( - ctx, pti, ebi, - &esm_msg.activate_dedicated_eps_bearer_context_accept); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Ignore ESM message received with reserved PTI value - * 3GPP TS 24.301, section 7.3.2, case f - * Ignore ESM message received with reserved or assigned - * value that does not match an existing EPS bearer context - */ - is_discarded = TRUE; - } - - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT: - /* - * Process activate dedicated EPS bearer context reject message - * received from the UE - */ - esm_cause = esm_recv_activate_dedicated_eps_bearer_context_reject( - ctx, pti, ebi, - &esm_msg.activate_dedicated_eps_bearer_context_reject); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case f - * Ignore ESM message received with reserved PTI value - * 3GPP TS 24.301, section 7.3.2, case f - * Ignore ESM message received with reserved or assigned - * value that does not match an existing EPS bearer context - */ - is_discarded = TRUE; - } - - break; - - case MODIFY_EPS_BEARER_CONTEXT_ACCEPT: - break; - - case MODIFY_EPS_BEARER_CONTEXT_REJECT: - break; - - case PDN_CONNECTIVITY_REQUEST: { - esm_proc_data_t data; - memset(&data, 0, sizeof(esm_proc_data_t)); - - LOG_TRACE(DEBUG, "ESM-SAP - PDN_CONNECTIVITY_REQUEST pti %u ebi %u", pti, ebi); - - /* - * Process PDN connectivity request message received from the UE - */ - esm_cause = esm_recv_pdn_connectivity_request(ctx, pti, ebi, - &esm_msg.pdn_connectivity_request, - &ebi, &data); - - if (esm_cause != ESM_CAUSE_SUCCESS) { - /* Return reject message */ - rc = esm_send_pdn_connectivity_reject(pti, - &esm_msg.pdn_connectivity_reject, esm_cause); - /* Setup the callback function used to send PDN connectivity - * reject message onto the network */ - esm_procedure = esm_proc_pdn_connectivity_reject; - /* No ESM status message should be returned */ - esm_cause = ESM_CAUSE_SUCCESS; - } else { -#if defined(ORIGINAL_CODE) - /* Setup PDN type */ - int pdn_type = -1; - - if (data.pdn_type == ESM_PDN_TYPE_IPV4) { - pdn_type = PDN_VALUE_TYPE_IPV4; - } else if (data.pdn_type == ESM_PDN_TYPE_IPV6) { - pdn_type = PDN_VALUE_TYPE_IPV6; - } else if (data.pdn_type == ESM_PDN_TYPE_IPV4V6) { - pdn_type = PDN_VALUE_TYPE_IPV4V6; - } - - /* Setup EPS bearer level Quality of Service */ - EpsQualityOfService qos; - qos.bitRatesPresent = 1; - qos.bitRatesExtPresent = 0; - qos.qci = data.qos.qci; - qos.bitRates.maxBitRateForUL = data.qos.mbrUL; - qos.bitRates.maxBitRateForDL = data.qos.mbrDL; - qos.bitRates.guarBitRateForUL = data.qos.gbrUL; - qos.bitRates.guarBitRateForDL = data.qos.gbrDL; - - /* Return default EPS bearer context request message */ - rc = esm_send_activate_default_eps_bearer_context_request( - pti, ebi, - &esm_msg.activate_default_eps_bearer_context_request, - &data.apn, pdn_type, &data.pdn_addr, &qos, esm_cause); -#if 0 - PacketFilters pkfs; - pkfs[0].identifier = 1; - pkfs[0].direction = TRAFFIC_FLOW_TEMPLATE_DOWNLINK_ONLY; - pkfs[0].eval_precedence = 2; - pkfs[0].packetfilter.flags = - (TRAFFIC_FLOW_TEMPLATE_IPV4_REMOTE_ADDR_FLAG | - TRAFFIC_FLOW_TEMPLATE_PROTOCOL_NEXT_HEADER_FLAG | - TRAFFIC_FLOW_TEMPLATE_SINGLE_LOCAL_PORT_FLAG | - TRAFFIC_FLOW_TEMPLATE_SINGLE_REMOTE_PORT_FLAG); - pkfs[0].packetfilter.ipv4remoteaddr[0].addr = 192; - pkfs[0].packetfilter.ipv4remoteaddr[1].addr = 168; - pkfs[0].packetfilter.ipv4remoteaddr[2].addr = 12; - pkfs[0].packetfilter.ipv4remoteaddr[3].addr = 1; - pkfs[0].packetfilter.ipv4remoteaddr[0].mask = 255; - pkfs[0].packetfilter.ipv4remoteaddr[1].mask = 255; - pkfs[0].packetfilter.ipv4remoteaddr[2].mask = 255; - pkfs[0].packetfilter.ipv4remoteaddr[3].mask = 0; - pkfs[0].packetfilter.protocolidentifier_nextheader = 17; - pkfs[0].packetfilter.singlelocalport = 10001; - pkfs[0].packetfilter.singleremoteport = 12001; - pkfs[1].identifier = 2; - pkfs[1].direction = TRAFFIC_FLOW_TEMPLATE_UPLINK_ONLY; - pkfs[1].eval_precedence = 3; - pkfs[1].packetfilter.flags = - (TRAFFIC_FLOW_TEMPLATE_IPV4_REMOTE_ADDR_FLAG | - TRAFFIC_FLOW_TEMPLATE_PROTOCOL_NEXT_HEADER_FLAG | - TRAFFIC_FLOW_TEMPLATE_SINGLE_LOCAL_PORT_FLAG | - TRAFFIC_FLOW_TEMPLATE_SINGLE_REMOTE_PORT_FLAG); - pkfs[1].packetfilter.ipv4remoteaddr[0].addr = 192; - pkfs[1].packetfilter.ipv4remoteaddr[1].addr = 168; - pkfs[1].packetfilter.ipv4remoteaddr[2].addr = 12; - pkfs[1].packetfilter.ipv4remoteaddr[3].addr = 1; - pkfs[1].packetfilter.ipv4remoteaddr[0].mask = 255; - pkfs[1].packetfilter.ipv4remoteaddr[1].mask = 255; - pkfs[1].packetfilter.ipv4remoteaddr[2].mask = 255; - pkfs[1].packetfilter.ipv4remoteaddr[3].mask = 0; - pkfs[1].packetfilter.protocolidentifier_nextheader = 17; - pkfs[1].packetfilter.singlelocalport = 10002; - pkfs[1].packetfilter.singleremoteport = 12002; - /* Return dedicated EPS bearer context request message */ - rc = esm_send_activate_dedicated_eps_bearer_context_request( - pti, ebi, - &esm_msg.activate_dedicated_eps_bearer_context_request, - ebi, &qos, &pkfs, 2); -#endif - esm_procedure = esm_proc_default_eps_bearer_context_request; -#else - esm_cause = ESM_CAUSE_SUCCESS; -#endif - /* Setup the callback function used to send default EPS bearer - * context request message onto the network */ - //esm_procedure = esm_proc_default_eps_bearer_context_request; - } - - break; - } - - - case PDN_DISCONNECT_REQUEST: - /* - * Process PDN disconnect request message received from the UE - */ - esm_cause = esm_recv_pdn_disconnect_request(ctx, pti, ebi, - &esm_msg.pdn_disconnect_request, &ebi); - - if (esm_cause != ESM_CAUSE_SUCCESS) { - /* Return reject message */ - rc = esm_send_pdn_disconnect_reject(pti, - &esm_msg.pdn_disconnect_reject, esm_cause); - /* Setup the callback function used to send PDN connectivity - * reject message onto the network */ - esm_procedure = esm_proc_pdn_disconnect_reject; - /* No ESM status message should be returned */ - esm_cause = ESM_CAUSE_SUCCESS; - } else { - /* Return deactivate EPS bearer context request message */ - rc = esm_send_deactivate_eps_bearer_context_request(pti, ebi, - &esm_msg.deactivate_eps_bearer_context_request, - ESM_CAUSE_REGULAR_DEACTIVATION); - /* Setup the callback function used to send deactivate EPS - * bearer context request message onto the network */ - esm_procedure = esm_proc_eps_bearer_context_deactivate_request; - } - - break; - - case BEARER_RESOURCE_ALLOCATION_REQUEST: - break; - - case BEARER_RESOURCE_MODIFICATION_REQUEST: - break; - - case ESM_INFORMATION_RESPONSE: - break; - - case ESM_STATUS: - /* - * Process received ESM status message - */ - esm_cause = esm_recv_status(ctx, pti, ebi, &esm_msg.esm_status); - break; - - default: - LOG_TRACE(WARNING, "ESM-SAP - Received unexpected ESM message " - "0x%x", esm_msg.header.message_type); - esm_cause = ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; - break; - } - - if ( (esm_cause != ESM_CAUSE_SUCCESS) && (esm_procedure == NULL) ) { - /* ESM message processing failed */ - if (!is_discarded) { - /* 3GPP TS 24.301, section 7.1 - * Handling of unknown, unforeseen, and erroneous protocol data */ - LOG_TRACE(WARNING, "ESM-SAP - Received ESM message is not valid " - "(cause=%d)", esm_cause); - /* Return an ESM status message */ - rc = esm_send_status(pti, ebi, &esm_msg.esm_status, esm_cause); - /* Setup the callback function used to send ESM status message - * onto the network */ - esm_procedure = esm_proc_status; - /* Discard received ESM message */ - is_discarded = TRUE; - } - } else { - /* ESM message processing succeed */ - *err = ESM_SAP_SUCCESS; - rc = RETURNok; - } - - if ( (rc != RETURNerror) && (esm_procedure != NULL) ) { - /* Encode the returned ESM response message */ - int size = esm_msg_encode(&esm_msg, (uint8_t *)_esm_sap_buffer, - ESM_SAP_BUFFER_SIZE); - - if (size > 0) { - rsp->length = size; - rsp->value = (uint8_t *)(_esm_sap_buffer); - } - - /* Complete the relevant ESM procedure */ - rc = (*esm_procedure)(is_standalone, ctx, ebi, rsp, triggered_by_ue); - - if (is_discarded) { - /* Return indication that received message has been discarded */ - *err = ESM_SAP_DISCARDED; - } else if (rc != RETURNok) { - /* Return indication that ESM procedure failed */ - *err = ESM_SAP_FAILED; - } - } else if (is_discarded) { - LOG_TRACE(WARNING, "ESM-SAP - Silently discard message type 0x%x", - esm_msg.header.message_type); - /* Return indication that received message has been discarded */ - *err = ESM_SAP_DISCARDED; - rc = RETURNok; - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: _esm_sap_send() ** - ** ** - ** Description: Processes ESM messages to send onto the network: Encoded ** - ** the message and execute the relevant ESM procedure. ** - ** ** - ** Inputs: msg_type: Type of the ESM message to be sent ** - ** is_standalone: Indicates whether the ESM message has to ** - ** be sent standalone or together within EMM ** - ** attach related message ** - ** ueid: UE identifier within the MME ** - ** pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** data: Data required to build the message ** - ** Others: None ** - ** ** - ** Outputs: rsp: The encoded ESM response message to be re- ** - ** turned upon ESM procedure completion ** - ** Return: RETURNok, RETURNerror ** - ** Others: _esm_sap_buffer ** - ** ** - ***************************************************************************/ -static int _esm_sap_send(int msg_type, int is_standalone, - emm_data_context_t *ctx, - int pti, int ebi, const esm_sap_data_t *data, - OctetString *rsp) -{ - LOG_FUNC_IN; - - esm_proc_procedure_t esm_procedure = NULL; - int rc = RETURNok; - - /* Indicate whether the message is sent by the UE or the MME */ - int sent_by_ue = FALSE; - - ESM_msg esm_msg; - memset(&esm_msg, 0 , sizeof(ESM_msg)); - - /* Process the ESM message to send */ - switch (msg_type) { - - - - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST: - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST: - break; - - case MODIFY_EPS_BEARER_CONTEXT_REQUEST: - break; - - case DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST: - break; - - case PDN_CONNECTIVITY_REJECT: - break; - - case PDN_DISCONNECT_REJECT: - break; - - case BEARER_RESOURCE_ALLOCATION_REJECT: - break; - - case BEARER_RESOURCE_MODIFICATION_REJECT: - break; - - default: - LOG_TRACE(WARNING, "ESM-SAP - Send unexpected ESM message 0x%x", - msg_type); - break; - } - - if (rc != RETURNerror) { - /* Encode the returned ESM response message */ - int size = esm_msg_encode(&esm_msg, (uint8_t *)_esm_sap_buffer, - ESM_SAP_BUFFER_SIZE); - - if (size > 0) { - rsp->length = size; - rsp->value = (uint8_t *)(_esm_sap_buffer); - } - - /* Execute the relevant ESM procedure */ - if (esm_procedure) { - rc = (*esm_procedure)(is_standalone, ctx, pti, rsp, sent_by_ue); - } - } - - LOG_FUNC_RETURN(rc); -} - diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_sap.h b/openair-cn/NAS/MME/ESM/SAP/esm_sap.h deleted file mode 100644 index c2d900a4ae..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_sap.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_sap.h - -Version 0.1 - -Date 2012/11/22 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the ESM Service Access Points at which the EPS - Session Management sublayer provides procedures for the - EPS bearer context handling and resources allocation. - -*****************************************************************************/ -#ifndef __ESM_SAP_H__ -#define __ESM_SAP_H__ - -#include "esm_sapDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void esm_sap_initialize(void); - -int esm_sap_send(esm_sap_t *msg); - -#endif /* __ESM_SAP_H__*/ diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h b/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h deleted file mode 100644 index a1372193f1..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_sapDef.h - -Version 0.1 - -Date 2012/11/21 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the ESM Service Access Point that provides EPS - bearer context handling and resources allocation procedures. - -*****************************************************************************/ - -#include "emmData.h" - -#ifndef __ESM_SAPDEF_H__ -#define __ESM_SAPDEF_H__ - -#include "OctetString.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * EPS Session Management primitives - * --------------------------------- - */ -typedef enum esm_primitive_s { - ESM_START = 0, - /* Procedures related to EPS bearer contexts (initiated by the network) */ - ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ, - ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF, - ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ, - ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ, - ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF, - ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ, - ESM_EPS_BEARER_CONTEXT_MODIFY_REQ, - ESM_EPS_BEARER_CONTEXT_MODIFY_CNF, - ESM_EPS_BEARER_CONTEXT_MODIFY_REJ, - ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ, - ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF, - /* Transaction related procedures (initiated by the UE) */ - ESM_PDN_CONNECTIVITY_REQ, - ESM_PDN_CONNECTIVITY_REJ, - ESM_PDN_DISCONNECT_REQ, - ESM_PDN_DISCONNECT_REJ, - ESM_BEARER_RESOURCE_ALLOCATE_REQ, - ESM_BEARER_RESOURCE_ALLOCATE_REJ, - ESM_BEARER_RESOURCE_MODIFY_REQ, - ESM_BEARER_RESOURCE_MODIFY_REJ, - /* ESM data indication ("raw" ESM message) */ - ESM_UNITDATA_IND, - ESM_END -} esm_primitive_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * Error code returned upon processing ESM-SAP primitive - */ -typedef enum { - ESM_SAP_SUCCESS = 1, /* ESM-SAP primitive succeed */ - ESM_SAP_DISCARDED, /* ESM-SAP primitive failed, the caller should - * ignore the error */ - ESM_SAP_FAILED /* ESM-SAP primitive failed, the caller should - * take specific action and state transition may - * occurs */ -} esm_sap_error_t; - -/* - * ESM primitive for activate EPS default bearer context procedure - * --------------------------------------------------------------- - */ -typedef struct esm_activate_eps_default_bearer_context_s { -} esm_activate_eps_default_bearer_context_t; - -/* - * ESM primitive for PDN connectivity procedure - * -------------------------------------------- - */ -typedef struct esm_pdn_connectivity_s { - int cid; /* PDN connection local identifier */ - int is_defined; /* Indicates whether a PDN context has been defined - * for the specified APN */ - int pdn_type; /* PDN address type (IPv4, IPv6, IPv4v6) */ - const char *apn; /* PDN's Access Point Name */ - int is_emergency; /* Indicates whether the PDN context has been - * defined to establish connection for emergency - * bearer services */ -} esm_pdn_connectivity_t; - -/* - * ESM primitive for PDN disconnect procedure - * ------------------------------------------ - */ -typedef struct esm_pdn_disconnect_s { - int cid; /* PDN connection local identifier */ -} esm_pdn_disconnect_t; - -/* - * ESM primitive for deactivate EPS bearer context procedure - * --------------------------------------------------------- - */ -typedef struct esm_eps_bearer_context_deactivate_s { -#define ESM_SAP_ALL_EBI 0xff - unsigned int ebi; /* EPS bearer identity of the EPS bearer context - * to be deactivated */ -} esm_eps_bearer_context_deactivate_t; - -/* - * ------------------------------ - * Structure of ESM-SAP primitive - * ------------------------------ - */ -typedef union { - esm_pdn_connectivity_t pdn_connect; - esm_pdn_disconnect_t pdn_disconnect; - esm_eps_bearer_context_deactivate_t eps_bearer_context_deactivate; -} esm_sap_data_t; - -typedef struct esm_sap_s { - esm_primitive_t primitive; /* ESM-SAP primitive to process */ - int is_standalone; /* Indicates whether the ESM message handled - * within this primitive has to be sent/received - * standalone or together within an EMM related - * message */ - emm_data_context_t *ctx; /* UE context */ - unsigned int ueid; /* Local UE identifier */ - esm_sap_error_t err; /* ESM-SAP error code */ - const OctetString *recv; /* Encoded ESM message received */ - OctetString send; /* Encoded ESM message to be sent */ - esm_sap_data_t data; /* ESM message data parameters */ -} esm_sap_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif /* __ESM_SAPDEF_H__*/ diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_send.c b/openair-cn/NAS/MME/ESM/SAP/esm_send.c deleted file mode 100644 index 4926c749a2..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_send.c +++ /dev/null @@ -1,427 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_send.c - -Version 0.1 - -Date 2013/02/11 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions executed at the ESM Service Access - Point to send EPS Session Management messages to the - EPS Mobility Management sublayer. - -*****************************************************************************/ - -#include "esm_send.h" -#include "commonDef.h" -#include "nas_log.h" - - -#include "esm_msgDef.h" -#include "esm_cause.h" - -#include // strlen - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME to send ESM messages - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_send_status() ** - ** ** - ** Description: Builds ESM status message ** - ** ** - ** The ESM status message is sent by the network or the UE ** - ** to pass information on the status of the indicated EPS ** - ** bearer context and report certain error conditions. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = ESM_STATUS; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - - LOG_TRACE(WARNING, "ESM-SAP - Send ESM Status message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send ESM message to the UE - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: esm_send_pdn_connectivity_reject() ** - ** ** - ** Description: Builds PDN Connectivity Reject message ** - ** ** - ** The PDN connectivity reject message is sent by the net- ** - ** work to the UE to reject establishment of a PDN connec- ** - ** tion. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; - msg->messagetype = PDN_CONNECTIVITY_REJECT; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send PDN Connectivity Reject message " - "(pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_pdn_disconnect_reject() ** - ** ** - ** Description: Builds PDN Disconnect Reject message ** - ** ** - ** The PDN disconnect reject message is sent by the network ** - ** to the UE to reject release of a PDN connection. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; - msg->messagetype = PDN_DISCONNECT_REJECT; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send PDN Disconnect Reject message " - "(pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_activate_default_eps_bearer_context_request() ** - ** ** - ** Description: Builds Activate Default EPS Bearer Context Request ** - ** message ** - ** ** - ** The activate default EPS bearer context request message ** - ** is sent by the network to the UE to request activation of ** - ** a default EPS bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** qos: Subscribed EPS quality of service ** - ** apn: Access Point Name in used ** - ** pdn_addr: PDN IPv4 address and/or IPv6 suffix ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_activate_default_eps_bearer_context_request(int pti, - int ebi, - activate_default_eps_bearer_context_request_msg *msg, - const OctetString *apn, - const ProtocolConfigurationOptions *pco, - int pdn_type, - const OctetString *pdn_addr, - const EpsQualityOfService *qos, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - EPS QoS */ - msg->epsqos = *qos; - LOG_TRACE(INFO, "ESM-SAP - epsqos qci: %u", qos->qci); - - if (qos->bitRatesPresent) { - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL: %u", qos->bitRates.maxBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL: %u", qos->bitRates.maxBitRateForDL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL: %u", qos->bitRates.guarBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL: %u", qos->bitRates.guarBitRateForDL); - } else { - LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates defined"); - } - - if (qos->bitRatesExtPresent) { - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL Ext: %u", qos->bitRatesExt.maxBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL Ext: %u", qos->bitRatesExt.maxBitRateForDL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL Ext: %u", qos->bitRatesExt.guarBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL Ext: %u", qos->bitRatesExt.guarBitRateForDL); - } else { - LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates ext defined"); - } - - - if ((apn == NULL) || ((apn != NULL) && (apn->value == NULL))) { - LOG_TRACE(WARNING, "ESM-SAP - apn is NULL!"); - } - - LOG_TRACE(INFO, "ESM-SAP - apn is %s", apn->value); - - /* Mandatory - Access Point Name */ - msg->accesspointname.accesspointnamevalue = *apn; - - /* Mandatory - PDN address */ - LOG_TRACE(INFO, "ESM-SAP - pdn_type is %u", pdn_type); - msg->pdnaddress.pdntypevalue = pdn_type; - LOG_TRACE(INFO, "ESM-SAP - pdn_addr is %u", dump_octet_string(pdn_addr)); - msg->pdnaddress.pdnaddressinformation = *pdn_addr; - - /* Optional - ESM cause code */ - msg->presencemask = 0; - - if (esm_cause != ESM_CAUSE_SUCCESS) { - msg->presencemask |= - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; - msg->esmcause = esm_cause; - } - - if (pco != NULL) { - msg->presencemask |= - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT; - msg->protocolconfigurationoptions = *pco; - } - -#warning "TEST LG FORCE APN-AMBR" - LOG_TRACE(INFO, "ESM-SAP - FORCE APN-AMBR"); - msg->presencemask |= - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APNAMBR_PRESENT; - msg->apnambr.apnambrfordownlink = 0xfe; // (8640kbps) - msg->apnambr.apnambrforuplink = 0xfe; // (8640kbps) - msg->apnambr.apnambrfordownlink_extended = 0xde; // (200Mbps) - msg->apnambr.apnambrforuplink_extended = 0x9e; // (100Mbps) - msg->apnambr.apnambrfordownlink_extended2 = 0; - msg->apnambr.apnambrforuplink_extended2 = 0; - msg->apnambr.extensions = 0 | APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT; - - LOG_TRACE(INFO, "ESM-SAP - Send Activate Default EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_activate_dedicated_eps_bearer_context_request() ** - ** ** - ** Description: Builds Activate Dedicated EPS Bearer Context Request ** - ** message ** - ** ** - ** The activate dedicated EPS bearer context request message ** - ** is sent by the network to the UE to request activation of ** - ** a dedicated EPS bearer context associated with the same ** - ** PDN address(es) and APN as an already active default EPS ** - ** bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** linked_ebi: EPS bearer identity of the default bearer ** - ** associated with the EPS dedicated bearer ** - ** to be activated ** - ** qos: EPS quality of service ** - ** tft: Traffic flow template ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - activate_dedicated_eps_bearer_context_request_msg *msg, - int linked_ebi, const EpsQualityOfService *qos, - PacketFilters *pkfs, int n_pkfs) -{ - int i; - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - EPS QoS */ - msg->epsqos = *qos; - - /* Mandatory - traffic flow template */ - msg->tft.tftoperationcode = TRAFFIC_FLOW_TEMPLATE_OPCODE_CREATE; - msg->tft.ebit = TRAFFIC_FLOW_TEMPLATE_PARAMETER_LIST_IS_NOT_INCLUDED; - msg->tft.numberofpacketfilters = n_pkfs; - - for (i = 0; i < msg->tft.numberofpacketfilters; i++) { - msg->tft.packetfilterlist.createtft[i] = (*pkfs)[i]; - } - - /* Optional */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send Activate Dedicated EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_deactivate_eps_bearer_context_request() ** - ** ** - ** Description: Builds Deactivate EPS Bearer Context Request message ** - ** ** - ** The deactivate EPS bearer context request message is sent ** - ** by the network to request deactivation of an active EPS ** - ** bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, - deactivate_eps_bearer_context_request_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send Deactivate EPS Bearer Context Request " - "message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_send.h b/openair-cn/NAS/MME/ESM/SAP/esm_send.h deleted file mode 100644 index 07c0af4635..0000000000 --- a/openair-cn/NAS/MME/ESM/SAP/esm_send.h +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_send.h - -Version 0.1 - -Date 2013/02/11 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions executed at the ESM Service Access - Point to send EPS Session Management messages to the - EPS Mobility Management sublayer. - -*****************************************************************************/ -#ifndef __ESM_SEND_H__ -#define __ESM_SEND_H__ - -#include "EsmStatus.h" - -#include "PdnConnectivityReject.h" -#include "PdnDisconnectReject.h" -#include "BearerResourceAllocationReject.h" -#include "BearerResourceModificationReject.h" - -#include "ActivateDefaultEpsBearerContextRequest.h" -#include "ActivateDedicatedEpsBearerContextRequest.h" -#include "ModifyEpsBearerContextRequest.h" -#include "DeactivateEpsBearerContextRequest.h" - -#include "EsmInformationRequest.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * Functions executed by both the UE and the MME to send ESM messages - * -------------------------------------------------------------------------- - */ -int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause); - - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send ESM message to the UE - * -------------------------------------------------------------------------- - */ -/* - * Transaction related messages - * ---------------------------- - */ -int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, - int esm_cause); - -int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, - int esm_cause); - -/* - * Messages related to EPS bearer contexts - * --------------------------------------- - */ -int esm_send_activate_default_eps_bearer_context_request(int pti, int ebi, - activate_default_eps_bearer_context_request_msg *msg, const OctetString *apn, - const ProtocolConfigurationOptions *pco, int pdn_type, const OctetString *pdn_addr, - const EpsQualityOfService *qos, int esm_cause); - -int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - activate_dedicated_eps_bearer_context_request_msg *msg, int linked_ebi, - const EpsQualityOfService *qos, PacketFilters *pkfs, int n_pkfs); - -int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, - deactivate_eps_bearer_context_request_msg *msg, int esm_cause); - -#endif /* __ESM_SEND_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esmData.h b/openair-cn/NAS/MME/ESM/esmData.h deleted file mode 100644 index a5f839c1dc..0000000000 --- a/openair-cn/NAS/MME/ESM/esmData.h +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esmData.h - -Version 0.1 - -Date 2012/12/04 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines internal private data handled by EPS Session - Management sublayer. - -*****************************************************************************/ -#include // sprintf - -#include "networkDef.h" -#include "OctetString.h" -#include "EpsBearerIdentity.h" - -#include "mme_api.h" - -#if defined(NAS_BUILT_IN_EPC) -# include "tree.h" -#endif - -#ifndef __ESMDATA_H__ -#define __ESMDATA_H__ - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Total number of active EPS bearers */ -#define ESM_DATA_EPS_BEARER_TOTAL 11 - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * Minimal and maximal value of an EPS bearer identity: - * The EPS Bearer Identity (EBI) identifies a message flow - */ -#define ESM_EBI_MIN (EPS_BEARER_IDENTITY_FIRST) -#define ESM_EBI_MAX (EPS_BEARER_IDENTITY_LAST) - -/* EPS bearer context states */ -typedef enum { - ESM_EBR_INACTIVE, /* No EPS bearer context exists */ - ESM_EBR_ACTIVE, /* The EPS bearer context is active, - * in the UE, in the network */ - ESM_EBR_INACTIVE_PENDING, /* The network has initiated an EPS bearer - * context deactivation towards the UE */ - ESM_EBR_MODIFY_PENDING, /* The network has initiated an EPS bearer - * context modification towards the UE */ - ESM_EBR_ACTIVE_PENDING, /* The network has initiated an EPS bearer - * context activation towards the UE */ - ESM_EBR_STATE_MAX -} esm_ebr_state; - -/* ESM message timer retransmission data */ -typedef struct esm_ebr_timer_data_s { - void *ctx; - unsigned int ueid; /* Lower layers UE identifier */ - unsigned int ebi; /* EPS bearer identity */ - unsigned int count; /* Retransmission counter */ - OctetString msg; /* Encoded ESM message to re-transmit */ -} esm_ebr_timer_data_t; - -/* - * ----------------------- - * EPS bearer context data - * ----------------------- - */ -typedef struct esm_ebr_context_s { - unsigned char ebi; /* EPS bearer identity */ - esm_ebr_state status; /* EPS bearer context status */ - - struct nas_timer_t timer; /* Retransmission timer */ - esm_ebr_timer_data_t *args; /* Retransmission timer parameters data */ -} esm_ebr_context_t; - -typedef struct esm_ebr_data_s { - unsigned char index; /* Index of the next EPS bearer context - * identity to be used */ -#define ESM_EBR_DATA_SIZE (ESM_EBI_MAX - ESM_EBI_MIN + 1) - esm_ebr_context_t *context[ESM_EBR_DATA_SIZE + 1]; -} esm_ebr_data_t; - -/* - * -------------------------------------------------------------------------- - * Structure of data handled by EPS Session Management sublayer in the UE - * and in the MME - * -------------------------------------------------------------------------- - */ - -/* - * Structure of an EPS bearer - * -------------------------- - * An EPS bearer is a logical concept which applies to the connection - * between two endpoints (UE and PDN Gateway) with specific QoS attri- - * butes. An EPS bearer corresponds to one Quality of Service policy - * applied within the EPC and E-UTRAN. - */ -typedef struct esm_bearer_s { - int bid; /* Identifier of the EPS bearer */ - unsigned int ebi; /* EPS bearer identity */ - network_qos_t qos; /* EPS bearer level QoS parameters */ - network_tft_t tft; /* Traffic Flow Template for packet filtering */ -} esm_bearer_t; - -/* - * Structure of a PDN connection - * ----------------------------- - * A PDN connection is the association between a UE represented by - * one IPv4 address and/or one IPv6 prefix and a PDN represented by - * an Access Point Name (APN). - */ -typedef struct esm_pdn_s { - unsigned int pti; /* Identity of the procedure transaction executed - * to activate the PDN connection entry */ - int is_emergency; /* Emergency bearer services indicator */ - OctetString apn; /* Access Point Name currently in used */ - int ambr; /* Aggregate Maximum Bit Rate of this APN */ - int type; /* Address PDN type (IPv4, IPv6, IPv4v6) */ -#define ESM_DATA_IPV4_ADDRESS_SIZE 4 -#define ESM_DATA_IPV6_ADDRESS_SIZE 8 -#define ESM_DATA_IP_ADDRESS_SIZE (ESM_DATA_IPV4_ADDRESS_SIZE + \ - ESM_DATA_IPV6_ADDRESS_SIZE) - /* IPv4 PDN address and/or IPv6 prefix */ - char ip_addr[ESM_DATA_IP_ADDRESS_SIZE+1]; - int addr_realloc; /* Indicates whether the UE is allowed to subsequently - * request another PDN connectivity to the same APN - * using an address PDN type (IPv4 or IPv6) other - * than the one already activated */ - int n_bearers; /* Number of allocated EPS bearers; - * default EPS bearer is defined at index 0 */ -#define ESM_DATA_EPS_BEARER_MAX 4 - esm_bearer_t *bearer[ESM_DATA_EPS_BEARER_MAX]; -} esm_pdn_t; - -/* - * Structure of the ESM data - * ------------------------- - * The EPS Session Management sublayer handles data related to PDN - * connections and EPS bearers. Each active PDN connection has a de- - * fault EPS bearer. Several dedicated EPS bearers may exist within - * a PDN connection. - */ -typedef struct esm_data_context_s { - unsigned int ue_id; - - int n_ebrs; /* Total number of active EPS bearer contexts */ - int n_pdns; /* Number of active PDN connections */ - int emergency; /* Indicates whether a PDN connection for emergency - * bearer services is established */ -#define ESM_DATA_PDN_MAX 4 - struct { - int pid; /* Identifier of the PDN connection */ - int is_active; /* TRUE/FALSE if the PDN connection is active/inactive - * or the process to activate/deactivate the PDN - * connection is in progress */ - esm_pdn_t *data; /* Active PDN connection data */ - } pdn[ESM_DATA_PDN_MAX+1]; - - esm_ebr_data_t ebr; -} esm_data_context_t; - - - -/* - * -------------------------------------------------------------------------- - * ESM internal data handled by EPS Session Management sublayer in the MME - * -------------------------------------------------------------------------- - */ -/* - * Structure of the ESM data - * ------------------------- - */ -typedef struct esm_data_s { - /* - * MME configuration - * ----------------- - */ - mme_api_esm_config_t conf; - /* - * ESM contexts - * ------------ - */ -# if defined(NAS_BUILT_IN_EPC) - /* Use a tree for ue data context within MME */ - RB_HEAD(esm_data_context_map, esm_data_context_s) ctx_map; -# else -# define ESM_DATA_NB_UE_MAX (MME_API_NB_UE_MAX + 1) - esm_data_context_t *ctx[ESM_DATA_NB_UE_MAX]; -# endif -} esm_data_t; - -# if defined(NAS_BUILT_IN_EPC) -struct esm_data_context_s *esm_data_context_get( - esm_data_t *esm_data, unsigned int _ueid); - -struct esm_data_context_s *esm_data_context_remove( - esm_data_t *esm_data, struct esm_data_context_s *elm); - -void esm_data_context_add(esm_data_t *esm_data, struct esm_data_context_s *elm); - -# endif - - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/* - * ESM internal data (used within ESM only) - * ---------------------------------------- - */ -esm_data_t _esm_data; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -extern char ip_addr_str[100]; - -extern char *esm_data_get_ipv4_addr(const OctetString *ip_addr); - -extern char *esm_data_get_ipv6_addr(const OctetString *ip_addr); - -extern char *esm_data_get_ipv4v6_addr(const OctetString *ip_addr); - -#endif /* __ESMDATA_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_ebr.c b/openair-cn/NAS/MME/ESM/esm_ebr.c deleted file mode 100644 index 720e69a5eb..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_ebr.c +++ /dev/null @@ -1,680 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_ebr.c - -Version 0.1 - -Date 2013/01/29 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle state of EPS bearer contexts - and manage ESM messages re-transmission. - -*****************************************************************************/ - -#include // malloc, free -#include // memcpy - -#include "emmData.h" -#include "esm_ebr.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "mme_api.h" -#include "msc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - - -#define ESM_EBR_NB_UE_MAX (MME_API_NB_UE_MAX + 1) - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* String representation of EPS bearer context status */ -static const char *_esm_ebr_state_str[ESM_EBR_STATE_MAX] = { - "BEARER CONTEXT INACTIVE", - "BEARER CONTEXT ACTIVE", - "BEARER CONTEXT INACTIVE PENDING", - "BEARER CONTEXT MODIFY PENDING", - "BEARER CONTEXT ACTIVE PENDING" -}; - -/* - * ---------------------------------- - * List of EPS bearer contexts per UE - * ---------------------------------- - */ - -#if !defined(NAS_BUILT_IN_EPC) -static esm_ebr_data_t _esm_ebr_data[ESM_EBR_NB_UE_MAX]; -#endif - -/* - * ---------------------- - * User notification data - * ---------------------- - */ - - -/* Returns the index of the next available entry in the list of EPS bearer - * context data */ -static int _esm_ebr_get_available_entry(emm_data_context_t *ctx); - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: esm_ebr_initialize() ** - ** ** - ** Description: Initialize EPS bearer context data ** - ** ** - ** Inputs: cb: User notification callback ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -void esm_ebr_initialize(void -) -{ -#if !defined(NAS_BUILT_IN_EPC) - int ueid, i; - - LOG_FUNC_IN; - - for (ueid = 0; ueid < ESM_EBR_NB_UE_MAX; ueid++) { - _esm_ebr_data[ueid].index = 0; - - /* Initialize EPS bearer context data */ - for (i = 0; i < ESM_EBR_DATA_SIZE + 1; i++) { - _esm_ebr_data[ueid].context[i] = NULL; - } - } - LOG_FUNC_OUT; -#endif -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_assign() ** - ** ** - ** Description: Assigns a new EPS bearer context ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: Identity of the new EPS bearer context ** - ** cid: Identifier of the PDN context the EPS bea- ** - ** rer context is associated to ** - ** default_ebr TRUE if the new bearer context is associa- ** - ** ted to a default EPS bearer ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The identity of the new EPS bearer context ** - ** if successfully assigned; ** - ** the not assigned EBI (0) otherwise. ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -int esm_ebr_assign(emm_data_context_t *ctx, int ebi) -{ - esm_ebr_context_t *ebr_ctx = NULL; - unsigned int ueid = 0; - int i; - - LOG_FUNC_IN; - - ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; - - if (ebi != ESM_EBI_UNASSIGNED) { - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } else if (ebr_ctx != NULL) { - LOG_TRACE(WARNING, "ESM-FSM - EPS bearer context already " - "assigned (ebi=%d)", ebi); - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - - /* The specified EPS bearer context is available */ - i = ebi - ESM_EBI_MIN; - } else { - /* Search for an available EPS bearer identity */ - i = _esm_ebr_get_available_entry(ctx); - - if (i < 0) { - LOG_FUNC_RETURN(ESM_EBI_UNASSIGNED); - } - - /* An available EPS bearer context is found */ - ebi = i + ESM_EBI_MIN; - } - - /* Assign new EPS bearer context */ - ebr_ctx = - (esm_ebr_context_t *)malloc(sizeof(esm_ebr_context_t)); - - if (ebr_ctx == NULL) { - LOG_FUNC_RETURN(ESM_EBI_UNASSIGNED); - } - -#if defined(NAS_BUILT_IN_EPC) - ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN] = ebr_ctx; -#else - _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] = ebr_ctx; -#endif - - /* Store the index of the next available EPS bearer identity */ - ctx->esm_data_ctx.ebr.index = i + 1; - - - /* Set the EPS bearer identity */ - ebr_ctx->ebi = ebi; - /* Set the EPS bearer context status to INACTIVE */ - ebr_ctx->status = ESM_EBR_INACTIVE; - /* Disable the retransmission timer */ - ebr_ctx->timer.id = NAS_TIMER_INACTIVE_ID; - /* Setup retransmission timer parameters */ - ebr_ctx->args = NULL; - - LOG_TRACE(INFO, "ESM-FSM - EPS bearer context %d assigned", ebi); - LOG_FUNC_RETURN(ebr_ctx->ebi); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_release() ** - ** ** - ** Description: Release the given EPS bearer identity ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer context to ** - ** be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok if the EPS bearer context has ** - ** been successfully released; ** - ** RETURNerror otherwise. ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -int esm_ebr_release( - emm_data_context_t *ctx, - int ebi) -{ - esm_ebr_context_t *ebr_ctx; - - LOG_FUNC_IN; - - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* Get EPS bearer context data */ - ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; - - if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { - /* EPS bearer context not assigned */ - LOG_FUNC_RETURN (RETURNerror); - } - - /* Do not release active EPS bearer context */ - if (ebr_ctx->status != ESM_EBR_INACTIVE) { - LOG_TRACE(ERROR, "ESM-FSM - EPS bearer context is not INACTIVE"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Stop the retransmission timer if still running */ - if (ebr_ctx->timer.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "ESM-FSM - Stop retransmission timer %d", - ebr_ctx->timer.id); - ebr_ctx->timer.id = nas_timer_stop(ebr_ctx->timer.id); - MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u stopped",ebr_ctx->timer.id, ebi); - } - - /* Release the retransmisison timer parameters */ - if (ebr_ctx->args) { - if (ebr_ctx->args->msg.length > 0) { - free(ebr_ctx->args->msg.value); - } - - free(ebr_ctx->args); - ebr_ctx->args = NULL; - } - - /* Release EPS bearer context data */ - free(ebr_ctx); - ebr_ctx = NULL; - - LOG_TRACE(INFO, "ESM-FSM - EPS bearer context %d released", ebi); - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_start_timer() ** - ** ** - ** Description: Start the timer of the specified EPS bearer context to ** - ** expire after a given time interval. Timer expiration will ** - ** schedule execution of the callback function where stored ** - ** ESM message should be re-transmit. ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer ** - ** msg: The encoded ESM message to be stored ** - ** sec: The value of the time interval in seconds ** - ** cb: Function executed upon timer expiration ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -int esm_ebr_start_timer(emm_data_context_t *ctx, int ebi, const OctetString *msg, - long sec, nas_timer_callback_t cb) -{ - esm_ebr_context_t *ebr_ctx; - - LOG_FUNC_IN; - - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - LOG_TRACE(ERROR, "ESM-FSM - Retransmission timer bad ebi %d", - ebi); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Get EPS bearer context data */ - ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; - - if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { - /* EPS bearer context not assigned */ - LOG_TRACE(ERROR, "ESM-FSM - EPS bearer context not assigned"); - LOG_FUNC_RETURN (RETURNerror); - } - - if (ebr_ctx->timer.id != NAS_TIMER_INACTIVE_ID) { - if (ebr_ctx->args) { - /* Re-start the retransmission timer */ - ebr_ctx->timer.id = nas_timer_restart(ebr_ctx->timer.id); - MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u restarted",ebr_ctx->timer.id, ebi); - } - } else { - /* Setup the retransmission timer parameters */ - ebr_ctx->args = (esm_ebr_timer_data_t *)malloc(sizeof(esm_ebr_timer_data_t)); - - if (ebr_ctx->args) { - /* Set the UE identifier */ - ebr_ctx->args->ueid = ctx->ueid; - /* Set the EPS bearer identity */ - ebr_ctx->args->ebi = ebi; - /* Reset the retransmission counter */ - ebr_ctx->args->count = 0; - /* Set the ESM message to be re-transmited */ - ebr_ctx->args->msg.value = (uint8_t *)malloc(msg->length); - ebr_ctx->args->msg.length = 0; - - if (ebr_ctx->args->msg.value) { - memcpy(ebr_ctx->args->msg.value, msg->value, msg->length); - ebr_ctx->args->msg.length = msg->length; - } - - /* Setup the retransmission timer to expire at the given - * time interval */ - ebr_ctx->timer.id = nas_timer_start(sec, cb, ebr_ctx->args); - MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u started",ebr_ctx->timer.id, ebi); - ebr_ctx->timer.sec = sec; - } - } - - if ( (ebr_ctx->args != NULL) && (ebr_ctx->timer.id != NAS_TIMER_INACTIVE_ID) ) { - LOG_TRACE(INFO, "ESM-FSM - Retransmission timer %d expires in " - "%ld seconds", ebr_ctx->timer.id, ebr_ctx->timer.sec); - LOG_FUNC_RETURN (RETURNok); - } else { - LOG_TRACE(ERROR, "ESM-FSM - ebr_ctx->args == NULL(%p) or ebr_ctx->timer.id == NAS_TIMER_INACTIVE_ID == -1 (%d)" , - ebr_ctx->args, - ebr_ctx->timer.id); - } - - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_stop_timer() ** - ** ** - ** Description: Stop the timer previously started for the given EPS bea- ** - ** rer context ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -int esm_ebr_stop_timer(emm_data_context_t *ctx, int ebi) -{ - esm_ebr_context_t *ebr_ctx ; - - LOG_FUNC_IN; - - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* Get EPS bearer context data */ - ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; - - if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { - /* EPS bearer context not assigned */ - LOG_FUNC_RETURN (RETURNerror); - } - - /* Stop the retransmission timer if still running */ - if (ebr_ctx->timer.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "ESM-FSM - Stop retransmission timer %d", - ebr_ctx->timer.id); - ebr_ctx->timer.id = nas_timer_stop(ebr_ctx->timer.id); - MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u stopped",ebr_ctx->timer.id, ebi); - } - - /* Release the retransmisison timer parameters */ - if (ebr_ctx->args) { - if (ebr_ctx->args->msg.length > 0) { - free(ebr_ctx->args->msg.value); - } - - free(ebr_ctx->args); - ebr_ctx->args = NULL; - } - - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_get_pending_ebi() ** - ** ** - ** Description: Returns the EPS bearer identity assigned to the first EPS ** - ** bearer context entry which is pending in the given state ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** status: The EPS bearer context status ** - ** Others: _esm_ebr_data ** - ** ** - ** Outputs: None ** - ** Return: The EPS bearer identity of the EPS bearer ** - ** context entry if it exists; ** - ** the not assigned EBI (0) otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_ebr_get_pending_ebi(emm_data_context_t *ctx, esm_ebr_state status) -{ - int i; - - LOG_FUNC_IN; - - for (i = 0; i < ESM_EBR_DATA_SIZE; i++) { - if (ctx->esm_data_ctx.ebr.context[i] == NULL) { - continue; - } - - if (ctx->esm_data_ctx.ebr.context[i]->status != status) { - continue; - } - - /* EPS bearer context entry found */ - break; - } - - if (i < ESM_EBR_DATA_SIZE) { - LOG_FUNC_RETURN (ctx->esm_data_ctx.ebr.context[i]->ebi); - } - - /* EPS bearer context entry not found */ - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_set_status() ** - ** ** - ** Description: Set the status of the specified EPS bearer context to the ** - ** given state ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer ** - ** status: The new EPS bearer context status ** - ** ue_requested: TRUE/FALSE if the modification of the EPS ** - ** bearer context status was requested by the ** - ** UE/network ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _esm_ebr_data ** - ** ** - ***************************************************************************/ -int esm_ebr_set_status( - emm_data_context_t *ctx, - int ebi, esm_ebr_state status, int ue_requested) -{ - esm_ebr_context_t *ebr_ctx; - esm_ebr_state old_status; - - LOG_FUNC_IN; - - if (ctx == NULL) { - LOG_FUNC_RETURN (RETURNerror); - } - - - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* Get EPS bearer context data */ - ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; - - if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { - /* EPS bearer context not assigned */ - LOG_TRACE(ERROR, "ESM-FSM - EPS bearer context not assigned " - "(ebi=%d)", ebi); - LOG_FUNC_RETURN (RETURNerror); - } - - old_status = ebr_ctx->status; - - if (status < ESM_EBR_STATE_MAX) { - if (status != old_status) { - LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d changed:" - " %s ===> %s", ebi, - _esm_ebr_state_str[old_status], _esm_ebr_state_str[status]); - MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 ESM state %s => %s "NAS_UE_ID_FMT" ", - _esm_ebr_state_str[old_status], _esm_ebr_state_str[status], ctx->ueid); - - ebr_ctx->status = status; - LOG_FUNC_RETURN (RETURNok); - } else { - LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d unchanged:" - " %s ", ebi, _esm_ebr_state_str[status]); - } - } - - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_get_status() ** - ** ** - ** Description: Get the current status value of the specified EPS bearer ** - ** context ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer ** - ** Others: _esm_ebr_data ** - ** ** - ** Outputs: None ** - ** Return: The current value of the EPS bearer con- ** - ** text status ** - ** Others: None ** - ** ** - ***************************************************************************/ -esm_ebr_state esm_ebr_get_status( - emm_data_context_t *ctx, - int ebi) -{ - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - return (ESM_EBR_INACTIVE); - } - - if (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN] == NULL) { - /* EPS bearer context not allocated */ - return (ESM_EBR_INACTIVE); - } - - if (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]->ebi != ebi) { - /* EPS bearer context not assigned */ - return (ESM_EBR_INACTIVE); - } - - return (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]->status); -} - - -/**************************************************************************** - ** ** - ** Name: esm_ebr_is_reserved() ** - ** ** - ** Description: Check whether the given EPS bearer identity is a reserved ** - ** value ** - ** ** - ** Inputs: ebi: The identity of the EPS bearer ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: TRUE, FALSE ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_ebr_is_reserved(int ebi) -{ - return ( (ebi != ESM_EBI_UNASSIGNED) && (ebi < ESM_EBI_MIN) ); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_is_not_in_use() ** - ** ** - ** Description: Check whether the given EPS bearer identity does not ** - ** match an assigned EBI value currently in use ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** ebi: The identity of the EPS bearer ** - ** Others: _esm_ebr_data ** - ** ** - ** Outputs: None ** - ** Return: TRUE, FALSE ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_ebr_is_not_in_use( - emm_data_context_t *ctx, - int ebi) -{ - - return ( (ebi == ESM_EBI_UNASSIGNED) || - (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN] == NULL) || - (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]->ebi) != ebi); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: _esm_ebr_get_available_entry() ** - ** ** - ** Description: Returns the index of the next available entry in the list ** - ** of EPS bearer context data ** - ** ** - ** Inputs: ueid: Lower layers UE identifier ** - ** Others: _esm_ebr_data ** - ** ** - ** Outputs: None ** - ** Return: The index of the next available EPS bearer ** - ** context data entry; -1 if no any entry is ** - ** available. ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _esm_ebr_get_available_entry(emm_data_context_t *ctx) -{ - int i; - - for (i = ctx->esm_data_ctx.ebr.index; i < ESM_EBR_DATA_SIZE; i++) { - if (ctx->esm_data_ctx.ebr.context[i] != NULL) { - continue; - } - - return i; - } - - for (i = 0; i < ctx->esm_data_ctx.ebr.index; i++) { - if (ctx->esm_data_ctx.ebr.context[i] != NULL) { - continue; - } - - return i; - } - - /* No available EBI entry found */ - return (-1); -} diff --git a/openair-cn/NAS/MME/ESM/esm_ebr.h b/openair-cn/NAS/MME/ESM/esm_ebr.h deleted file mode 100644 index bacd62802c..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_ebr.h +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_ebr.h - -Version 0.1 - -Date 2013/01/29 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle state of EPS bearer contexts - and manage ESM messages re-transmission. - -*****************************************************************************/ -#ifndef __ESM_EBR_H__ -#define __ESM_EBR_H__ - -#include "OctetString.h" -#include "nas_timer.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Unassigned EPS bearer identity value */ -#define ESM_EBI_UNASSIGNED (EPS_BEARER_IDENTITY_UNASSIGNED) - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int esm_ebr_is_reserved(int ebi); - -void esm_ebr_initialize(void); -int esm_ebr_assign(emm_data_context_t *ctx, int ebi); -int esm_ebr_release(emm_data_context_t *ctx, int ebi); - -int esm_ebr_start_timer(emm_data_context_t *ctx, int ebi, const OctetString *msg, - long sec, nas_timer_callback_t cb); -int esm_ebr_stop_timer(emm_data_context_t *ctx, int ebi); - -int esm_ebr_get_pending_ebi(emm_data_context_t *ctx, esm_ebr_state status); - -int esm_ebr_set_status(emm_data_context_t *ctx, int ebi, esm_ebr_state status, - int ue_requested); -esm_ebr_state esm_ebr_get_status(emm_data_context_t *ctx, int ebi); - -int esm_ebr_is_not_in_use(emm_data_context_t *ctx, int ebi); - -#endif /* __ESM_EBR_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_ebr_context.c b/openair-cn/NAS/MME/ESM/esm_ebr_context.c deleted file mode 100644 index db0d99500f..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_ebr_context.c +++ /dev/null @@ -1,431 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_ebr_context.h - -Version 0.1 - -Date 2013/05/28 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle EPS bearer contexts. - -*****************************************************************************/ -#include // malloc, free -#include // memset - -#include "commonDef.h" -#include "nas_log.h" - -#include "emmData.h" -#include "esm_ebr.h" - -#include "esm_ebr_context.h" - -#include "emm_sap.h" - -#if defined(ENABLE_ITTI) -# include "assertions.h" -#endif - - - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: esm_ebr_context_create() ** - ** ** - ** Description: Creates a new EPS bearer context to the PDN with the spe- ** - ** cified PDN connection identifier ** - ** ** - ** Inputs: ueid: UE identifier ** - ** pid: PDN connection identifier ** - ** ebi: EPS bearer identity ** - ** is_default: TRUE if the new bearer is a default EPS ** - ** bearer context ** - ** esm_qos: EPS bearer level QoS parameters ** - ** tft: Traffic flow template parameters ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The EPS bearer identity of the default EPS ** - ** bearer associated to the new EPS bearer ** - ** context if successfully created; ** - ** UNASSIGN EPS bearer value otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int esm_ebr_context_create( - emm_data_context_t *ctx, - int pid, int ebi, int is_default, - const network_qos_t *qos, const network_tft_t *tft) -{ - int bid = 0; - esm_data_context_t *esm_ctx = NULL; - esm_pdn_t *pdn = NULL; - unsigned int ueid = 0; - - LOG_FUNC_IN; - - -# if defined(NAS_BUILT_IN_EPC) - esm_ctx = &ctx->esm_data_ctx; -# else - - if (ueid < ESM_DATA_NB_UE_MAX) { - ctx = _esm_data.ctx[ueid]; - } else { - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - -# endif - - bid = ESM_DATA_EPS_BEARER_MAX; - - LOG_TRACE(INFO, "ESM-PROC - Create new %s EPS bearer context (ebi=%d) " - "for PDN connection (pid=%d)", - (is_default)? "default" : "dedicated", ebi, pid); - - if (pid < ESM_DATA_PDN_MAX) { - if (pid != esm_ctx->pdn[pid].pid) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d is " - "not valid", pid); - } else if (esm_ctx->pdn[pid].data == NULL) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " - "allocated", pid); - } - /* Check the total number of active EPS bearers */ - else if (esm_ctx->n_ebrs > ESM_DATA_EPS_BEARER_TOTAL) { - LOG_TRACE(WARNING, "ESM-PROC - The total number of active EPS" - "bearers is exceeded"); - } else { - /* Get the PDN connection entry */ - pdn = esm_ctx->pdn[pid].data; - - if (is_default) { - /* Default EPS bearer entry is defined at index 0 */ - bid = 0; - - if (pdn->bearer[bid] != NULL) { - LOG_TRACE(ERROR, "ESM-PROC - A default EPS bearer context " - "is already allocated"); - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - } else { - /* Search for an available EPS bearer context entry */ - for (bid = 1; bid < ESM_DATA_EPS_BEARER_MAX; bid++) { - if (pdn->bearer[bid] != NULL) { - continue; - } - - break; - } - } - } - } - - if (bid < ESM_DATA_EPS_BEARER_MAX) { - /* Create new EPS bearer context */ - esm_bearer_t *ebr = (esm_bearer_t *)malloc(sizeof(esm_bearer_t)); - - if (ebr != NULL) { - memset(ebr, 0 , sizeof(esm_bearer_t)); - /* Increment the total number of active EPS bearers */ - esm_ctx->n_ebrs += 1; - /* Increment the number of EPS bearer for this PDN connection */ - pdn->n_bearers += 1; - /* Setup the EPS bearer data */ - pdn->bearer[bid] = ebr; - ebr->bid = bid; - ebr->ebi = ebi; - - if (qos != NULL) { - /* EPS bearer level QoS parameters */ - ebr->qos = *qos; - } - - if ( (tft != NULL) && (tft->n_pkfs < NET_PACKET_FILTER_MAX) ) { - int i; - - /* Traffic flow template parameters */ - for (i = 0; i < tft->n_pkfs; i++) { - ebr->tft.pkf[i] = - (network_pkf_t *)malloc(sizeof(network_pkf_t)); - - if (ebr->tft.pkf[i] != NULL) { - *(ebr->tft.pkf[i]) = *(tft->pkf[i]); - ebr->tft.n_pkfs += 1; - } - } - } - - if (is_default) { - /* Set the PDN connection activation indicator */ - esm_ctx->pdn[pid].is_active = TRUE; - - /* Update the emergency bearer services indicator */ - if (pdn->is_emergency) { - esm_ctx->emergency = TRUE; - } - - - } - - /* Return the EPS bearer identity of the default EPS bearer - * associated to the new EPS bearer context */ - LOG_FUNC_RETURN (pdn->bearer[0]->ebi); - } - - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new EPS bearer " - "context (ebi=%d)", ebi); - } - - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); -} - -/**************************************************************************** - ** ** - ** Name: esm_ebr_context_release() ** - ** ** - ** Description: Releases EPS bearer context entry previously allocated ** - ** to the EPS bearer with the specified EPS bearer identity ** - ** ** - ** Inputs: ueid: UE identifier ** - ** ebi: EPS bearer identity ** - ** Others: _esm_data ** - ** ** - ** Outputs: pid: Identifier of the PDN connection entry the ** - ** EPS bearer context belongs to ** - ** bid: Identifier of the released EPS bearer con- ** - ** text entry ** - ** Return: The EPS bearer identity associated to the ** - ** EPS bearer context if successfully relea- ** - ** sed; UNASSIGN EPS bearer value otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int esm_ebr_context_release( - emm_data_context_t *ctx, - int ebi, int *pid, int *bid) -{ - int found = FALSE; - esm_pdn_t *pdn = NULL; - esm_data_context_t *esm_ctx; - - unsigned int ueid = 0; - - LOG_FUNC_IN; - - - -# if defined(NAS_BUILT_IN_EPC) - esm_ctx = &ctx->esm_data_ctx; -# else - - if (ueid < ESM_DATA_NB_UE_MAX) { - ctx = &_esm_data.ctx[ueid]; - } else { - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - -# endif - - if (ebi != ESM_EBI_UNASSIGNED) { - /* - * The identity of the EPS bearer to released is given; - * Release the EPS bearer context entry that match the specified EPS - * bearer identity - */ - - /* Search for active PDN connection */ - for (*pid = 0; *pid < ESM_DATA_PDN_MAX; (*pid)++) { - if ( !esm_ctx->pdn[*pid].is_active ) { - continue; - } - - /* An active PDN connection is found */ - if (esm_ctx->pdn[*pid].data != NULL) { - pdn = esm_ctx->pdn[*pid].data; - - /* Search for the specified EPS bearer context entry */ - for (*bid = 0; *bid < pdn->n_bearers; (*bid)++) { - if (pdn->bearer[*bid] != NULL) { - if (pdn->bearer[*bid]->ebi != ebi) { - continue; - } - - /* The EPS bearer context entry is found */ - found = TRUE; - break; - } - } - } - - if (found) { - break; - } - } - } else { - /* - * The identity of the EPS bearer to released is not given; - * Release the EPS bearer context entry allocated with the EPS - * bearer context identifier (bid) to establish connectivity to - * the PDN identified by the PDN connection identifier (pid). - * Default EPS bearer to a given PDN is always identified by the - * first EPS bearer context entry at index bid = 0 - */ - if (*pid < ESM_DATA_PDN_MAX) { - if (*pid != esm_ctx->pdn[*pid].pid) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d " - "is not valid", *pid); - } else if (!esm_ctx->pdn[*pid].is_active) { - LOG_TRACE(WARNING,"ESM-PROC - PDN connection %d is not active", - *pid); - } else if (esm_ctx->pdn[*pid].data == NULL) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " - "allocated", *pid); - } else { - pdn = esm_ctx->pdn[*pid].data; - - if (pdn->bearer[*bid] != NULL) { - ebi = pdn->bearer[*bid]->ebi; - found = TRUE; - } - } - } - } - - if (found) { - int i, j; - - /* - * Delete the specified EPS bearer context entry - */ - if (pdn->bearer[*bid]->bid != *bid) { - LOG_TRACE(ERROR, "ESM-PROC - EPS bearer identifier %d is " - "not valid", *bid); - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - - LOG_TRACE(WARNING, "ESM-PROC - Release EPS bearer context " - "(ebi=%d)", ebi); - - /* Delete the TFT */ - for (i = 0; i < pdn->bearer[*bid]->tft.n_pkfs; i++) { - free(pdn->bearer[*bid]->tft.pkf[i]); - } - - /* Release the specified EPS bearer data */ - free(pdn->bearer[*bid]); - pdn->bearer[*bid] = NULL; - /* Decrement the number of EPS bearer context allocated - * to the PDN connection */ - pdn->n_bearers -= 1; - /* Decrement the total number of active EPS bearers */ - esm_ctx->n_ebrs -= 1; - - if (*bid == 0) { - /* 3GPP TS 24.301, section 6.4.4.3, 6.4.4.6 - * If the EPS bearer identity is that of the default bearer to a - * PDN, the UE shall delete all EPS bearer contexts associated to - * that PDN connection. - */ - for (i = 1; pdn->n_bearers > 0; i++) { - if (pdn->bearer[i]) { - - LOG_TRACE(WARNING, "ESM-PROC - Release EPS bearer context " - "(ebi=%d)", pdn->bearer[i]->ebi); - - /* Delete the TFT */ - for (j = 0; j < pdn->bearer[i]->tft.n_pkfs; j++) { - free(pdn->bearer[i]->tft.pkf[j]); - } - - /* Set the EPS bearer context state to INACTIVE */ - - (void) esm_ebr_set_status(ctx, pdn->bearer[i]->ebi, - ESM_EBR_INACTIVE, TRUE); - - /* Release EPS bearer data */ - (void) esm_ebr_release(ctx, pdn->bearer[i]->ebi); - // esm_ebr_release() - /* Release dedicated EPS bearer data */ - free(pdn->bearer[i]); - pdn->bearer[i] = NULL; - /* Decrement the number of EPS bearer context allocated - * to the PDN connection */ - pdn->n_bearers -= 1; - /* Decrement the total number of active EPS bearers */ - esm_ctx->n_ebrs -= 1; - } - } - - /* Reset the PDN connection activation indicator */ - esm_ctx->pdn[*pid].is_active = FALSE; - - /* Update the emergency bearer services indicator */ - if (pdn->is_emergency) { - esm_ctx->emergency = FALSE; - } - } - - if (esm_ctx->n_ebrs == 0) { - /* TODO: Release the PDN connection and marked the UE as inactive - * in the network for EPS services (is_attached = FALSE) */ - } - - LOG_FUNC_RETURN (ebi); - } - - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - diff --git a/openair-cn/NAS/MME/ESM/esm_ebr_context.h b/openair-cn/NAS/MME/ESM/esm_ebr_context.h deleted file mode 100644 index c59661d768..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_ebr_context.h +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_ebr_context.h - -Version 0.1 - -Date 2013/05/28 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle EPS bearer contexts. - -*****************************************************************************/ -#ifndef __ESM_EBR_CONTEXT_H__ -#define __ESM_EBR_CONTEXT_H__ - -#include "networkDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -int esm_ebr_context_create(emm_data_context_t *ctx, int pid, int ebi, int is_default, - const network_qos_t *qos, const network_tft_t *tft); - -int esm_ebr_context_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid); - -#endif /* __ESM_EBR_CONTEXT_H__ */ diff --git a/openair-cn/NAS/MME/ESM/esm_ip.c b/openair-cn/NAS/MME/ESM/esm_ip.c deleted file mode 100644 index b2fb84b970..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_ip.c +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include "emmData.h" -#include "esmData.h" - -char ip_addr_str[100]; - -inline char *esm_data_get_ipv4_addr(const OctetString *ip_addr) -{ - if (ip_addr->length > 0) { - sprintf(ip_addr_str, "%u.%u.%u.%u", - ip_addr->value[0], ip_addr->value[1], - ip_addr->value[2], ip_addr->value[3]); - return ip_addr_str; - } - - return (NULL); -} - -inline char *esm_data_get_ipv6_addr(const OctetString *ip_addr) -{ - if (ip_addr->length > 0) { - sprintf(ip_addr_str, "%x%.2x:%x%.2x:%x%.2x:%x%.2x", - ip_addr->value[0], ip_addr->value[1], - ip_addr->value[2], ip_addr->value[3], - ip_addr->value[4], ip_addr->value[5], - ip_addr->value[6], ip_addr->value[7]); - return ip_addr_str; - } - - return (NULL); -} - -inline char *esm_data_get_ipv4v6_addr(const OctetString *ip_addr) -{ - if (ip_addr->length > 0) { - sprintf(ip_addr_str, "%u.%u.%u.%u / %x%.2x:%x%.2x:%x%.2x:%x%.2x", - ip_addr->value[0], ip_addr->value[1], - ip_addr->value[2], ip_addr->value[3], - ip_addr->value[4], ip_addr->value[5], - ip_addr->value[6], ip_addr->value[7], - ip_addr->value[8], ip_addr->value[9], - ip_addr->value[10], ip_addr->value[11]); - return ip_addr_str; - } - - return (NULL); -} diff --git a/openair-cn/NAS/MME/ESM/esm_main.c b/openair-cn/NAS/MME/ESM/esm_main.c deleted file mode 100644 index 3e883527b9..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_main.c +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_main.c - -Version 0.1 - -Date 2012/12/04 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the EPS Session Management procedure call manager, - the main entry point for elementary ESM processing. - -*****************************************************************************/ - -#include "esm_main.h" -#include "commonDef.h" -#include "nas_log.h" - -#include "emmData.h" -#include "esmData.h" -#include "esm_pt.h" -#include "esm_ebr.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -/**************************************************************************** - ** ** - ** Name: esm_main_initialize() ** - ** ** - ** Description: Initializes ESM internal data ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void esm_main_initialize(void) -{ - int i; - - LOG_FUNC_IN; - - /* Retreive MME supported configuration data */ - if (mme_api_get_esm_config(&_esm_data.conf) != RETURNok) { - LOG_TRACE(ERROR, "ESM-MAIN - Failed to get MME configuration data"); - } - -# if !defined(NAS_BUILT_IN_EPC) - - /* Initialize ESM contexts */ - for (i = 0; i < ESM_DATA_NB_UE_MAX; i++) { - _esm_data.ctx[i] = NULL; - } - -# endif - - /* Initialize the EPS bearer context manager */ - esm_ebr_initialize(); - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: esm_main_cleanup() ** - ** ** - ** Description: Performs the EPS Session Management clean up procedure ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void esm_main_cleanup(void) -{ - LOG_FUNC_IN; - - LOG_FUNC_OUT; -} - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/ESM/esm_main.h b/openair-cn/NAS/MME/ESM/esm_main.h deleted file mode 100644 index feb80c1c45..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_main.h +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_main.h - -Version 0.1 - -Date 2012/12/04 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the EPS Session Management procedure call manager, - the main entry point for elementary ESM processing. - -*****************************************************************************/ - -#ifndef __ESM_MAIN_H__ -#define __ESM_MAIN_H__ - -#include "networkDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -void esm_main_initialize(void); -void esm_main_cleanup(void); - - -#endif /* __ESM_MAIN_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_proc.h b/openair-cn/NAS/MME/ESM/esm_proc.h deleted file mode 100644 index 3015be6543..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_proc.h +++ /dev/null @@ -1,204 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_proc.h - -Version 0.1 - -Date 2013/01/02 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines the EPS Session Management procedures executed at - the ESM Service Access Points. - -*****************************************************************************/ -#ifndef __ESM_PROC_H__ -#define __ESM_PROC_H__ - -#include "networkDef.h" -#include "OctetString.h" -#include "emmData.h" -#include "ProtocolConfigurationOptions.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* - * ESM retransmission timers - * ------------------------- - */ - -#define T3485_DEFAULT_VALUE 8 /* Activate EPS bearer request */ -#define T3495_DEFAULT_VALUE 8 /* Deactivate EPS bearer request */ - -/* Type of PDN address */ -typedef enum { - ESM_PDN_TYPE_IPV4 = NET_PDN_TYPE_IPV4, - ESM_PDN_TYPE_IPV6 = NET_PDN_TYPE_IPV6, - ESM_PDN_TYPE_IPV4V6 = NET_PDN_TYPE_IPV4V6 -} esm_proc_pdn_type_t; - -/* Type of PDN request */ -typedef enum { - ESM_PDN_REQUEST_INITIAL = 1, - ESM_PDN_REQUEST_HANDOVER, - ESM_PDN_REQUEST_EMERGENCY -} esm_proc_pdn_request_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* - * Type of the ESM procedure callback executed when requested by the UE - * or initiated by the network - */ -typedef int (*esm_proc_procedure_t) (int, emm_data_context_t *, int, OctetString *, int); - -/* EPS bearer level QoS parameters */ -typedef network_qos_t esm_proc_qos_t; - -/* Traffic Flow Template for packet filtering */ -typedef network_tft_t esm_proc_tft_t; - -typedef ProtocolConfigurationOptions esm_proc_pco_t; - -/* PDN connection and EPS bearer context data */ -typedef struct { - OctetString apn; - esm_proc_pdn_type_t pdn_type; - OctetString pdn_addr; - esm_proc_qos_t qos; - esm_proc_tft_t tft; - esm_proc_pco_t pco; -} esm_proc_data_t; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * -------------------------------------------------------------------------- - * ESM status procedure - * -------------------------------------------------------------------------- - */ - - -int esm_proc_status_ind(emm_data_context_t *ctx, int pti, int ebi, int *esm_cause); -int esm_proc_status(int is_standalone, emm_data_context_t *ctx, int pti, - OctetString *msg, int sent_by_ue); - - -/* - * -------------------------------------------------------------------------- - * PDN connectivity procedure - * -------------------------------------------------------------------------- - */ - -int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, - esm_proc_pdn_request_t request_type, OctetString *apn, - esm_proc_pdn_type_t pdn_type, OctetString *pdn_addr, esm_proc_qos_t *esm_qos, - int *esm_cause); - -int esm_proc_pdn_connectivity_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered); -int esm_proc_pdn_connectivity_failure(emm_data_context_t *ctx, int pid); - -/* - * -------------------------------------------------------------------------- - * PDN disconnect procedure - * -------------------------------------------------------------------------- - */ - -int esm_proc_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int *esm_cause); - -int esm_proc_pdn_disconnect_accept(emm_data_context_t *ctx, int pid, int *esm_cause); -int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered); - -/* - * -------------------------------------------------------------------------- - * Default EPS bearer context activation procedure - * -------------------------------------------------------------------------- - */ -int esm_proc_default_eps_bearer_context(emm_data_context_t *ctx, int pid, - unsigned int *ebi, const esm_proc_qos_t *esm_qos, int *esm_cause); -int esm_proc_default_eps_bearer_context_request(int is_standalone, - emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); -int esm_proc_default_eps_bearer_context_failure(emm_data_context_t *ctx); - -int esm_proc_default_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause); -int esm_proc_default_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, - int *esm_cause); - - -/* - * -------------------------------------------------------------------------- - * Dedicated EPS bearer context activation procedure - * -------------------------------------------------------------------------- - */ -int esm_proc_dedicated_eps_bearer_context(emm_data_context_t *ctx, int pid, - unsigned int *ebi, unsigned int *default_ebi, const esm_proc_qos_t *qos, - const esm_proc_tft_t *tft, int *esm_cause); -int esm_proc_dedicated_eps_bearer_context_request(int is_standalone, - emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); - -int esm_proc_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause); -int esm_proc_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, - int *esm_cause); - - -/* - * -------------------------------------------------------------------------- - * EPS bearer context deactivation procedure - * -------------------------------------------------------------------------- - */ -int esm_proc_eps_bearer_context_deactivate(emm_data_context_t *ctx, int is_local, - int ebi, int *pid, int *bid, - int *esm_cause); -int esm_proc_eps_bearer_context_deactivate_request(int is_standalone, - emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); -int esm_proc_eps_bearer_context_deactivate_accept(emm_data_context_t *ctx, int ebi, - int *esm_cause); - - - -#endif /* __ESM_PROC_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_pt.c b/openair-cn/NAS/MME/ESM/esm_pt.c deleted file mode 100644 index d9e1be5150..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_pt.c +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_pt.c - -Version 0.1 - -Date 2013/01/03 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle ESM procedure transactions. - -*****************************************************************************/ - -#include "esm_pt.h" - - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/* - * Minimal and maximal value of a procedure transaction identity: - * The Procedure Transaction Identity (PTI) identifies bi-directional - * messages flows - */ -#define ESM_PTI_MIN (PROCEDURE_TRANSACTION_IDENTITY_FIRST) -#define ESM_PTI_MAX (PROCEDURE_TRANSACTION_IDENTITY_LAST) - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - - -/**************************************************************************** - ** ** - ** Name: esm_pt_is_reserved() ** - ** ** - ** Description: Check whether the given procedure transaction identity is ** - ** a reserved value ** - ** ** - ** Inputs: pti: The identity of the procedure transaction ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: TRUE, FALSE ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_pt_is_reserved(int pti) -{ - return ( (pti != ESM_PT_UNASSIGNED) && (pti > ESM_PTI_MAX) ); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/ESM/esm_pt.h b/openair-cn/NAS/MME/ESM/esm_pt.h deleted file mode 100644 index 2a2cf81202..0000000000 --- a/openair-cn/NAS/MME/ESM/esm_pt.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source esm_pt.h - -Version 0.1 - -Date 2013/01/03 - -Product NAS stack - -Subsystem EPS Session Management - -Author Frederic Maurel - -Description Defines functions used to handle ESM procedure transactions. - -*****************************************************************************/ -#ifndef __ESM_PT_H__ -#define __ESM_PT_H__ - -#include "ProcedureTransactionIdentity.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Unassigned procedure transaction identity value */ -#define ESM_PT_UNASSIGNED (PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED) - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int esm_pt_is_reserved(int pti); - - - -#endif /* __ESM_PT_H__*/ diff --git a/openair-cn/NAS/MME/MMEprocess.c b/openair-cn/NAS/MME/MMEprocess.c deleted file mode 100644 index abd29a0c14..0000000000 --- a/openair-cn/NAS/MME/MMEprocess.c +++ /dev/null @@ -1,345 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** - Source MMEprocess.c - - Version 0.1 - - Date 2013/02/26 - - Product NAS stack - - Subsystem MME NAS main process - - Author Frederic Maurel - - Description Implements the Non-Access Stratum protocol for Evolved Packet - system (EPS) running at the Network side. - - *****************************************************************************/ - -#include "commonDef.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "network_api.h" -#include "nas_network.h" -#include "nas_parser.h" - -#include // exit -#include // poll -#include // memset -#include // sigaction -#include - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -#define NAS_SLEEP_TIMEOUT 1000 /* 1 second */ - -static void *_nas_network_mngr(void *); - -static int _nas_set_signal_handler(int signal, void (handler)(int)); -static void _nas_signal_handler(int signal); - -static void _nas_clean(int net_fd); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/****************************************************************************/ -int main(int argc, const char *argv[]) -{ - /* - * Get the command line options - */ - if (nas_parser_get_options (argc, argv) != RETURNok) { - nas_parser_print_usage (FIRMWARE_VERSION); - exit (EXIT_FAILURE); - } - - /* - * Initialize logging trace utility - */ - nas_log_init (nas_parser_get_trace_level ()); - - const char *nhost = nas_parser_get_network_host (); - const char *nport = nas_parser_get_network_port (); - - LOG_TRACE (INFO, "MME-MAIN - %s -nhost %s -nport %s -trace 0x%x", argv[0], - nhost, nport, - nas_parser_get_trace_level ()); - - /* - * Initialize the Network interface - */ - if (network_api_initialize (nhost, nport) != RETURNok) { - LOG_TRACE (ERROR, "MME-MAIN - network_api_initialize() failed"); - exit (EXIT_FAILURE); - } - - int network_fd = network_api_get_fd (); - - /* - * Initialize the NAS contexts - */ - nas_network_initialize (); - - /* - * Initialize NAS timer handlers - */ - nas_timer_init (); - - /* - * Set up signal handlers - */ - (void) _nas_set_signal_handler (SIGINT, _nas_signal_handler); - (void) _nas_set_signal_handler (SIGTERM, _nas_signal_handler); - - pthread_attr_t attr; - pthread_attr_init (&attr); - pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - /* - * Start thread use to manage the network connection endpoint - */ - pthread_t network_mngr; - - if (pthread_create (&network_mngr, &attr, _nas_network_mngr, - &network_fd) != 0) { - LOG_TRACE (ERROR, "MME-MAIN - " - "Failed to create the network management thread"); - network_api_close (network_fd); - exit (EXIT_FAILURE); - } - - pthread_attr_destroy (&attr); - - /* - * Suspend execution of the main process until the network connection - * endpoint is still active - */ - while (network_fd != -1) { - poll (NULL, 0, NAS_SLEEP_TIMEOUT); - network_fd = network_api_get_fd (); - } - - /* Termination cleanup */ - _nas_clean (network_fd); - - LOG_TRACE - (WARNING, "MME-MAIN - NAS main process exited"); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: _nas_network_mngr() ** - ** ** - ** Description: Manages the connection endpoint use to communicate with ** - ** the network sublayer ** - ** ** - ** Inputs: fd: The descriptor of the network connection ** - ** endpoint ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_nas_network_mngr(void *args) -{ - LOG_FUNC_IN; - - int ret_code; - int network_message_id; - int bytes; - - int *fd = (int *) args; - - LOG_TRACE (INFO, "MME-MAIN - Network connection manager started (%d)", *fd); - - /* Network receiving loop */ - while (TRUE) { - /* Read the network data message */ - bytes = network_api_read_data (*fd); - - if (bytes == RETURNerror) { - /* Failed to read data from the network sublayer; - * exit from the receiving loop */ - LOG_TRACE (ERROR, "MME-MAIN - " - "Failed to read data from the network sublayer"); - break; - } - - if (bytes == 0) { - /* A signal was caught before any data were available */ - continue; - } - - /* Decode the network data message */ - network_message_id = network_api_decode_data (bytes); - - if (network_message_id == RETURNerror) { - /* Failed to decode data read from the network sublayer */ - continue; - } - - /* Process the network data message */ - ret_code = nas_network_process_data (network_message_id, - network_api_get_data ()); - - if (ret_code != RETURNok) { - /* The network data message has not been successfully - * processed */ - LOG_TRACE - (WARNING, "MME-MAIN - " - "The network procedure call 0x%x failed", - network_message_id); - } - } - - /* Close the connection to the network sublayer */LOG_TRACE (WARNING, - "MME-MAIN - " - "The network connection endpoint manager exited"); - - LOG_FUNC_RETURN(NULL); -} - -/**************************************************************************** - ** ** - ** Name: _nas_set_signal_handler() ** - ** ** - ** Description: Set up a signal handler ** - ** ** - ** Inputs: signal: Signal number ** - ** handler: Signal handler ** - ** Others: None ** - ** ** - ** Outputs: Return: RETURNerror, RETURNok ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _nas_set_signal_handler(int signal, void (handler)(int)) -{ - LOG_FUNC_IN; - - struct sigaction act; - - /* Initialize signal set */ - (void) memset (&act, 0, sizeof(act)); - (void) sigfillset (&act.sa_mask); - (void) sigdelset (&act.sa_mask, SIGHUP); - (void) sigdelset (&act.sa_mask, SIGINT); - (void) sigdelset (&act.sa_mask, SIGTERM); - (void) sigdelset (&act.sa_mask, SIGILL); - (void) sigdelset (&act.sa_mask, SIGTRAP); - (void) sigdelset (&act.sa_mask, SIGIOT); -#ifndef LINUX - (void) sigdelset (&act.sa_mask, SIGEMT); -#endif - (void) sigdelset (&act.sa_mask, SIGFPE); - (void) sigdelset (&act.sa_mask, SIGBUS); - (void) sigdelset (&act.sa_mask, SIGSEGV); - (void) sigdelset (&act.sa_mask, SIGSYS); - - /* Initialize signal handler */ - act.sa_handler = handler; - - if (sigaction (signal, &act, 0) < 0) { - return RETURNerror; - } - - LOG_TRACE (INFO, "MME-MAIN - Handler successfully set for signal %d", signal); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: _nas_signal_handler() ** - ** ** - ** Description: Signal handler ** - ** ** - ** Inputs: signal: Signal number ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void _nas_signal_handler(int signal) -{ - LOG_FUNC_IN; - - LOG_TRACE (WARNING, "MME-MAIN - Signal %d received", signal); - _nas_clean (network_api_get_fd ()); - exit (EXIT_SUCCESS); - - LOG_FUNC_OUT - ; -} - -/**************************************************************************** - ** ** - ** Name: _nas_clean() ** - ** ** - ** Description: Performs termination cleanup ** - ** ** - ** Inputs: net_fd: Network's connection file descriptor ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void _nas_clean(int net_fd) -{ - LOG_FUNC_IN; - - LOG_TRACE (INFO, "MME-MAIN - Perform EMM and ESM cleanup"); - nas_network_cleanup (); - - LOG_TRACE (INFO, "MME-MAIN - Closing network connection %d", net_fd); - network_api_close (net_fd); - - LOG_FUNC_OUT - ; -} - diff --git a/openair-cn/NAS/MME/nas_defs.h b/openair-cn/NAS/MME/nas_defs.h deleted file mode 100644 index e896d61fbc..0000000000 --- a/openair-cn/NAS/MME/nas_defs.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef NAS_DEFS_H_ -#define NAS_DEFS_H_ - -int nas_init(mme_config_t *mme_config_p); - -#endif /* NAS_DEFS_H_ */ diff --git a/openair-cn/NAS/MME/nas_itti_messaging.c b/openair-cn/NAS/MME/nas_itti_messaging.c deleted file mode 100644 index c22f408954..0000000000 --- a/openair-cn/NAS/MME/nas_itti_messaging.c +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include - -#include "intertask_interface.h" -#include "nas_itti_messaging.h" -#include "msc.h" - - -#define TASK_ORIGIN TASK_NAS_MME - - -#if defined(NAS_BUILT_IN_EPC) -static const uint8_t emm_message_ids[] = { - ATTACH_REQUEST, - ATTACH_ACCEPT, - ATTACH_COMPLETE, - ATTACH_REJECT, - DETACH_REQUEST, - DETACH_ACCEPT, - TRACKING_AREA_UPDATE_REQUEST, - TRACKING_AREA_UPDATE_ACCEPT, - TRACKING_AREA_UPDATE_COMPLETE, - TRACKING_AREA_UPDATE_REJECT, - EXTENDED_SERVICE_REQUEST, - SERVICE_REQUEST, - SERVICE_REJECT, - GUTI_REALLOCATION_COMMAND, - GUTI_REALLOCATION_COMPLETE, - AUTHENTICATION_REQUEST, - AUTHENTICATION_RESPONSE, - AUTHENTICATION_REJECT, - AUTHENTICATION_FAILURE, - IDENTITY_REQUEST, - IDENTITY_RESPONSE, - SECURITY_MODE_COMMAND, - SECURITY_MODE_COMPLETE, - SECURITY_MODE_REJECT, - EMM_STATUS, - EMM_INFORMATION, - DOWNLINK_NAS_TRANSPORT, - UPLINK_NAS_TRANSPORT, - CS_SERVICE_NOTIFICATION, -}; - -static const uint8_t esm_message_ids[] = { - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST, - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT, - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT, - ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST, - ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT, - ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT, - MODIFY_EPS_BEARER_CONTEXT_REQUEST, - MODIFY_EPS_BEARER_CONTEXT_ACCEPT, - MODIFY_EPS_BEARER_CONTEXT_REJECT, - DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST, - DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT, - PDN_CONNECTIVITY_REQUEST, - PDN_CONNECTIVITY_REJECT, - PDN_DISCONNECT_REQUEST, - PDN_DISCONNECT_REJECT, - BEARER_RESOURCE_ALLOCATION_REQUEST, - BEARER_RESOURCE_ALLOCATION_REJECT, - BEARER_RESOURCE_MODIFICATION_REQUEST, - BEARER_RESOURCE_MODIFICATION_REJECT, - ESM_INFORMATION_REQUEST, - ESM_INFORMATION_RESPONSE, - ESM_STATUS, -}; - -static int _nas_find_message_index(const uint8_t message_id, const uint8_t *message_ids, const int ids_number) -{ - int i; - - for(i = 0; i < ids_number; i ++) { - if (message_id == message_ids[i]) { - return (2 + i); - } - } - - return (1); -} - -int nas_itti_plain_msg(const char *buffer, const nas_message_t *msg, const int length, const int down_link) -{ - MessageDef *message_p; - int data_length = length < NAS_DATA_LENGHT_MAX ? length : NAS_DATA_LENGHT_MAX; - int message_type = -1; - MessagesIds messageId_raw = -1; - MessagesIds messageId_plain = -1; - - /* Define message ids */ - if (msg->header.protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { - message_type = 0; - messageId_raw = down_link ? NAS_DL_EMM_RAW_MSG : NAS_UL_EMM_RAW_MSG; - messageId_plain = down_link ? NAS_DL_EMM_PLAIN_MSG : NAS_UL_EMM_PLAIN_MSG; - } else { - if (msg->header.protocol_discriminator == EPS_SESSION_MANAGEMENT_MESSAGE) { - message_type = 1; - messageId_raw = down_link ? NAS_DL_ESM_RAW_MSG : NAS_UL_ESM_RAW_MSG; - messageId_plain = down_link ? NAS_DL_ESM_PLAIN_MSG : NAS_UL_ESM_PLAIN_MSG; - } - } - - if (message_type >= 0) { - /* Create and send the RAW message */ - message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_raw); - - NAS_DL_EMM_RAW_MSG(message_p).lenght = length; - memset ((void *) &(NAS_DL_EMM_RAW_MSG(message_p).data), 0, NAS_DATA_LENGHT_MAX); - memcpy ((void *) &(NAS_DL_EMM_RAW_MSG(message_p).data), buffer, data_length); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - /* Create and send the plain message */ - if (message_type == 0) { - message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_plain); - - NAS_DL_EMM_PLAIN_MSG(message_p).present = _nas_find_message_index(msg->plain.emm.header.message_type, emm_message_ids, sizeof(emm_message_ids) / sizeof(emm_message_ids[0])); - memcpy ((void *) &(NAS_DL_EMM_PLAIN_MSG(message_p).choice), &msg->plain.emm, sizeof (EMM_msg)); - } else { - message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_plain); - - NAS_DL_ESM_PLAIN_MSG(message_p).present = _nas_find_message_index(msg->plain.esm.header.message_type, esm_message_ids, sizeof(esm_message_ids) / sizeof(esm_message_ids[0])); - memcpy ((void *) &(NAS_DL_ESM_PLAIN_MSG(message_p).choice), &msg->plain.esm, sizeof (ESM_msg)); - } - - return itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - } - - return EXIT_FAILURE; -} - -int nas_itti_protected_msg(const char *buffer, const nas_message_t *msg, const int length, const int down_link) -{ - MessageDef *message_p = NULL; - - if (msg->header.protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { - message_p = itti_alloc_new_message(TASK_ORIGIN, down_link ? NAS_DL_EMM_PROTECTED_MSG : NAS_UL_EMM_PROTECTED_MSG); - - memcpy ((void *) &(NAS_DL_EMM_PROTECTED_MSG(message_p).header), &msg->header, sizeof (nas_message_security_header_t)); - NAS_DL_EMM_PROTECTED_MSG(message_p).present = _nas_find_message_index(msg->security_protected.plain.emm.header.message_type, emm_message_ids, sizeof(emm_message_ids) / sizeof(emm_message_ids[0])); - memcpy ((void *) &(NAS_DL_EMM_PROTECTED_MSG(message_p).choice), &msg->security_protected.plain.emm, sizeof (EMM_msg)); - } else { - if (msg->header.protocol_discriminator == EPS_SESSION_MANAGEMENT_MESSAGE) { - message_p = itti_alloc_new_message(TASK_ORIGIN, down_link ? NAS_DL_ESM_PROTECTED_MSG : NAS_UL_ESM_PROTECTED_MSG); - - memcpy ((void *) &(NAS_DL_ESM_PROTECTED_MSG(message_p).header), &msg->header, sizeof (nas_message_security_header_t)); - NAS_DL_ESM_PROTECTED_MSG(message_p).present = _nas_find_message_index(msg->security_protected.plain.esm.header.message_type, esm_message_ids, sizeof(esm_message_ids) / sizeof(esm_message_ids[0])); - memcpy ((void *) &(NAS_DL_ESM_PROTECTED_MSG(message_p).choice), &msg->security_protected.plain.esm, sizeof (ESM_msg)); - } - } - - if (message_p != NULL) { - return itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - } - - return EXIT_FAILURE; -} -#endif - -#if defined(NAS_BUILT_IN_EPC) -int nas_itti_dl_data_req(const uint32_t ue_id, void *const data, - const uint32_t length) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_DOWNLINK_DATA_REQ); - - NAS_DL_DATA_REQ(message_p).UEid = ue_id; - NAS_DL_DATA_REQ(message_p).nasMsg.data = data; - NAS_DL_DATA_REQ(message_p).nasMsg.length = length; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_S1AP_MME, - NULL,0, - "0 NAS_DOWNLINK_DATA_REQ ue id "NAS_UE_ID_FMT" len %u", ue_id, length); - - return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - -#endif - - diff --git a/openair-cn/NAS/MME/nas_itti_messaging.h b/openair-cn/NAS/MME/nas_itti_messaging.h deleted file mode 100644 index e18741f815..0000000000 --- a/openair-cn/NAS/MME/nas_itti_messaging.h +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "assertions.h" -#include "intertask_interface.h" -#include "esm_proc.h" -#include "msc.h" - -#ifndef NAS_ITTI_MESSAGING_H_ -#define NAS_ITTI_MESSAGING_H_ - -# if defined(NAS_BUILT_IN_EPC) -int nas_itti_plain_msg( - const char *buffer, - const nas_message_t *msg, - const int lengthP, - const int instance); - -int nas_itti_protected_msg( - const char *buffer, - const nas_message_t *msg, - const int lengthP, - const int instance); -# endif - -# if defined(NAS_BUILT_IN_EPC) -#include "conversions.h" - -int nas_itti_dl_data_req( - const uint32_t ue_idP, - void *const data_pP, - const uint32_t lengthP); - -static inline void nas_itti_pdn_connectivity_req( - int ptiP, - unsigned int ueidP, - const imsi_t *const imsi_pP, - esm_proc_data_t *proc_data_pP, - esm_proc_pdn_request_t request_typeP) -{ - MessageDef *message_p = NULL; - uint8_t i; - uint8_t index; - - AssertFatal(imsi_pP != NULL, "imsi_pP param is NULL"); - AssertFatal(proc_data_pP != NULL, "proc_data_pP param is NULL"); - - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_PDN_CONNECTIVITY_REQ); - memset(&message_p->ittiMsg.nas_pdn_connectivity_req, - 0, - sizeof(nas_pdn_connectivity_req_t)); - - hexa_to_ascii((uint8_t *)imsi_pP->u.value, - NAS_PDN_CONNECTIVITY_REQ(message_p).imsi, - 8); - - NAS_PDN_CONNECTIVITY_REQ(message_p).pti = ptiP; - NAS_PDN_CONNECTIVITY_REQ(message_p).ue_id = ueidP; - NAS_PDN_CONNECTIVITY_REQ(message_p).imsi[15] = '\0'; - - if (isdigit(NAS_PDN_CONNECTIVITY_REQ(message_p).imsi[14])) { - NAS_PDN_CONNECTIVITY_REQ(message_p).imsi_length = 15; - } else { - NAS_PDN_CONNECTIVITY_REQ(message_p).imsi_length = 14; - NAS_PDN_CONNECTIVITY_REQ(message_p).imsi[14] = '\0'; - } - - DUP_OCTET_STRING(proc_data_pP->apn, NAS_PDN_CONNECTIVITY_REQ(message_p).apn); - DUP_OCTET_STRING(proc_data_pP->pdn_addr, NAS_PDN_CONNECTIVITY_REQ(message_p).pdn_addr); - - switch (proc_data_pP->pdn_type) { - case ESM_PDN_TYPE_IPV4: - NAS_PDN_CONNECTIVITY_REQ(message_p).pdn_type = IPv4; - break; - - case ESM_PDN_TYPE_IPV6: - NAS_PDN_CONNECTIVITY_REQ(message_p).pdn_type = IPv6; - break; - - case ESM_PDN_TYPE_IPV4V6: - NAS_PDN_CONNECTIVITY_REQ(message_p).pdn_type = IPv4_AND_v6; - break; - - default: - NAS_PDN_CONNECTIVITY_REQ(message_p).pdn_type = IPv4; - break; - } - - // not efficient but be careful about "typedef network_qos_t esm_proc_qos_t;" - NAS_PDN_CONNECTIVITY_REQ(message_p).qos.gbrUL = proc_data_pP->qos.gbrUL; - NAS_PDN_CONNECTIVITY_REQ(message_p).qos.gbrDL = proc_data_pP->qos.gbrDL; - NAS_PDN_CONNECTIVITY_REQ(message_p).qos.mbrUL = proc_data_pP->qos.mbrUL; - NAS_PDN_CONNECTIVITY_REQ(message_p).qos.mbrDL = proc_data_pP->qos.mbrDL; - NAS_PDN_CONNECTIVITY_REQ(message_p).qos.qci = proc_data_pP->qos.qci; - - NAS_PDN_CONNECTIVITY_REQ(message_p).proc_data = proc_data_pP; - - NAS_PDN_CONNECTIVITY_REQ(message_p).request_type = request_typeP; - - if (proc_data_pP->pco.num_protocol_id_or_container_id <= PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID) { - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[0] = ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_IEI; - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[1] = 1 + 3 * proc_data_pP->pco.num_protocol_id_or_container_id; - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[2] = 0x80; // do it fast - i = 0; - index = 3; - while (( i < proc_data_pP->pco.num_protocol_id_or_container_id) && - ((index + proc_data_pP->pco.protocolidcontents[i].length) <= PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_LENGTH)){ - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[1] += proc_data_pP->pco.lengthofprotocolid[i]; - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = (proc_data_pP->pco.protocolid[i] >> 8); - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = (proc_data_pP->pco.protocolid[i] & 0x00FF); - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = proc_data_pP->pco.lengthofprotocolid[i]; - if (proc_data_pP->pco.lengthofprotocolid[i] > 0) { - memcpy( &NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index], - proc_data_pP->pco.protocolidcontents[i].value, - proc_data_pP->pco.lengthofprotocolid[i]); - index += proc_data_pP->pco.lengthofprotocolid[i]; - } - i++; - } - NAS_PDN_CONNECTIVITY_REQ(message_p).pco.length = index; - } - - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 NAS_PDN_CONNECTIVITY_REQ ue id %06"PRIX32" IMSI %X", - ueidP, NAS_PDN_CONNECTIVITY_REQ(message_p).imsi); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - - - -static inline void nas_itti_establish_cnf( - const uint32_t ue_idP, - const nas_error_code_t error_codeP, - void *const data_pP, - const uint32_t lengthP, - const uint16_t selected_encryption_algorithmP, - const uint16_t selected_integrity_algorithmP) -{ - MessageDef *message_p = NULL; - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_CONNECTION_ESTABLISHMENT_CNF); - memset(&message_p->ittiMsg.nas_conn_est_cnf, - 0, - sizeof(nas_conn_est_cnf_t)); - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).UEid = ue_idP; - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).errCode = error_codeP; - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).nasMsg.data = data_pP; - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).nasMsg.length = lengthP; - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).selected_encryption_algorithm = selected_encryption_algorithmP; - NAS_CONNECTION_ESTABLISHMENT_CNF(message_p).selected_integrity_algorithm = selected_integrity_algorithmP; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 NAS_CONNECTION_ESTABLISHMENT_CNF ue id %06"PRIX32" len %u sea %x sia %x ", - ue_idP, lengthP, selected_encryption_algorithmP, selected_integrity_algorithmP); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - -static inline void nas_itti_auth_info_req( - const uint32_t ue_idP, - const imsi_t *const imsi_pP, - uint8_t initial_reqP, - const uint8_t *auts_pP) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_AUTHENTICATION_PARAM_REQ); - memset(&message_p->ittiMsg.nas_auth_param_req, - 0, - sizeof(nas_auth_param_req_t)); - - hexa_to_ascii((uint8_t *)imsi_pP->u.value, - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi, 8); - - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[15] = '\0'; - - if (isdigit(NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[14])) { - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi_length = 15; - } else { - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi_length = 14; - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[14] = '\0'; - } - - NAS_AUTHENTICATION_PARAM_REQ(message_p).initial_req = initial_reqP; - NAS_AUTHENTICATION_PARAM_REQ(message_p).ue_id = ue_idP; - - /* Re-synchronisation */ - if (auts_pP != NULL) { - NAS_AUTHENTICATION_PARAM_REQ(message_p).re_synchronization = 1; - memcpy(NAS_AUTHENTICATION_PARAM_REQ(message_p).auts, auts_pP, AUTS_LENGTH); - } else { - NAS_AUTHENTICATION_PARAM_REQ(message_p).re_synchronization = 0; - memset(NAS_AUTHENTICATION_PARAM_REQ(message_p).auts, 0, AUTS_LENGTH); - } - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 NAS_AUTHENTICATION_PARAM_REQ ue id %06"PRIX32" IMSI %s ", - ue_idP, NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - -static inline void nas_itti_establish_rej( - const uint32_t ue_idP, - const imsi_t *const imsi_pP - , uint8_t initial_reqP) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_AUTHENTICATION_PARAM_REQ); - memset(&message_p->ittiMsg.nas_auth_param_req, - 0, - sizeof(nas_auth_param_req_t)); - - hexa_to_ascii((uint8_t *)imsi_pP->u.value, - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi, 8); - - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[15] = '\0'; - - if (isdigit(NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[14])) { - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi_length = 15; - } else { - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi_length = 14; - NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi[14] = '\0'; - } - - NAS_AUTHENTICATION_PARAM_REQ(message_p).initial_req = initial_reqP; - NAS_AUTHENTICATION_PARAM_REQ(message_p).ue_id = ue_idP; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 NAS_AUTHENTICATION_PARAM_REQ ue id %06"PRIX32" IMSI %s (establish reject)", - ue_idP, NAS_AUTHENTICATION_PARAM_REQ(message_p).imsi); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} -# endif - - -#endif /* NAS_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/NAS/MME/nas_mme_task.c b/openair-cn/NAS/MME/nas_mme_task.c deleted file mode 100644 index 88939f93c2..0000000000 --- a/openair-cn/NAS/MME/nas_mme_task.c +++ /dev/null @@ -1,226 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" -#include "nas_defs.h" -#include "msc.h" - -#if !defined(DISABLE_USE_NAS) -# include "nas_network.h" -# include "nas_proc.h" -# include "emm_main.h" -# include "nas_log.h" -# include "nas_timer.h" -#endif - -#define NAS_ERROR(x, args...) do { fprintf(stderr, "[NAS] [E]"x, ##args); } while(0) -#define NAS_DEBUG(x, args...) do { fprintf(stdout, "[NAS] [D]"x, ##args); } while(0) -#define NAS_WARN(x, args...) do { fprintf(stdout, "[NAS] [W]"x, ##args); } while(0) - -static void *nas_intertask_interface(void *args_p) -{ - itti_mark_task_ready(TASK_NAS_MME); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p; - -next_message: - itti_receive_msg(TASK_NAS_MME, &received_message_p); - - switch (ITTI_MSG_ID(received_message_p)) { - case NAS_CONNECTION_ESTABLISHMENT_IND: { -#if defined(DISABLE_USE_NAS) - MessageDef *message_p; - nas_attach_req_t *nas_req_p; - s1ap_initial_ue_message_t *transparent; - - NAS_DEBUG("NAS abstraction: Generating NAS ATTACH REQ\n"); - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_ATTACH_REQ); - - nas_req_p = &message_p->ittiMsg.nas_attach_req; - transparent = &message_p->ittiMsg.nas_attach_req.transparent; - - nas_req_p->initial = INITIAL_REQUEST; - sprintf(nas_req_p->imsi, "%14llu", 20834123456789ULL); - - memcpy(transparent, &received_message_p->ittiMsg.nas_conn_est_ind.transparent, - sizeof(s1ap_initial_ue_message_t)); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -#else - nas_establish_ind_t *nas_est_ind_p; - - nas_est_ind_p = &received_message_p->ittiMsg.nas_conn_est_ind.nas; - - nas_proc_establish_ind(nas_est_ind_p->UEid, - nas_est_ind_p->tac, - nas_est_ind_p->initialNasMsg.data, - nas_est_ind_p->initialNasMsg.length); -#endif - } - break; - -#if defined(DISABLE_USE_NAS) - - case NAS_ATTACH_ACCEPT: { - itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, received_message_p); - goto next_message; - } - break; - - case NAS_AUTHENTICATION_REQ: { - MessageDef *message_p; - nas_auth_resp_t *nas_resp_p; - - NAS_DEBUG("NAS abstraction: Generating NAS AUTHENTICATION RESPONSE\n"); - - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_AUTHENTICATION_RESP); - - nas_resp_p = &message_p->ittiMsg.nas_auth_resp; - - memcpy(nas_resp_p->imsi, received_message_p->ittiMsg.nas_auth_req.imsi, 16); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); - } - break; -#else - - case NAS_UPLINK_DATA_IND: { - nas_proc_ul_transfer_ind(NAS_UL_DATA_IND(received_message_p).UEid, - NAS_UL_DATA_IND(received_message_p).nasMsg.data, - NAS_UL_DATA_IND(received_message_p).nasMsg.length); - } - break; - - case NAS_DOWNLINK_DATA_CNF: { - nas_proc_dl_transfer_cnf(NAS_DL_DATA_CNF(received_message_p).UEid); - } break; - - case NAS_DOWNLINK_DATA_REJ: { - nas_proc_dl_transfer_rej(NAS_DL_DATA_REJ(received_message_p).UEid); - } break; - - case NAS_AUTHENTICATION_PARAM_RSP: { - nas_proc_auth_param_res(&NAS_AUTHENTICATION_PARAM_RSP(received_message_p)); - } - break; - - case NAS_AUTHENTICATION_PARAM_FAIL: { - nas_proc_auth_param_fail(&NAS_AUTHENTICATION_PARAM_FAIL(received_message_p)); - } - break; -#endif - - case NAS_PDN_CONNECTIVITY_RSP: { - nas_proc_pdn_connectivity_res(&NAS_PDN_CONNECTIVITY_RSP(received_message_p)); - } - break; - - case NAS_PDN_CONNECTIVITY_FAIL: { - nas_proc_pdn_connectivity_fail(&NAS_PDN_CONNECTIVITY_FAIL(received_message_p)); - } - break; - - - case TIMER_HAS_EXPIRED: { -#if !defined(DISABLE_USE_NAS) - /* Call the NAS timer api */ - nas_timer_handle_signal_expiry(TIMER_HAS_EXPIRED(received_message_p).timer_id, - TIMER_HAS_EXPIRED(received_message_p).arg); -#endif - } - break; - - case S1AP_ENB_DEREGISTERED_IND: { -#if !defined(DISABLE_USE_NAS) - int i; - - for (i = 0; i < S1AP_ENB_DEREGISTERED_IND(received_message_p).nb_ue_to_deregister; i ++) { - nas_proc_deregister_ue(S1AP_ENB_DEREGISTERED_IND(received_message_p).mme_ue_s1ap_id[i]); - } - -#endif - } - break; - - case S1AP_DEREGISTER_UE_REQ: { -#if !defined(DISABLE_USE_NAS) - nas_proc_deregister_ue(S1AP_DEREGISTER_UE_REQ(received_message_p).mme_ue_s1ap_id); -#endif - } - break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); - } - break; - - default: { - NAS_DEBUG("Unkwnon message ID %d:%s from %s\n", - ITTI_MSG_ID(received_message_p), - ITTI_MSG_NAME(received_message_p), - ITTI_MSG_ORIGIN_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -int nas_init(mme_config_t *mme_config_p) -{ - NAS_DEBUG("Initializing NAS task interface\n"); - -#if !defined(DISABLE_USE_NAS) - nas_log_init(0x3F); - nas_network_initialize(mme_config_p); -#endif - - if (itti_create_task(TASK_NAS_MME, &nas_intertask_interface, - NULL) < 0) { - NAS_ERROR("Create task failed"); - NAS_DEBUG("Initializing NAS task interface: FAILED\n"); - return -1; - } - - NAS_DEBUG("Initializing NAS task interface: DONE\n"); - return 0; -} diff --git a/openair-cn/NAS/MME/nas_network.c b/openair-cn/NAS/MME/nas_network.c deleted file mode 100644 index 0af3aa3425..0000000000 --- a/openair-cn/NAS/MME/nas_network.c +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_network.h - -Version 0.1 - -Date 2012/09/20 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS procedure functions triggered by the network - -*****************************************************************************/ - -#include "nas_network.h" -#include "commonDef.h" -#include "nas_log.h" -#include "nas_timer.h" - -#include "as_message.h" -#include "nas_proc.h" - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: nas_network_initialize() ** - ** ** - ** Description: Initializes network internal data ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) -void nas_network_initialize(mme_config_t *mme_config_p) -#else -void nas_network_initialize(void) -#endif -{ - LOG_FUNC_IN; - - /* Initialize the internal NAS processing data */ -# if defined(NAS_BUILT_IN_EPC) - nas_timer_init(); - nas_proc_initialize(mme_config_p); -# else - nas_proc_initialize(); -# endif - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: nas_network_cleanup() ** - ** ** - ** Description: Performs clean up procedure before the system is shutdown ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void nas_network_cleanup(void) -{ - LOG_FUNC_IN; - - nas_proc_cleanup(); - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: nas_network_process_data() ** - ** ** - ** Description: Process Access Stratum messages received from the network ** - ** and call applicable NAS procedure function. ** - ** ** - ** Inputs: msg_id: AS message identifier ** - ** data: Generic pointer to data structure that has ** - ** to be processed ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok if the message has been success- ** - ** fully processed; RETURNerror otherwise ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_network_process_data(int msg_id, const void *data) -{ - LOG_FUNC_IN; - - const as_message_t *msg = (as_message_t *)(data); - int rc = RETURNok; - - /* Sanity check */ - if (msg_id != msg->msgID) { - LOG_TRACE(ERROR, "NET-MAIN - Message identifier 0x%x to process " - "is different from that of the network data (0x%x)", - msg_id, msg->msgID); - LOG_FUNC_RETURN (RETURNerror); - } - - switch (msg_id) { - - - case AS_NAS_ESTABLISH_IND: { - /* Received NAS signalling connection establishment indication */ - const nas_establish_ind_t *indication = &msg->msg.nas_establish_ind; - rc = nas_proc_establish_ind(indication->UEid, - indication->tac, - indication->initialNasMsg.data, - indication->initialNasMsg.length); - break; - } - - case AS_DL_INFO_TRANSFER_CNF: { - const dl_info_transfer_cnf_t *info = &msg->msg.dl_info_transfer_cnf; - - /* Received downlink data transfer confirm */ - if (info->errCode != AS_SUCCESS) { - LOG_TRACE(WARNING, "NET-MAIN - " - "Downlink NAS message not delivered"); - rc = nas_proc_dl_transfer_rej(info->UEid); - } else { - rc = nas_proc_dl_transfer_cnf(info->UEid); - } - - break; - } - - case AS_UL_INFO_TRANSFER_IND: { - const ul_info_transfer_ind_t *info = &msg->msg.ul_info_transfer_ind; - /* Received uplink data transfer indication */ - rc = nas_proc_ul_transfer_ind(info->UEid, - info->nasMsg.data, - info->nasMsg.length); - break; - } - - case AS_RAB_ESTABLISH_CNF: - break; - - default: - LOG_TRACE(ERROR, "NET-MAIN - Unexpected AS message type: 0x%x", - msg_id); - rc = RETURNerror; - break; - } - - LOG_FUNC_RETURN (rc); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/nas_network.h b/openair-cn/NAS/MME/nas_network.h deleted file mode 100644 index ef235dcdb7..0000000000 --- a/openair-cn/NAS/MME/nas_network.h +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_network.h - -Version 0.1 - -Date 2012/09/20 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS procedure functions triggered by the network - -*****************************************************************************/ - -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -#endif - -#ifndef __NAS_NETWORK_H__ -#define __NAS_NETWORK_H__ - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#if defined(NAS_BUILT_IN_EPC) -void nas_network_initialize(mme_config_t *mme_config_p); -#else -void nas_network_initialize(void); -#endif - -void nas_network_cleanup(void); - -int nas_network_process_data(int command_id, const void *data); - -const void *nas_network_get_data(void); - -#endif /* __NAS_NETWORK_H__*/ diff --git a/openair-cn/NAS/MME/nas_parser.c b/openair-cn/NAS/MME/nas_parser.c deleted file mode 100644 index af87d1ce97..0000000000 --- a/openair-cn/NAS/MME/nas_parser.c +++ /dev/null @@ -1,243 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_parser.c - -Version 0.1 - -Date 2012/02/27 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS command line parser - -*****************************************************************************/ - -#include "nas_parser.h" -#include "parser.h" - -#include // fprintf -#include // atoi - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* - * Identifiers of the NAS command line options - */ -enum { - NAS_PARSER_TRACE_LEVEL, /* Logging trace level */ - NAS_PARSER_NETWORK_HOST, /* Network layer's hostname */ - NAS_PARSER_NETWORK_PORT, /* Network layer's port number */ - NAS_PARSER_NB_OPTIONS -}; - -/* ----------------------------------------------------- - * Definition of the internal NAS command line structure - * ----------------------------------------------------- - * The command line is defined with a name (default is "NASprocess" - * but it will be replaced by the command name actually used at - * runtime), a number of options and the list of options. - * An option is defined with a name, an argument following the name, - * the usage displayed by the usage function and a default value. - */ -static parser_command_line_t nasParserCommandLine = { - "NASprocess", /* Command name */ - NAS_PARSER_NB_OPTIONS, /* Number of options */ - { /* Command line options */ - { - "-trace", "", "Logging trace level\t\t", - NAS_PARSER_DEFAULT_TRACE_LEVEL - }, - { - "-nhost", "", "Network layer's hostname\t", - NAS_PARSER_DEFAULT_NETWORK_HOSTNAME - }, - { - "-nport", "", "Network layer's port number\t", - NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER - }, - } -}; - -/* - * Converts a string, containing hexadecimal formatted integer, to an integer - */ -static int atohex(const char *a_char); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: nas_parser_print_usage() ** - ** ** - ** Description: Displays the command line options used to run the NAS ** - ** process and the firmware version defined at compilation ** - ** time ** - ** ** - ** Inputs: version: Firmware version ** - ** Others: None ** - ** ** - ** Outputs: Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void nas_parser_print_usage(const char *version) -{ - parser_print_usage(&nasParserCommandLine); - fprintf(stderr, "Version: %s\n", version); -} - -/**************************************************************************** - ** ** - ** Name: nas_parser_get_options() ** - ** ** - ** Description: Gets the command line options used to run the NAS process ** - ** ** - ** Inputs: argc: Number of options ** - ** argv: Pointer to the list of options ** - ** Others: None ** - ** ** - ** Outputs: Return: RETURNerror, RETURNok ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_parser_get_options(int argc, const char **argv) -{ - return parser_get_options(argc, argv, &nasParserCommandLine); -} - -/**************************************************************************** - ** ** - ** Name: nas_parser_get_nb_options() ** - ** ** - ** Description: Returns the number of the command line options used to ** - ** run the NAS process ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: Return: Number of command line options ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_parser_get_nb_options(void) -{ - return nasParserCommandLine.nb_options; -} - -/**************************************************************************** - ** ** - ** Name: nas_parser_get_trace_level() ** - ** ** - ** Description: Returns the value of the logging trace level ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: Return: Value of the logging trace level ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_parser_get_trace_level(void) -{ - return atohex( nasParserCommandLine.options[NAS_PARSER_TRACE_LEVEL].pvalue ); -} - -/**************************************************************************** - ** ** - ** Name: nas_parser_get_network_host() ** - ** ** - ** Description: Returns the value of the network layer hostname ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: Return: Value of the network layer hostname ** - ** Others: None ** - ** ** - ***************************************************************************/ -const char *nas_parser_get_network_host(void) -{ - return nasParserCommandLine.options[NAS_PARSER_NETWORK_HOST].pvalue; -} - -/**************************************************************************** - ** ** - ** Name: nas_parser_get_network_port() ** - ** ** - ** Description: Returns the value of the network layer port number ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: Return: Value of the network layer port number ** - ** Others: None ** - ** ** - ***************************************************************************/ -const char *nas_parser_get_network_port(void) -{ - return nasParserCommandLine.options[NAS_PARSER_NETWORK_PORT].pvalue; -} - - - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -static int atohex(const char *a_char) -{ - int result; - - for (result=0; a_char; a_char++) { - if (*a_char >= '0' && *a_char <= '9') { - result = (result << 4) + (*a_char - '0'); - } else if (*a_char >= 'A' && *a_char <= 'F') { - result = (result << 4) + (*a_char - 'A' + 10); - } else if (*a_char >= 'a' && *a_char <= 'f') { - result = (result << 4) + (*a_char - 'a' + 10); - } else { - break; - } - } - - return result; -} diff --git a/openair-cn/NAS/MME/nas_parser.h b/openair-cn/NAS/MME/nas_parser.h deleted file mode 100644 index c536c1375c..0000000000 --- a/openair-cn/NAS/MME/nas_parser.h +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_parser.h - -Version 0.1 - -Date 2012/02/27 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS command line parser - -*****************************************************************************/ -#ifndef __NAS_PARSER_H__ -#define __NAS_PARSER_H__ - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/* Logging trace level default value */ -#define NAS_PARSER_DEFAULT_TRACE_LEVEL "0" /* No trace */ - -/* Network layer default hostname */ -#define NAS_PARSER_DEFAULT_NETWORK_HOSTNAME "localhost" - -/* Network layer default port number */ -#define NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER "12000" - - - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void nas_parser_print_usage(const char *version); -int nas_parser_get_options(int argc, const char **argv); - -int nas_parser_get_nb_options(void); -int nas_parser_get_trace_level(void); -const char *nas_parser_get_network_host(void); -const char *nas_parser_get_network_port(void); - - -#endif /* __NAS_PARSER_H__*/ diff --git a/openair-cn/NAS/MME/nas_proc.c b/openair-cn/NAS/MME/nas_proc.c deleted file mode 100644 index 7fae146a89..0000000000 --- a/openair-cn/NAS/MME/nas_proc.c +++ /dev/null @@ -1,443 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_proc.c - -Version 0.1 - -Date 2012/09/20 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS procedure call manager - -*****************************************************************************/ - -#include "nas_proc.h" -#include "nas_log.h" - -#include "emm_main.h" -#include "emm_sap.h" - -#include "esm_main.h" -#include "esm_sap.h" -#include "msc.h" - -#include // sprintf - -/****************************************************************************/ -/**************** E X T E R N A L D E F I N I T I O N S ****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: nas_proc_initialize() ** - ** ** - ** Description: ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -# if defined(NAS_BUILT_IN_EPC) -void nas_proc_initialize(mme_config_t *mme_config_p) -{ - LOG_FUNC_IN; - - /* Initialize the EMM procedure manager */ - emm_main_initialize(mme_config_p); - - /* Initialize the ESM procedure manager */ - esm_main_initialize(); - - LOG_FUNC_OUT; -} -# else -void nas_proc_initialize(void) -{ - LOG_FUNC_IN; - - /* Initialize the EMM procedure manager */ - emm_main_initialize(); - - /* Initialize the ESM procedure manager */ - esm_main_initialize(); - - LOG_FUNC_OUT; -} -# endif - -/**************************************************************************** - ** ** - ** Name: nas_proc_cleanup() ** - ** ** - ** Description: Performs clean up procedure before the system is shutdown ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void nas_proc_cleanup(void) -{ - LOG_FUNC_IN; - - /* Perform the EPS Mobility Manager's clean up procedure */ - emm_main_cleanup(); - - /* Perform the EPS Session Manager's clean up procedure */ - esm_main_cleanup(); - - LOG_FUNC_OUT; -} - -/* - * -------------------------------------------------------------------------- - * NAS procedures triggered by the user - * -------------------------------------------------------------------------- - */ - - -/**************************************************************************** - ** ** - ** Name: nas_proc_establish_ind() ** - ** ** - ** Description: Processes the NAS signalling connection establishment ** - ** indication message received from the network ** - ** ** - ** Inputs: ueid: UE identifier ** - ** tac: The code of the tracking area the initia- ** - ** ting UE belongs to ** - ** data: The initial NAS message transfered within ** - ** the message ** - ** len: The length of the initial NAS message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_establish_ind(uint32_t ueid, tac_t tac, - const Byte_t *data, uint32_t len) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - if (len > 0) { - emm_sap_t emm_sap; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_ESTABLISH_REQ ue id "NAS_UE_ID_FMT" tac %u", ueid, tac); - /* - * Notify the EMM procedure call manager that NAS signalling - * connection establishment indication message has been received - * from the Access-Stratum sublayer - */ - emm_sap.primitive = EMMAS_ESTABLISH_REQ; - emm_sap.u.emm_as.u.establish.ueid = ueid; - emm_sap.u.emm_as.u.establish.NASmsg.length = len; - emm_sap.u.emm_as.u.establish.NASmsg.value = (uint8_t *)data; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_dl_transfer_cnf() ** - ** ** - ** Description: Processes the downlink data transfer confirm message re- ** - ** ceived from the network while NAS message has been succes-** - ** sfully delivered to the NAS sublayer on the receiver side.** - ** ** - ** Inputs: ueid: UE identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_dl_transfer_cnf(uint32_t ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND dl_transfer_conf ue id "NAS_UE_ID_FMT" ", ueid); - - /* - * Notify the EMM procedure call manager that downlink NAS message - * has been successfully delivered to the NAS sublayer on the - * receiver side - */ - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = TRUE; - emm_sap.u.emm_as.u.data.NASmsg.length = 0; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_dl_transfer_rej() ** - ** ** - ** Description: Processes the downlink data transfer confirm message re- ** - ** ceived from the network while NAS message has not been ** - ** delivered to the NAS sublayer on the receiver side. ** - ** ** - ** Inputs: ueid: UE identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_dl_transfer_rej(uint32_t ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND dl_transfer_reject ue id "NAS_UE_ID_FMT" ", ueid); - - /* - * Notify the EMM procedure call manager that transmission - * failure of downlink NAS message indication has been received - * from lower layers - */ - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = FALSE; - emm_sap.u.emm_as.u.data.NASmsg.length = 0; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_ul_transfer_ind() ** - ** ** - ** Description: Processes uplink data transfer indication message recei- ** - ** ved from the network ** - ** ** - ** Inputs: ueid: UE identifier ** - ** data: The transfered NAS message ** - ** len: The length of the NAS message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_ul_transfer_ind(uint32_t ueid, const Byte_t *data, uint32_t len) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - if (len > 0) { - emm_sap_t emm_sap; - /* - * Notify the EMM procedure call manager that data transfer - * indication has been received from the Access-Stratum sublayer - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND ue id "NAS_UE_ID_FMT" len %u", ueid, len); - - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = TRUE; - emm_sap.u.emm_as.u.data.NASmsg.length = len; - emm_sap.u.emm_as.u.data.NASmsg.value = (uint8_t *)data; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN (rc); -} - -# if defined(NAS_BUILT_IN_EPC) -int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_AUTHENTICATION_PARAM_RES"); - - emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_RES; - emm_sap.u.emm_cn.u.auth_res = emm_cn_auth_res; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_AUTHENTICATION_PARAM_FAIL"); - - emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_FAIL; - emm_sap.u.emm_cn.u.auth_fail = emm_cn_auth_fail; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_deregister_ue(uint32_t ue_id) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_DEREGISTER_UE ue_id "NAS_UE_ID_FMT" ",ue_id); - - emm_sap.primitive = EMMCN_DEREGISTER_UE; - emm_sap.u.emm_cn.u.deregister.UEid = ue_id; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_pdn_connectivity_res(emm_cn_pdn_res_t *emm_cn_pdn_res) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_PDN_CONNECTIVITY_RES"); - - emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_RES; - emm_sap.u.emm_cn.u.emm_cn_pdn_res = emm_cn_pdn_res; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_pdn_connectivity_fail(emm_cn_pdn_fail_t *emm_cn_pdn_fail) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_PDN_CONNECTIVITY_FAIL"); - - emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_FAIL; - emm_sap.u.emm_cn.u.emm_cn_pdn_fail = emm_cn_pdn_fail; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - - - -# endif - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair-cn/NAS/MME/nas_proc.h b/openair-cn/NAS/MME/nas_proc.h deleted file mode 100644 index a00060ed9d..0000000000 --- a/openair-cn/NAS/MME/nas_proc.h +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/***************************************************************************** -Source nas_proc.h - -Version 0.1 - -Date 2012/09/20 - -Product NAS stack - -Subsystem NAS main process - -Author Frederic Maurel - -Description NAS procedure call manager - -*****************************************************************************/ -#ifndef __NAS_PROC_H__ -#define __NAS_PROC_H__ - -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -# include "emm_cnDef.h" -#endif - -#include "commonDef.h" -#include "networkDef.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - - -# if defined(NAS_BUILT_IN_EPC) -void nas_proc_initialize(mme_config_t *mme_config_p); -# else -void nas_proc_initialize(void); -# endif - -void nas_proc_cleanup(void); - -/* - * -------------------------------------------------------------------------- - * NAS procedures triggered by the user - * -------------------------------------------------------------------------- - */ - - -/* - * -------------------------------------------------------------------------- - * NAS procedures triggered by the network - * -------------------------------------------------------------------------- - */ - - - -int nas_proc_establish_ind(uint32_t ueid, tac_t tac, const Byte_t *data, - uint32_t len); - -int nas_proc_dl_transfer_cnf(uint32_t ueid); -int nas_proc_dl_transfer_rej(uint32_t ueid); -int nas_proc_ul_transfer_ind(uint32_t ueid, const Byte_t *data, uint32_t len); - -/* - * -------------------------------------------------------------------------- - * NAS procedures triggered by the mme applicative layer - * -------------------------------------------------------------------------- - */ -#if defined(NAS_BUILT_IN_EPC) -int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res); -int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail); -int nas_proc_deregister_ue(uint32_t ue_id); -int nas_proc_pdn_connectivity_res(nas_pdn_connectivity_rsp_t *nas_pdn_connectivity_rsp); -int nas_proc_pdn_connectivity_fail(nas_pdn_connectivity_fail_t *nas_pdn_connectivity_fail); -#endif - -#endif /* __NAS_PROC_H__*/ diff --git a/openair-cn/NAS/TEST/AS_SIMULATOR/Makefile b/openair-cn/NAS/TEST/AS_SIMULATOR/Makefile index 94c27037e4..91146b1afa 100644 --- a/openair-cn/NAS/TEST/AS_SIMULATOR/Makefile +++ b/openair-cn/NAS/TEST/AS_SIMULATOR/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/TEST/NETWORK/Makefile b/openair-cn/NAS/TEST/NETWORK/Makefile index b9075e5c77..e6e03f1362 100644 --- a/openair-cn/NAS/TEST/NETWORK/Makefile +++ b/openair-cn/NAS/TEST/NETWORK/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/TEST/USER/Makefile b/openair-cn/NAS/TEST/USER/Makefile index 797d0614ab..f65e6ff557 100644 --- a/openair-cn/NAS/TEST/USER/Makefile +++ b/openair-cn/NAS/TEST/USER/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/TOOLS/Makefile b/openair-cn/NAS/TOOLS/Makefile index 9c3c54e602..d54edd3049 100644 --- a/openair-cn/NAS/TOOLS/Makefile +++ b/openair-cn/NAS/TOOLS/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/TOOLS/network.h b/openair-cn/NAS/TOOLS/network.h index 849c30f88f..54bf61a7b4 100644 --- a/openair-cn/NAS/TOOLS/network.h +++ b/openair-cn/NAS/TOOLS/network.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/TOOLS/ue_data.c b/openair-cn/NAS/TOOLS/ue_data.c index 5dcbdf79de..478119acda 100644 --- a/openair-cn/NAS/TOOLS/ue_data.c +++ b/openair-cn/NAS/TOOLS/ue_data.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/TOOLS/usim_data.c b/openair-cn/NAS/TOOLS/usim_data.c index ea867fef3c..ea046245ed 100644 --- a/openair-cn/NAS/TOOLS/usim_data.c +++ b/openair-cn/NAS/TOOLS/usim_data.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/Makefile b/openair-cn/NAS/UE/API/USER/Makefile index 8e7c24a4c4..d4981975fc 100644 --- a/openair-cn/NAS/UE/API/USER/Makefile +++ b/openair-cn/NAS/UE/API/USER/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/UE/API/USER/at_command.c b/openair-cn/NAS/UE/API/USER/at_command.c index c6f26a4b1b..dc4dd3c040 100644 --- a/openair-cn/NAS/UE/API/USER/at_command.c +++ b/openair-cn/NAS/UE/API/USER/at_command.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/at_command.h b/openair-cn/NAS/UE/API/USER/at_command.h index d1b74dc4c3..4c65b0cf2c 100644 --- a/openair-cn/NAS/UE/API/USER/at_command.h +++ b/openair-cn/NAS/UE/API/USER/at_command.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/at_error.c b/openair-cn/NAS/UE/API/USER/at_error.c index 440db34d9f..7b93fb5808 100644 --- a/openair-cn/NAS/UE/API/USER/at_error.c +++ b/openair-cn/NAS/UE/API/USER/at_error.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/at_error.h b/openair-cn/NAS/UE/API/USER/at_error.h index d03896a383..1554f3fa3e 100644 --- a/openair-cn/NAS/UE/API/USER/at_error.h +++ b/openair-cn/NAS/UE/API/USER/at_error.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/at_response.c b/openair-cn/NAS/UE/API/USER/at_response.c index 7d067d1cfc..68aa9137aa 100644 --- a/openair-cn/NAS/UE/API/USER/at_response.c +++ b/openair-cn/NAS/UE/API/USER/at_response.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/at_response.h b/openair-cn/NAS/UE/API/USER/at_response.h index 17c3ea0d81..2fa30fabeb 100644 --- a/openair-cn/NAS/UE/API/USER/at_response.h +++ b/openair-cn/NAS/UE/API/USER/at_response.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/tst/Makefile b/openair-cn/NAS/UE/API/USER/tst/Makefile index 867c3f697e..3ec0f767ca 100644 --- a/openair-cn/NAS/UE/API/USER/tst/Makefile +++ b/openair-cn/NAS/UE/API/USER/tst/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/UE/API/USER/tst/at_parser.c b/openair-cn/NAS/UE/API/USER/tst/at_parser.c index 7d0ca3f1e1..9700018386 100644 --- a/openair-cn/NAS/UE/API/USER/tst/at_parser.c +++ b/openair-cn/NAS/UE/API/USER/tst/at_parser.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/user_api.c b/openair-cn/NAS/UE/API/USER/user_api.c index 42e7cb1538..6762877ad0 100644 --- a/openair-cn/NAS/UE/API/USER/user_api.c +++ b/openair-cn/NAS/UE/API/USER/user_api.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/user_api.h b/openair-cn/NAS/UE/API/USER/user_api.h index d58b59577d..a71ab458d4 100644 --- a/openair-cn/NAS/UE/API/USER/user_api.h +++ b/openair-cn/NAS/UE/API/USER/user_api.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/user_indication.c b/openair-cn/NAS/UE/API/USER/user_indication.c index 79759a3253..a4e1b7cd93 100644 --- a/openair-cn/NAS/UE/API/USER/user_indication.c +++ b/openair-cn/NAS/UE/API/USER/user_indication.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USER/user_indication.h b/openair-cn/NAS/UE/API/USER/user_indication.h index 4cf762b609..74679fb52a 100644 --- a/openair-cn/NAS/UE/API/USER/user_indication.h +++ b/openair-cn/NAS/UE/API/USER/user_indication.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USIM/Makefile b/openair-cn/NAS/UE/API/USIM/Makefile index 8e7c24a4c4..d4981975fc 100644 --- a/openair-cn/NAS/UE/API/USIM/Makefile +++ b/openair-cn/NAS/UE/API/USIM/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/NAS/UE/API/USIM/aka_functions.h b/openair-cn/NAS/UE/API/USIM/aka_functions.h index 1bb4bbf021..0d1a6fe1df 100644 --- a/openair-cn/NAS/UE/API/USIM/aka_functions.h +++ b/openair-cn/NAS/UE/API/USIM/aka_functions.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USIM/usim_api.c b/openair-cn/NAS/UE/API/USIM/usim_api.c index e69e78ddec..64bc05d0c3 100644 --- a/openair-cn/NAS/UE/API/USIM/usim_api.c +++ b/openair-cn/NAS/UE/API/USIM/usim_api.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/API/USIM/usim_api.h b/openair-cn/NAS/UE/API/USIM/usim_api.h index 7b5a767d98..f7e85f95e7 100644 --- a/openair-cn/NAS/UE/API/USIM/usim_api.h +++ b/openair-cn/NAS/UE/API/USIM/usim_api.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/Attach.c b/openair-cn/NAS/UE/EMM/Attach.c index 3a0c079685..d7bdeb9120 100755 --- a/openair-cn/NAS/UE/EMM/Attach.c +++ b/openair-cn/NAS/UE/EMM/Attach.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/Authentication.c b/openair-cn/NAS/UE/EMM/Authentication.c index e0acb302ac..6285534450 100755 --- a/openair-cn/NAS/UE/EMM/Authentication.c +++ b/openair-cn/NAS/UE/EMM/Authentication.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/Detach.c b/openair-cn/NAS/UE/EMM/Detach.c index d494515107..7ec7a3d74d 100755 --- a/openair-cn/NAS/UE/EMM/Detach.c +++ b/openair-cn/NAS/UE/EMM/Detach.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/EmmStatusHdl.c b/openair-cn/NAS/UE/EMM/EmmStatusHdl.c index b81f7d5051..85d423fd23 100755 --- a/openair-cn/NAS/UE/EMM/EmmStatusHdl.c +++ b/openair-cn/NAS/UE/EMM/EmmStatusHdl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/Identification.c b/openair-cn/NAS/UE/EMM/Identification.c index b9d75f1917..80eede61be 100755 --- a/openair-cn/NAS/UE/EMM/Identification.c +++ b/openair-cn/NAS/UE/EMM/Identification.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/IdleMode.c b/openair-cn/NAS/UE/EMM/IdleMode.c index 78c21205e3..b04670819b 100755 --- a/openair-cn/NAS/UE/EMM/IdleMode.c +++ b/openair-cn/NAS/UE/EMM/IdleMode.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/IdleMode.h b/openair-cn/NAS/UE/EMM/IdleMode.h index 7f23bb1bf4..c0e13c9a7d 100755 --- a/openair-cn/NAS/UE/EMM/IdleMode.h +++ b/openair-cn/NAS/UE/EMM/IdleMode.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/LowerLayer.c b/openair-cn/NAS/UE/EMM/LowerLayer.c index 10f7c4ccc9..130fe1bb5d 100755 --- a/openair-cn/NAS/UE/EMM/LowerLayer.c +++ b/openair-cn/NAS/UE/EMM/LowerLayer.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/LowerLayer.h b/openair-cn/NAS/UE/EMM/LowerLayer.h index 4d9b4c5d39..80ee4acb2a 100755 --- a/openair-cn/NAS/UE/EMM/LowerLayer.h +++ b/openair-cn/NAS/UE/EMM/LowerLayer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c index 83ae79f428..13a55b3846 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c index b2def20a57..0d0301c392 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c index 51053ab925..40911608bf 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c index fc0e0524be..060329f2e5 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c index 6af83fd855..92df829b8d 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c index 9708f3a6be..65154d4d97 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c index 315ce0f8ff..7740b22e9b 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c index 386a4fd4b4..25924fd9f2 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c index 071b9a576c..08c3ff5ea1 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmNull.c b/openair-cn/NAS/UE/EMM/SAP/EmmNull.c index c1583d56e1..f36d579e5c 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmNull.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmNull.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c index 7db6e86b74..889d22663c 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c index 6b15df4a54..0dcaec5868 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c index ba40a549d8..24de58db86 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c index 2ee8b8dea6..18c41c8ad4 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c index 799914d119..1d78a97509 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c index 0578d8acfd..8385f4359f 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c index 51e28d2068..4f3dc54f46 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c index c4c053515d..a5b28bed43 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c index ead9ce7aa8..9f960082f0 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c index 3d9b593dbc..47744d8db9 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c index 7adb4e12fa..4539c63a93 100755 --- a/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_as.c b/openair-cn/NAS/UE/EMM/SAP/emm_as.c index 433b4e5304..daf2d50c33 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_as.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_as.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_as.h b/openair-cn/NAS/UE/EMM/SAP/emm_as.h index ca4fc449b7..1e46431a56 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_as.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_as.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h index fbd2a6b38e..f7b9fa23f8 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_esm.c b/openair-cn/NAS/UE/EMM/SAP/emm_esm.c index 4a5400e0c1..b4baca66af 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_esm.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esm.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_esm.h b/openair-cn/NAS/UE/EMM/SAP/emm_esm.h index 6967b97ca1..55c3b361a9 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_esm.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esm.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h index 215be4fa6d..8251ee57b9 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c index 59c78be3e2..83c5e5f1db 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h index e554f0f9e2..c929890e05 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_recv.c b/openair-cn/NAS/UE/EMM/SAP/emm_recv.c index de9347fcff..12efa89f86 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_recv.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_recv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_recv.h b/openair-cn/NAS/UE/EMM/SAP/emm_recv.h index a096eef376..71398f98d0 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_recv.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_recv.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_reg.c b/openair-cn/NAS/UE/EMM/SAP/emm_reg.c index ca19566cb9..7f20b25151 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_reg.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_reg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_reg.h b/openair-cn/NAS/UE/EMM/SAP/emm_reg.h index 62d333395c..9660f641c1 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_reg.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_reg.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h index 6a85d8923d..7f96326ffb 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_sap.c b/openair-cn/NAS/UE/EMM/SAP/emm_sap.c index 84184f4f76..2da5da75ce 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_sap.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_sap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_sap.h b/openair-cn/NAS/UE/EMM/SAP/emm_sap.h index c0c38d13a6..eda2bde514 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_sap.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_sap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_send.c b/openair-cn/NAS/UE/EMM/SAP/emm_send.c index 75431ae388..d8e434f5a2 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_send.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_send.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_send.h b/openair-cn/NAS/UE/EMM/SAP/emm_send.h index ea90bd1775..18c8eb37f0 100755 --- a/openair-cn/NAS/UE/EMM/SAP/emm_send.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_send.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/SecurityModeControl.c b/openair-cn/NAS/UE/EMM/SecurityModeControl.c index 359ce1ea2f..fd7e4c3991 100755 --- a/openair-cn/NAS/UE/EMM/SecurityModeControl.c +++ b/openair-cn/NAS/UE/EMM/SecurityModeControl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c b/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c index 6f74b4fbbe..d34e1f9f88 100755 --- a/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c +++ b/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c b/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c index fbec3f7060..ac7944d18b 100755 --- a/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c +++ b/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/emmData.h b/openair-cn/NAS/UE/EMM/emmData.h index 7a81600871..d3e720eab0 100755 --- a/openair-cn/NAS/UE/EMM/emmData.h +++ b/openair-cn/NAS/UE/EMM/emmData.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/emm_main.c b/openair-cn/NAS/UE/EMM/emm_main.c index 51b6b693fb..dbeacaa149 100755 --- a/openair-cn/NAS/UE/EMM/emm_main.c +++ b/openair-cn/NAS/UE/EMM/emm_main.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/emm_main.h b/openair-cn/NAS/UE/EMM/emm_main.h index 3d3d441843..b985f806a5 100755 --- a/openair-cn/NAS/UE/EMM/emm_main.h +++ b/openair-cn/NAS/UE/EMM/emm_main.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/EMM/emm_proc.h b/openair-cn/NAS/UE/EMM/emm_proc.h index 267a64fcef..65ebe4e8e2 100755 --- a/openair-cn/NAS/UE/EMM/emm_proc.h +++ b/openair-cn/NAS/UE/EMM/emm_proc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c b/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c index 65fdaf4b3e..6a9e140ad4 100755 --- a/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c +++ b/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c b/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c index b6b7fb13fa..1884590437 100755 --- a/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c +++ b/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c b/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c index a8a5a4c952..bceeebeff1 100755 --- a/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c +++ b/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/EsmStatusHdl.c b/openair-cn/NAS/UE/ESM/EsmStatusHdl.c index 8ff3a21b0b..9aafc271dd 100755 --- a/openair-cn/NAS/UE/ESM/EsmStatusHdl.c +++ b/openair-cn/NAS/UE/ESM/EsmStatusHdl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/PdnConnectivity.c b/openair-cn/NAS/UE/ESM/PdnConnectivity.c index 2cfc2f58f0..8c9d123209 100755 --- a/openair-cn/NAS/UE/ESM/PdnConnectivity.c +++ b/openair-cn/NAS/UE/ESM/PdnConnectivity.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/PdnDisconnect.c b/openair-cn/NAS/UE/ESM/PdnDisconnect.c index 54105a1c3b..e9ab748f8d 100755 --- a/openair-cn/NAS/UE/ESM/PdnDisconnect.c +++ b/openair-cn/NAS/UE/ESM/PdnDisconnect.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_recv.c b/openair-cn/NAS/UE/ESM/SAP/esm_recv.c index 77805030a7..72b322e966 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_recv.c +++ b/openair-cn/NAS/UE/ESM/SAP/esm_recv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_recv.h b/openair-cn/NAS/UE/ESM/SAP/esm_recv.h index f3c6a174d0..35e3ee49ce 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_recv.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_recv.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_sap.c b/openair-cn/NAS/UE/ESM/SAP/esm_sap.c index dd0c0114a9..d23aa07390 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_sap.c +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_sap.h b/openair-cn/NAS/UE/ESM/SAP/esm_sap.h index c2d900a4ae..693185c473 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_sap.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h b/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h index e36d1faed5..2430696319 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_send.c b/openair-cn/NAS/UE/ESM/SAP/esm_send.c index c5de9958ca..ab5341062a 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_send.c +++ b/openair-cn/NAS/UE/ESM/SAP/esm_send.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_send.h b/openair-cn/NAS/UE/ESM/SAP/esm_send.h index 4e261300c5..8f4056df6f 100755 --- a/openair-cn/NAS/UE/ESM/SAP/esm_send.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_send.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esmData.h b/openair-cn/NAS/UE/ESM/esmData.h index 9726e83e8a..7571e25e64 100755 --- a/openair-cn/NAS/UE/ESM/esmData.h +++ b/openair-cn/NAS/UE/ESM/esmData.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_ebr.c b/openair-cn/NAS/UE/ESM/esm_ebr.c index d7a36cc6db..b305dc778b 100755 --- a/openair-cn/NAS/UE/ESM/esm_ebr.c +++ b/openair-cn/NAS/UE/ESM/esm_ebr.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_ebr.h b/openair-cn/NAS/UE/ESM/esm_ebr.h index 163983f8c0..1298aa1243 100755 --- a/openair-cn/NAS/UE/ESM/esm_ebr.h +++ b/openair-cn/NAS/UE/ESM/esm_ebr.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_ebr_context.c b/openair-cn/NAS/UE/ESM/esm_ebr_context.c index cbc46a9461..fcf278a2e4 100755 --- a/openair-cn/NAS/UE/ESM/esm_ebr_context.c +++ b/openair-cn/NAS/UE/ESM/esm_ebr_context.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_ebr_context.h b/openair-cn/NAS/UE/ESM/esm_ebr_context.h index 2a9d55a197..a93fb94eb1 100755 --- a/openair-cn/NAS/UE/ESM/esm_ebr_context.h +++ b/openair-cn/NAS/UE/ESM/esm_ebr_context.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_ip.c b/openair-cn/NAS/UE/ESM/esm_ip.c index b2fb84b970..041d186b8d 100755 --- a/openair-cn/NAS/UE/ESM/esm_ip.c +++ b/openair-cn/NAS/UE/ESM/esm_ip.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_main.c b/openair-cn/NAS/UE/ESM/esm_main.c index 2d2124e495..f507b0a53f 100755 --- a/openair-cn/NAS/UE/ESM/esm_main.c +++ b/openair-cn/NAS/UE/ESM/esm_main.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_main.h b/openair-cn/NAS/UE/ESM/esm_main.h index 2fd2e58939..de95ba26f9 100755 --- a/openair-cn/NAS/UE/ESM/esm_main.h +++ b/openair-cn/NAS/UE/ESM/esm_main.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_proc.h b/openair-cn/NAS/UE/ESM/esm_proc.h index f4721aa00c..094907257b 100755 --- a/openair-cn/NAS/UE/ESM/esm_proc.h +++ b/openair-cn/NAS/UE/ESM/esm_proc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_pt.c b/openair-cn/NAS/UE/ESM/esm_pt.c index 954049203c..9b2f4f7451 100755 --- a/openair-cn/NAS/UE/ESM/esm_pt.c +++ b/openair-cn/NAS/UE/ESM/esm_pt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/ESM/esm_pt.h b/openair-cn/NAS/UE/ESM/esm_pt.h index 0abe6ea558..8821b3be91 100755 --- a/openair-cn/NAS/UE/ESM/esm_pt.h +++ b/openair-cn/NAS/UE/ESM/esm_pt.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/UEprocess.c b/openair-cn/NAS/UE/UEprocess.c index d42699eddb..0f45697f18 100644 --- a/openair-cn/NAS/UE/UEprocess.c +++ b/openair-cn/NAS/UE/UEprocess.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_itti_messaging.c b/openair-cn/NAS/UE/nas_itti_messaging.c index d832585ebd..7b8f630b89 100755 --- a/openair-cn/NAS/UE/nas_itti_messaging.c +++ b/openair-cn/NAS/UE/nas_itti_messaging.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_itti_messaging.h b/openair-cn/NAS/UE/nas_itti_messaging.h index 4165119570..9ea80f63c0 100755 --- a/openair-cn/NAS/UE/nas_itti_messaging.h +++ b/openair-cn/NAS/UE/nas_itti_messaging.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_network.c b/openair-cn/NAS/UE/nas_network.c index 5c63d56067..d6aa625b36 100755 --- a/openair-cn/NAS/UE/nas_network.c +++ b/openair-cn/NAS/UE/nas_network.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_network.h b/openair-cn/NAS/UE/nas_network.h index 25a8729eac..d56542ba42 100755 --- a/openair-cn/NAS/UE/nas_network.h +++ b/openair-cn/NAS/UE/nas_network.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_parser.c b/openair-cn/NAS/UE/nas_parser.c index aae894b783..40ba7152b3 100755 --- a/openair-cn/NAS/UE/nas_parser.c +++ b/openair-cn/NAS/UE/nas_parser.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_parser.h b/openair-cn/NAS/UE/nas_parser.h index 4e9be0aa28..003dd0895e 100755 --- a/openair-cn/NAS/UE/nas_parser.h +++ b/openair-cn/NAS/UE/nas_parser.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_proc.c b/openair-cn/NAS/UE/nas_proc.c index f6327fd627..e9f61b9d8b 100755 --- a/openair-cn/NAS/UE/nas_proc.c +++ b/openair-cn/NAS/UE/nas_proc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_proc.h b/openair-cn/NAS/UE/nas_proc.h index 8d4897eddb..666c97f6dc 100755 --- a/openair-cn/NAS/UE/nas_proc.h +++ b/openair-cn/NAS/UE/nas_proc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_ue_task.c b/openair-cn/NAS/UE/nas_ue_task.c index 48c15a4835..ff57901970 100644 --- a/openair-cn/NAS/UE/nas_ue_task.c +++ b/openair-cn/NAS/UE/nas_ue_task.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_user.c b/openair-cn/NAS/UE/nas_user.c index 4abb2f4040..447198b897 100644 --- a/openair-cn/NAS/UE/nas_user.c +++ b/openair-cn/NAS/UE/nas_user.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NAS/UE/nas_user.h b/openair-cn/NAS/UE/nas_user.h index 21f6680260..24603f3160 100644 --- a/openair-cn/NAS/UE/nas_user.h +++ b/openair-cn/NAS/UE/nas_user.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/NEWS b/openair-cn/NEWS deleted file mode 100644 index 8b13789179..0000000000 --- a/openair-cn/NEWS +++ /dev/null @@ -1 +0,0 @@ - diff --git a/openair-cn/OAISIM_MME/COPYING b/openair-cn/OAISIM_MME/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OAISIM_MME/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OAISIM_MME/Makefile.am b/openair-cn/OAISIM_MME/Makefile.am deleted file mode 100644 index 5fb6fd5009..0000000000 --- a/openair-cn/OAISIM_MME/Makefile.am +++ /dev/null @@ -1,76 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -if !STANDALONE_EPC -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/GTPV1-U \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/include \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/shared \ - -I$(top_srcdir)/SCTP \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/SGI \ - -I$(top_srcdir)/MME_APP \ - -I$(top_srcdir)/NAS \ - -I$(top_srcdir)/S11 \ - -I$(top_builddir)/S1AP/MESSAGES \ - -I$(top_srcdir)/S1AP \ - -I$(top_srcdir)/S6A \ - -I$(top_srcdir)/SECU \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/UDP \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/UTILS/HASHTABLE - -oaisim_mme_LDADD = \ - $(top_builddir)/INTERTASK_INTERFACE/libitti.la \ - $(top_builddir)/NAS/libnas.la \ - $(top_builddir)/S11/libs11.la \ - $(top_builddir)/S1AP/libs1ap.la \ - $(top_builddir)/S6A/libs6a.la \ - $(top_builddir)/SCTP/libsctpserver.la \ - $(top_builddir)/UTILS/HASHTABLE/libhashtable.la \ - $(top_builddir)/UDP/libudpserver.la \ - $(top_builddir)/MME_APP/libmmeapp.la \ - $(top_builddir)/SECU/libsecu.la \ - $(top_builddir)/UTILS/libutils.la \ - $(top_builddir)/GTPV2-C/nwgtpv2c-0.11/src/libNwGtpv2c.a \ - $(abs_top_builddir)/INTERTASK_INTERFACE/UTIL/LFDS/liblfds6.1.1/liblfds611/bin/liblfds611.a - -oaisim_mme_SOURCES = \ - oai_mme_log.c \ - oaisim_mme.c - -bin_PROGRAMS = oaisim_mme -endif diff --git a/openair-cn/OAISIM_MME/oai_mme_log.c b/openair-cn/OAISIM_MME/oai_mme_log.c deleted file mode 100644 index 533719977a..0000000000 --- a/openair-cn/OAISIM_MME/oai_mme_log.c +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "oaisim_mme.h" -#include "log.h" - -#include -#include - -int oai_mme_log_specific(int log_level) -{ - if (log_level == 1) { - asn_debug = 0; - asn1_xer_print = 1; - fd_g_debug_lvl = INFO; - } else if (log_level == 2) { - asn_debug = 1; - asn1_xer_print = 1; - fd_g_debug_lvl = ANNOYING; - } else { - asn1_xer_print = 0; - asn_debug = 0; - fd_g_debug_lvl = NONE; - } - - return 0; -} diff --git a/openair-cn/OAISIM_MME/oaisim_mme.c b/openair-cn/OAISIM_MME/oaisim_mme.c deleted file mode 100644 index 14a9871e58..0000000000 --- a/openair-cn/OAISIM_MME/oaisim_mme.c +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "assertions.h" -#include "mme_config.h" -#include "gtpv1u_sgw_defs.h" - -#include "intertask_interface_init.h" - -#include "sctp_primitives_server.h" -#include "udp_primitives_server.h" -#include "s1ap_mme.h" -#include "log.h" -#include "timer.h" -#include "sgw_lite_defs.h" -#include "mme_app_extern.h" -#include "nas_defs.h" -#include "s11_mme.h" - -/* FreeDiameter headers for support of S6A interface */ -#include -#include -#include "s6a_defs.h" - -#include "oaisim_mme.h" - -int main(int argc, char *argv[]) -{ - /* Parse the command line for options and set the mme_config accordingly. */ - CHECK_INIT_RETURN(config_parse_opt_line(argc, argv, &mme_config)); - - /* Calling each layer init function */ - CHECK_INIT_RETURN(log_init(&mme_config, oai_mme_log_specific)); - CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL)); - - CHECK_INIT_RETURN(nas_init(&mme_config)); - CHECK_INIT_RETURN(sctp_init(&mme_config)); - CHECK_INIT_RETURN(udp_init(&mme_config)); - CHECK_INIT_RETURN(s11_mme_init(&mme_config)); - CHECK_INIT_RETURN(s1ap_mme_init(&mme_config)); - // if (gtpv1u_init(&mme_config) < 0) return -1; - CHECK_INIT_RETURN(mme_app_init(&mme_config)); - - CHECK_INIT_RETURN(s6a_init(&mme_config)); - - /* Handle signals here */ - itti_wait_tasks_end(); - - return 0; -} diff --git a/openair-cn/OAISIM_MME/oaisim_mme.h b/openair-cn/OAISIM_MME/oaisim_mme.h deleted file mode 100644 index 5b389d75d1..0000000000 --- a/openair-cn/OAISIM_MME/oaisim_mme.h +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/** @mainpage - - @section intro Introduction - - openair-mme project tends to provide an implementation of LTE core network. - - @section scope Scope - - - @section design Design Philosophy - - Included protocol stacks: - - SCTP RFC#### - - S1AP 3GPP TS 36.413 R10.5 - - S11 abstraction between MME and S-GW - - 3GPP TS 23.401 R10.5 - - nw-gtpv1u for s1-u (http://amitchawre.net/) - - freeDiameter project (http://www.freediameter.net/) 3GPP TS 29.272 R10.5 - - @section applications Applications and Usage - - Please use the script to start LTE epc in root src directory - - */ - -#ifndef OAISIM_MME_H_ -#define OAISIM_MME_H_ - -int main(int argc, char *argv[]); - -int oai_mme_log_specific(int log_level); - -#endif /* OAISIM_MME_H_ */ diff --git a/openair-cn/OAI_EPC/COPYING b/openair-cn/OAI_EPC/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OAI_EPC/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OAI_EPC/Makefile.am b/openair-cn/OAI_EPC/Makefile.am deleted file mode 100644 index 1a192009d0..0000000000 --- a/openair-cn/OAI_EPC/Makefile.am +++ /dev/null @@ -1,78 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -if STANDALONE_EPC -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/GTPV1-U \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/include \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/shared \ - -I$(top_srcdir)/SCTP \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/SGI \ - -I$(top_srcdir)/MME_APP \ - -I$(top_srcdir)/NAS \ - -I$(top_builddir)/S1AP/MESSAGES \ - -I$(top_srcdir)/S1AP \ - -I$(top_srcdir)/S6A \ - -I$(top_srcdir)/SECU \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/UDP \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/UTILS/HASHTABLE \ - -I$(top_srcdir)/UTILS/TIMER - -oai_epc_LDADD = \ - $(top_builddir)/GTPV1-U/libgtpv1u.la \ - $(top_builddir)/GTPV2-C/nwgtpv2c-0.11/src/libNwGtpv2c.a \ - $(top_builddir)/INTERTASK_INTERFACE/libitti.la \ - $(top_builddir)/SGI/libsgi.la \ - $(top_builddir)/NAS/libnas.la \ - $(top_builddir)/S6A/libs6a.la \ - $(top_builddir)/SGW-LITE/libsgw_lite.la \ - $(top_builddir)/SCTP/libsctpserver.la \ - $(top_builddir)/UTILS/HASHTABLE/libhashtable.la \ - $(top_builddir)/UDP/libudpserver.la \ - $(top_builddir)/MME_APP/libmmeapp.la \ - $(top_builddir)/SECU/libsecu.la \ - $(top_builddir)/UTILS/libutils.la \ - $(top_builddir)/S1AP/libs1ap.la \ - $(abs_top_builddir)/INTERTASK_INTERFACE/UTIL/LFDS/liblfds6.1.1/liblfds611/bin/liblfds611.a - -oai_epc_SOURCES = \ - oai_epc_log.c \ - oai_epc.c - -bin_PROGRAMS = oai_epc -endif diff --git a/openair-cn/OAI_EPC/oai_epc.c b/openair-cn/OAI_EPC/oai_epc.c deleted file mode 100644 index f2fe6776be..0000000000 --- a/openair-cn/OAI_EPC/oai_epc.c +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! @file oai_epc.c - * @brief Entry point for EPC environement gathering MME, S-GW and P-GW in - * a single executable - */ - -#include -#include -#include -#include -#include - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "mme_config.h" -#include "gtpv1u_sgw_defs.h" - -#include "assertions.h" - -#include "intertask_interface_init.h" - -#include "sctp_primitives_server.h" -#include "udp_primitives_server.h" -#include "s1ap_mme.h" -#include "log.h" -#include "timer.h" -#include "sgw_lite_defs.h" -#include "mme_app_extern.h" -#include "nas_defs.h" - -/* FreeDiameter headers for support of S6A interface */ -#include -#include -#include "s6a_defs.h" - -#include "oai_epc.h" -#include "msc.h" - -int main(int argc, char *argv[]) -{ - - CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, - tasks_info, messages_info, messages_definition_xml, - mme_config.itti_config.log_file)); - /* Parse the command line for options and set the mme_config accordingly. */ - CHECK_INIT_RETURN(config_parse_opt_line(argc, argv, &mme_config) < 0); - MSC_INIT(MSC_MME_GW, THREAD_MAX+TASK_MAX); - - /* Calling each layer init function */ - CHECK_INIT_RETURN(log_init(&mme_config, oai_epc_log_specific)); - CHECK_INIT_RETURN(nas_init(&mme_config)); - CHECK_INIT_RETURN(sctp_init(&mme_config)); - CHECK_INIT_RETURN(udp_init(&mme_config)); - CHECK_INIT_RETURN(gtpv1u_init(&mme_config)); - CHECK_INIT_RETURN(s1ap_mme_init(&mme_config)); - CHECK_INIT_RETURN(mme_app_init(&mme_config)); - CHECK_INIT_RETURN(s6a_init(&mme_config)); - CHECK_INIT_RETURN(sgw_lite_init(mme_config.config_file)); - /* Handle signals here */ - itti_wait_tasks_end(); - - return 0; -} diff --git a/openair-cn/OAI_EPC/oai_epc.h b/openair-cn/OAI_EPC/oai_epc.h deleted file mode 100644 index ab378bf7d9..0000000000 --- a/openair-cn/OAI_EPC/oai_epc.h +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/** @mainpage - - @section intro Introduction - - openair-mme project tends to provide an implementation of LTE core network. - - @section scope Scope - - - @section design Design Philosophy - - Included protocol stacks: - - SCTP RFC#### - - S1AP 3GPP TS 36.413 R10.5 - - S11 abstraction between MME and S-GW - - 3GPP TS 23.401 R10.5 - - nw-gtpv1u for s1-u (http://amitchawre.net/) - - freeDiameter project (http://www.freediameter.net/) 3GPP TS 29.272 R10.5 - - @section applications Applications and Usage - - Please use the script to start LTE epc in root src directory - - */ - -#ifndef OAI_EPC_H_ -#define OAI_EPC_H_ - -int oai_epc_log_specific(int log_level); - -int main(int argc, char *argv[]); - -#endif /* OAI_EPC_H_ */ diff --git a/openair-cn/OAI_EPC/oai_epc_log.c b/openair-cn/OAI_EPC/oai_epc_log.c deleted file mode 100644 index 9bcf3fcbf0..0000000000 --- a/openair-cn/OAI_EPC/oai_epc_log.c +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include "oai_epc.h" -#include "log.h" - -#include -#include - -int oai_epc_log_specific(int log_level) -{ - if (log_level == 1) { - asn_debug = 0; - asn1_xer_print = 1; - fd_g_debug_lvl = INFO; - } else if (log_level == 2) { - asn_debug = 1; - asn1_xer_print = 1; - fd_g_debug_lvl = ANNOYING; - } else { - asn1_xer_print = 0; - asn_debug = 0; - fd_g_debug_lvl = NONE; - } - - return 0; -} diff --git a/openair-cn/OAI_SGW/COPYING b/openair-cn/OAI_SGW/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OAI_SGW/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OAI_SGW/Makefile.am b/openair-cn/OAI_SGW/Makefile.am deleted file mode 100644 index 4190c1dc8e..0000000000 --- a/openair-cn/OAI_SGW/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -if !STANDALONE_EPC -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/GTPV1-U \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/include \ - -I$(top_srcdir)/GTPV1-U/nw-gtpv1u/shared \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/S11 \ - -I$(top_srcdir)/SGI \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/UDP \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/UTILS/HASHTABLE - -oai_sgw_LDADD = \ - $(top_builddir)/GTPV1-U/libgtpv1u.la \ - $(top_builddir)/INTERTASK_INTERFACE/libitti.la \ - $(top_builddir)/S11/libs11.la \ - $(top_builddir)/GTPV2-C/nwgtpv2c-0.11/src/libNwGtpv2c.a \ - $(top_builddir)/SGI/libsgi.la \ - $(top_builddir)/SGW-LITE/libsgw_lite.la \ - $(top_builddir)/UTILS/HASHTABLE/libhashtable.la \ - $(top_builddir)/UDP/libudpserver.la \ - $(top_builddir)/SECU/libsecu.la \ - $(top_builddir)/UTILS/libutils.la \ - $(abs_top_builddir)/INTERTASK_INTERFACE/UTIL/LFDS/liblfds6.1.1/liblfds611/bin/liblfds611.a - -oai_sgw_SOURCES = \ - oai_sgw_log.c \ - oai_sgw.c - -bin_PROGRAMS = oai_sgw -endif diff --git a/openair-cn/OAI_SGW/oai_sgw.c b/openair-cn/OAI_SGW/oai_sgw.c deleted file mode 100644 index 902c4c24c1..0000000000 --- a/openair-cn/OAI_SGW/oai_sgw.c +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file oai_sgw.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#include -#include -#include -#include -#include - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "assertions.h" -#include "mme_config.h" - -#include "intertask_interface_init.h" - -#include "udp_primitives_server.h" -#include "log.h" -#include "timer.h" -#include "s11_sgw.h" -#include "sgw_lite_defs.h" -#include "gtpv1u_sgw_defs.h" - -#include "oai_sgw.h" - -int main(int argc, char *argv[]) -{ - /* Parse the command line for options and set the mme_config accordingly. */ - CHECK_INIT_RETURN(config_parse_opt_line(argc, argv, &mme_config)); - - /* Calling each layer init function */ - CHECK_INIT_RETURN(log_init(&mme_config, oai_sgw_log_specific)); - CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL)); - - CHECK_INIT_RETURN(udp_init(&mme_config)); - CHECK_INIT_RETURN(s11_sgw_init(&mme_config)); - CHECK_INIT_RETURN(gtpv1u_init(&mme_config)); - - CHECK_INIT_RETURN(sgw_lite_init(mme_config.config_file)); - - /* Handle signals here */ - itti_wait_tasks_end(); - - return 0; -} diff --git a/openair-cn/OAI_SGW/oai_sgw.h b/openair-cn/OAI_SGW/oai_sgw.h deleted file mode 100644 index 5647b01790..0000000000 --- a/openair-cn/OAI_SGW/oai_sgw.h +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file oai_sgw.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#ifndef OAI_SGW_H_ -#define OAI_SGW_H_ - -int main(int argc, char *argv[]); - -int oai_sgw_log_specific(int log_level); - -#endif /* OAI_SGW_H_ */ diff --git a/openair-cn/OAI_SGW/oai_sgw_log.c b/openair-cn/OAI_SGW/oai_sgw_log.c deleted file mode 100644 index 1cfb05b7c9..0000000000 --- a/openair-cn/OAI_SGW/oai_sgw_log.c +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file oai_sgw_log.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include "oai_sgw.h" -#include "log.h" - -int oai_sgw_log_specific(int log_level) -{ - return 0; -} diff --git a/openair-cn/OPENAIRHSS/AUTHORS b/openair-cn/OPENAIRHSS/AUTHORS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/OPENAIRHSS/ChangeLog b/openair-cn/OPENAIRHSS/ChangeLog deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/OPENAIRHSS/INSTALL b/openair-cn/OPENAIRHSS/INSTALL deleted file mode 100644 index 2099840756..0000000000 --- a/openair-cn/OPENAIRHSS/INSTALL +++ /dev/null @@ -1,370 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, -Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command `./configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf limitation. Until the limitation is lifted, you can use -this workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. diff --git a/openair-cn/OPENAIRHSS/Makefile.am b/openair-cn/OPENAIRHSS/Makefile.am deleted file mode 100644 index 327a0a00b9..0000000000 --- a/openair-cn/OPENAIRHSS/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ACLOCAL_AMFLAGS = -I m4 - -SUBDIRS = access_restriction auc db s6a utils tests . - -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/access_restriction \ - -I$(top_srcdir)/auc \ - -I$(top_srcdir)/db \ - -I$(top_srcdir)/s6a \ - -I$(top_srcdir)/utils - -bin_PROGRAMS = openair-hss - -openair_hssdir=$(sysconfdir)/openair-hss -openair_hss_DATA = $(top_builddir)/conf/hss.conf $(top_srcdir)/conf/hss_fd.conf - -openair_hss_LDADD = \ - $(top_builddir)/s6a/libs6a.la \ - $(top_builddir)/db/libdb.la \ - $(top_builddir)/auc/libauc.la \ - $(top_builddir)/access_restriction/libaccess_restriction.la \ - $(top_builddir)/utils/libutils.la - -openair_hss_SOURCES = \ - hss_config.h \ - hss_main.c diff --git a/openair-cn/OPENAIRHSS/NEWS b/openair-cn/OPENAIRHSS/NEWS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/OPENAIRHSS/README b/openair-cn/OPENAIRHSS/README deleted file mode 100644 index 3f48e97d5f..0000000000 --- a/openair-cn/OPENAIRHSS/README +++ /dev/null @@ -1,24 +0,0 @@ -Please follow the steps below to install hss: - -1) install the hss using the scripts/install_hss.sh -2) run autogen.sh -3) mkdir objs -4) cd objs; ../configure -5) make -j2 -6) make -7) sudo apt-get install mysql-client-core-5.5 mysql-server-core-5.5 mysql-server-5.5 phpmyadmin - set the password for mysql server - open a browser and connet to the phpmyadmin: localhost/phpmyadmin - create the oai_db database using database menu - select the oai_db and import db/oai_db.sql - select the users, and insert the data - or mannully use the cmd: sudo mysql -u root -p - update the oai_db tables for users,pgw, pdn, and mmeidentity - create a new phpmyadmin user, and name it hssadmin, with admin password, grant all the global privilages on DATA as well as create, alter, and index for the structure - mysql -u root -p and add the following cmd - grant all privileges ON *.* TO 'hssadmin'@'%' WITH GRANT OPTION; - flush privileges; -8) download and install php-myadmin or lampp from http://www.apachefriends.org/en/xampp-linux.html - copy the file in /opt - chmod 755 xampp-linux-1.8.2-0-installer.run - ./xampp-linux-1.8.2-0-installer.run diff --git a/openair-cn/OPENAIRHSS/access_restriction/COPYING b/openair-cn/OPENAIRHSS/access_restriction/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/access_restriction/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/access_restriction/Makefile.am b/openair-cn/OPENAIRHSS/access_restriction/Makefile.am deleted file mode 100644 index 31d146bc61..0000000000 --- a/openair-cn/OPENAIRHSS/access_restriction/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir) \ - -I$(top_srcdir)/utils - -noinst_LTLIBRARIES = libaccess_restriction.la - -libaccess_restriction_la_LDFLAGS = -all-static -libaccess_restriction_la_SOURCES = \ - access_restriction.c access_restriction.h \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/access_restriction/access_restriction.c b/openair-cn/OPENAIRHSS/access_restriction/access_restriction.c deleted file mode 100644 index ec049b0c10..0000000000 --- a/openair-cn/OPENAIRHSS/access_restriction/access_restriction.c +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "conversion.h" -#include "access_restriction.h" - -/* TODO: identification of MCC and MNC within an IMSI should be done according - * to a table that maps MCC to 2 or 3 digits expected... - * By default we will assume there is only 2 digits for our use. - */ - -/* Split a PLMN formed of to mcc and mnc. - * In case MNC is formed of only two digits a 0 is inserted at the most significant - * digit. - * When PLMN is represented using european convention it contains only two digits, - * while three digits are used in North American Standard. - * Encoding of PLMN is defined in ITU E.212. - * @param plmn string either 5 or 6 digits resulting of the concatenation of - * MCC and MNC. - */ -int split_plmn(uint8_t plmn[3], uint8_t mcc[3], uint8_t mnc[3]) -{ - if (plmn == NULL) { - return -1; - } - - mcc[0] = plmn[0] & 0x0F; - mcc[1] = (plmn[0] & 0xF0) >> 4; - mcc[2] = plmn[1] & 0x0F; - - if ((plmn[1] & 0xF0) == 0xF0) { - /* Only 2 digits case */ - mnc[1] = plmn[2] & 0x0F; - mnc[2] = (plmn[2] & 0xF0) >> 4; - mnc[0] = 0; - } else { - mnc[0] = plmn[2] & 0x0F; - mnc[1] = (plmn[2] & 0xF0) >> 4; - mnc[2] = ((plmn[1] & 0xF0) >> 4); - } - - return 0; -} - -/* Apply restriction (if any) to current 'visited' PLMN for this user. - * Criterias are based on ODB (operator determined barring), visited PLMN - * and user PLMN (obtain from IMSI). - * @param imsi is the user identity formed of MCC.MNC.MSIN (14 or 15 digits long) - * @param vplmn is the plmn of the cell the UE is currently attached to - */ -#define FORMAT_MCC(mCC) (mCC[0] * 100 + mCC[1] * 10 + mCC[2]) -#define FORMAT_MNC(mNC) (mNC[0] * 100 + mNC[1] * 10 + mNC[2]) - -int apply_access_restriction(char *imsi, uint8_t *vplmn) -{ - uint8_t vmcc[3], vmnc[3]; - uint8_t hmcc[3], hmnc[3]; - - uint8_t imsi_hex[15]; - - if (bcd_to_hex(imsi_hex, imsi, strlen(imsi)) != 0) { - fprintf(stderr, "Failed to convert imsi %s to hex representation\n", - imsi); - return -1; - } - - /* There is a problem while converting the PLMN... */ - if (split_plmn(vplmn, vmcc, vmnc) != 0) { - fprintf(stderr, "Fail to convert vplmn %02x%02x%02x to mcc/mnc for imsi %s\n", - vplmn[0], vplmn[1], vplmn[2], imsi); - return -1; - } - - fprintf(stderr, "Converted %02x%02x%02x to plmn %u.%u\n", vplmn[0], vplmn[1], vplmn[2], - FORMAT_MCC(vmcc), FORMAT_MNC(vmnc)); - - /* MCC is always 3 digits */ - memcpy(hmcc, &imsi_hex[0], 3); - - if (memcmp(vmcc, hmcc, 3) != 0) { - fprintf(stderr, "Only France MCC is handled for now, got imsi plmn %u.%u for a visited plmn %u.%u\n", - FORMAT_MCC(hmcc), FORMAT_MNC(hmnc), FORMAT_MCC(vmcc), FORMAT_MNC(vmnc)); - /* Reject the association */ - return -1; - } - - /* In France MNC is composed of 2 digits and thus imsi by 14 digit */ - hmnc[0] = 0; - memcpy(&hmnc[1], &imsi_hex[3], 2); - - if ((memcmp(vmcc, hmcc, 3) != 0) && (memcmp(vmnc, hmnc, 3) != 0)) { - fprintf(stderr, "UE is roaming from %u.%u to %u.%u which is not allowed" - " by the ODB\n", FORMAT_MCC(hmcc), FORMAT_MNC(hmnc), FORMAT_MCC(vmcc), FORMAT_MNC(vmnc)); - return -1; - } - - /* User has successfully passed all the checking -> accept the association */ - return 0; -} diff --git a/openair-cn/OPENAIRHSS/access_restriction/access_restriction.h b/openair-cn/OPENAIRHSS/access_restriction/access_restriction.h deleted file mode 100644 index bd9394416b..0000000000 --- a/openair-cn/OPENAIRHSS/access_restriction/access_restriction.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef ACCESS_RESTRICTION_H_ -#define ACCESS_RESTRICTION_H_ - -int split_plmn(uint8_t *plmn, uint8_t mcc[3], uint8_t mnc[3]); - -int apply_access_restriction(char *imsi, uint8_t *vplmn); - -#endif /* ACCESS_RESTRICTION_H_ */ diff --git a/openair-cn/OPENAIRHSS/auc/COPYING b/openair-cn/OPENAIRHSS/auc/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/auc/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/auc/Makefile.am b/openair-cn/OPENAIRHSS/auc/Makefile.am deleted file mode 100644 index 948cf4b1dc..0000000000 --- a/openair-cn/OPENAIRHSS/auc/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir) \ - -I$(top_srcdir)/utils - -noinst_LTLIBRARIES = libauc.la - -libauc_la_LDFLAGS = -all-static -libauc_la_SOURCES = \ - auc.h \ - fx.c \ - kdf.c \ - random.c \ - rijndael.c \ - sequence_number.c \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/auc/auc.h b/openair-cn/OPENAIRHSS/auc/auc.h deleted file mode 100644 index 00ca2b9dc7..0000000000 --- a/openair-cn/OPENAIRHSS/auc/auc.h +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#ifndef AUC_H_ -#define AUC_H_ - -#define SQN_LENGTH_BITS (48) -#define SQN_LENGTH_OCTEST (SQN_LENGTH_BITS/8) -#define IK_LENGTH_BITS (128) -#define IK_LENGTH_OCTETS (IK_LENGTH_BITS/8) -#define RAND_LENGTH_OCTETS (16) -#define RAND_LENGTH_BITS (RAND_LENGTH_OCTETS*8) -#define XRES_LENGTH_OCTETS (8) -#define AUTN_LENGTH_OCTETS (16) -#define KASME_LENGTH_OCTETS (32) -#define MAC_S_LENGTH (8) - -extern uint8_t opc[16]; - -typedef mpz_t random_t; -typedef mpz_t sqn_t; - -typedef uint8_t uint8_t; - -typedef struct { - uint8_t rand[16]; - uint8_t rand_new; - uint8_t xres[8]; - uint8_t autn[16]; - uint8_t kasme[32]; -} auc_vector_t; - -void RijndaelKeySchedule(const uint8_t const key[16]); -void RijndaelEncrypt(const uint8_t const in[16], uint8_t out[16]); - -/* Sequence number functions */ -struct sqn_ue_s; -struct sqn_ue_s *sqn_exists(uint64_t imsi); -void sqn_insert(struct sqn_ue_s *item); -void sqn_init(struct sqn_ue_s *item); -struct sqn_ue_s *sqn_new(uint64_t imsi); -void sqn_list_init(void); -void sqn_get(uint64_t imsi, uint8_t sqn[6]); - -/* Random number functions */ -struct random_state_s; -void random_init(void); -void generate_random(uint8_t *random, ssize_t length); - -//void SetOP(char *opP); - -void ComputeOPc( const uint8_t const kP[16], const uint8_t const opP[16], uint8_t opcP[16] ); - -void f1 ( const uint8_t const kP[16],const uint8_t const k[16], const uint8_t const rand[16], const uint8_t const sqn[6], const uint8_t const amf[2], - uint8_t mac_a[8] ); -void f1star( const uint8_t const kP[16],const uint8_t const k[16], const uint8_t const rand[16], const uint8_t const sqn[6], const uint8_t const amf[2], - uint8_t mac_s[8] ); -void f2345 ( const uint8_t const kP[16],const uint8_t const k[16], const uint8_t const rand[16], - uint8_t res[8], uint8_t ck[16], uint8_t ik[16], uint8_t ak[6] ); -void f5star( const uint8_t const kP[16],const uint8_t const k[16], const uint8_t const rand[16], - uint8_t ak[6] ); - -void generate_autn(const uint8_t const sqn[6], const uint8_t const ak[6], const uint8_t const amf[2], const uint8_t const mac_a[8], uint8_t autn[16]); -int generate_vector(const uint8_t const opc[16], uint64_t imsi, uint8_t key[16], uint8_t plmn[3], - uint8_t sqn[6], auc_vector_t *vector); - -void kdf(uint8_t *key, uint16_t key_len, uint8_t *s, uint16_t s_len, uint8_t *out, - uint16_t out_len); - -void derive_kasme(uint8_t ck[16], uint8_t ik[16], uint8_t plmn[3], uint8_t sqn[6], - uint8_t ak[6], uint8_t kasme[32]); - -uint8_t *sqn_ms_derive(const uint8_t const opc[16], uint8_t *key, uint8_t *auts, uint8_t *rand); - -static inline void print_buffer(const char *prefix, uint8_t *buffer, int length) -{ - int i; - - fprintf(stdout, "%s", prefix); - - for (i = 0; i < length; i++) { - fprintf(stdout, "%02x.", buffer[i]); - } - - fprintf(stdout, "\n"); -} - -#endif /* AUC_H_ */ diff --git a/openair-cn/OPENAIRHSS/auc/fx.c b/openair-cn/OPENAIRHSS/auc/fx.c deleted file mode 100644 index 31d8d05b22..0000000000 --- a/openair-cn/OPENAIRHSS/auc/fx.c +++ /dev/null @@ -1,298 +0,0 @@ -/*------------------------------------------------------------------- - * Example algorithms f1, f1*, f2, f3, f4, f5, f5* - *------------------------------------------------------------------- - * - * A sample implementation of the example 3GPP authentication and - * key agreement functions f1, f1*, f2, f3, f4, f5 and f5*. This is - * a byte-oriented implementation of the functions, and of the block - * cipher kernel function Rijndael. - * - * This has been coded for clarity, not necessarily for efficiency. - * - * The functions f2, f3, f4 and f5 share the same inputs and have - * been coded together as a single function. f1, f1* and f5* are - * all coded separately. - * - *-----------------------------------------------------------------*/ - -#include -#include -#include -#include - -#include "auc.h" -#include "hss_config.h" - -extern hss_config_t hss_config; - -/*--------- Operator Variant Algorithm Configuration Field --------*/ - - -/*--------------------------- prototypes --------------------------*/ - - -/*------------------------------------------------------------------- - * - *------------------------------------------------------------------- - *-----------------------------------------------------------------*/ -void generate_autn(const uint8_t const sqn[6], const uint8_t const ak[6], const uint8_t const amf[2], const uint8_t const mac_a[8], uint8_t autn[16]) -{ - int i; - - for (i = 0; i < 6; i++) { - autn[i] = sqn[i] ^ ak[i]; - } - - memcpy(&autn[6], amf, 2); - memcpy(&autn[8], mac_a, 8); -} - -/*------------------------------------------------------------------- - * Algorithm f1 - *------------------------------------------------------------------- - * - * Computes network authentication code MAC-A from key K, random - * challenge RAND, sequence number SQN and authentication management - * field AMF. - * - *-----------------------------------------------------------------*/ -void f1 ( const uint8_t const opc[16], const uint8_t const k[16], const uint8_t const _rand[16], const uint8_t const sqn[6], const uint8_t const amf[2], - uint8_t mac_a[8] ) -{ - uint8_t temp[16]; - uint8_t in1[16]; - uint8_t out1[16]; - uint8_t rijndaelInput[16]; - uint8_t i; - RijndaelKeySchedule( k ); - - for (i=0; i<16; i++) - rijndaelInput[i] = _rand[i] ^ opc[i]; - - RijndaelEncrypt( rijndaelInput, temp ); - - for (i=0; i<6; i++) { - in1[i] = sqn[i]; - in1[i+8] = sqn[i]; - } - - for (i=0; i<2; i++) { - in1[i+6] = amf[i]; - in1[i+14] = amf[i]; - } - - /* XOR op_c and in1, rotate by r1=64, and XOR * - * on the constant c1 (which is all zeroes) */ - for (i=0; i<16; i++) - rijndaelInput[(i+8) % 16] = in1[i] ^ opc[i]; - - /* XOR on the value temp computed before */ - for (i=0; i<16; i++) - rijndaelInput[i] ^= temp[i]; - - RijndaelEncrypt( rijndaelInput, out1 ); - - for (i=0; i<16; i++) - out1[i] ^= opc[i]; - - for (i=0; i<8; i++) - mac_a[i] = out1[i]; - - return; -} /* end of function f1 */ - -/*------------------------------------------------------------------- - * Algorithms f2-f5 - *------------------------------------------------------------------- - * - * Takes key K and random challenge RAND, and returns response RES, - * confidentiality key CK, integrity key IK and anonymity key AK. - * - *-----------------------------------------------------------------*/ -void f2345 ( const uint8_t const opc[16], const uint8_t const k[16], const uint8_t const _rand[16], - uint8_t res[8], uint8_t ck[16], uint8_t ik[16], uint8_t ak[6] ) -{ - uint8_t temp[16]; - uint8_t out[16]; - uint8_t rijndaelInput[16]; - uint8_t i; - RijndaelKeySchedule( k ); - - for (i=0; i<16; i++) - rijndaelInput[i] = _rand[i] ^ opc[i]; - - RijndaelEncrypt( rijndaelInput, temp ); - - /* To obtain output block OUT2: XOR OPc and TEMP, * - * rotate by r2=0, and XOR on the constant c2 (which * - * is all zeroes except that the last bit is 1). */ - for (i=0; i<16; i++) - rijndaelInput[i] = temp[i] ^ opc[i]; - - rijndaelInput[15] ^= 1; - RijndaelEncrypt( rijndaelInput, out ); - - for (i=0; i<16; i++) - out[i] ^= opc[i]; - - for (i=0; i<8; i++) - res[i] = out[i+8]; - - for (i=0; i<6; i++) - ak[i] = out[i]; - - /* To obtain output block OUT3: XOR OPc and TEMP, * - * rotate by r3=32, and XOR on the constant c3 (which * - * is all zeroes except that the next to last bit is 1). */ - - for (i=0; i<16; i++) - rijndaelInput[(i+12) % 16] = temp[i] ^ opc[i]; - - rijndaelInput[15] ^= 2; - RijndaelEncrypt( rijndaelInput, out ); - - for (i=0; i<16; i++) - out[i] ^= opc[i]; - - for (i=0; i<16; i++) - ck[i] = out[i]; - - /* To obtain output block OUT4: XOR OPc and TEMP, * - * rotate by r4=64, and XOR on the constant c4 (which * - * is all zeroes except that the 2nd from last bit is 1). */ - for (i=0; i<16; i++) - rijndaelInput[(i+8) % 16] = temp[i] ^ opc[i]; - - rijndaelInput[15] ^= 4; - RijndaelEncrypt( rijndaelInput, out ); - - for (i=0; i<16; i++) - out[i] ^= opc[i]; - - for (i=0; i<16; i++) - ik[i] = out[i]; - - return; -} /* end of function f2345 */ - -/*------------------------------------------------------------------- - * Algorithm f1* - *------------------------------------------------------------------- - * - * Computes resynch authentication code MAC-S from key K, random - * challenge RAND, sequence number SQN and authentication management - * field AMF. - * - *-----------------------------------------------------------------*/ -void f1star( const uint8_t const opc[16], const uint8_t const k[16], const uint8_t const _rand[16], const uint8_t const sqn[6], const uint8_t const amf[2], - uint8_t mac_s[8] ) -{ - uint8_t temp[16]; - uint8_t in1[16]; - uint8_t out1[16]; - uint8_t rijndaelInput[16]; - uint8_t i; - RijndaelKeySchedule( k ); - - for (i=0; i<16; i++) - rijndaelInput[i] = _rand[i] ^ opc[i]; - - RijndaelEncrypt( rijndaelInput, temp ); - - for (i=0; i<6; i++) { - in1[i] = sqn[i]; - in1[i+8] = sqn[i]; - } - - for (i=0; i<2; i++) { - in1[i+6] = amf[i]; - in1[i+14] = amf[i]; - } - - /* XOR op_c and in1, rotate by r1=64, and XOR * - * on the constant c1 (which is all zeroes) */ - for (i=0; i<16; i++) - rijndaelInput[(i+8) % 16] = in1[i] ^ opc[i]; - - /* XOR on the value temp computed before */ - for (i=0; i<16; i++) - rijndaelInput[i] ^= temp[i]; - - RijndaelEncrypt( rijndaelInput, out1 ); - - for (i=0; i<16; i++) - out1[i] ^= opc[i]; - - for (i=0; i<8; i++) - mac_s[i] = out1[i+8]; - - return; -} /* end of function f1star */ - -/*------------------------------------------------------------------- - * Algorithm f5* - *------------------------------------------------------------------- - * - * Takes key K and random challenge RAND, and returns resynch - * anonymity key AK. - * - *-----------------------------------------------------------------*/ -void f5star( const uint8_t const opc[16], const uint8_t const k[16], const uint8_t const _rand[16], - uint8_t ak[6] ) -{ - uint8_t temp[16]; - uint8_t out[16]; - uint8_t rijndaelInput[16]; - uint8_t i; - - RijndaelKeySchedule( k ); - - for (i=0; i<16; i++) - rijndaelInput[i] = _rand[i] ^ opc[i]; - - RijndaelEncrypt( rijndaelInput, temp ); - - /* To obtain output block OUT5: XOR OPc and TEMP, * - * rotate by r5=96, and XOR on the constant c5 (which * - * is all zeroes except that the 3rd from last bit is 1). */ - for (i=0; i<16; i++) - rijndaelInput[(i+4) % 16] = temp[i] ^ opc[i]; - - rijndaelInput[15] ^= 8; - RijndaelEncrypt( rijndaelInput, out ); - - for (i=0; i<16; i++) - out[i] ^= opc[i]; - - for (i=0; i<6; i++) - ak[i] = out[i]; - - return; -} /* end of function f5star */ - -/*------------------------------------------------------------------- - * Function to compute OPc from OP and K. - *-----------------------------------------------------------------*/ -void ComputeOPc( const uint8_t const kP[16], const uint8_t const opP[16], uint8_t opcP[16] ) -{ - uint8_t i; - - RijndaelKeySchedule( kP ); - printf("Compute opc:\n\tK:\t%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n", - kP[0],kP[1],kP[2],kP[3],kP[4],kP[5],kP[6],kP[7], - kP[8],kP[9],kP[10],kP[11],kP[12],kP[13],kP[14],kP[15]); - RijndaelEncrypt( opP, opcP ); - printf("\tIn:\t%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n\tRinj:\t%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n", - opP[0],opP[1],opP[2],opP[3],opP[4],opP[5],opP[6],opP[7], - opP[8],opP[9],opP[10],opP[11],opP[12],opP[13],opP[14],opP[15], - opcP[0],opcP[1],opcP[2],opcP[3],opcP[4],opcP[5],opcP[6],opcP[7], - opcP[8],opcP[9],opcP[10],opcP[11],opcP[12],opcP[13],opcP[14],opcP[15] ); - - for (i=0; i<16; i++) - opcP[i] ^= opP[i]; - printf("\tOut:\t%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n", - opcP[0],opcP[1],opcP[2],opcP[3],opcP[4],opcP[5],opcP[6],opcP[7], - opcP[8],opcP[9],opcP[10],opcP[11],opcP[12],opcP[13],opcP[14],opcP[15] ); - - return; -} /* end of function ComputeOPc */ diff --git a/openair-cn/OPENAIRHSS/auc/kdf.c b/openair-cn/OPENAIRHSS/auc/kdf.c deleted file mode 100644 index a806513cbc..0000000000 --- a/openair-cn/OPENAIRHSS/auc/kdf.c +++ /dev/null @@ -1,174 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include - -#include -#include - -#include "auc.h" -#include "hss_config.h" - -#define DEBUG_AUC_KDF 1 -extern hss_config_t hss_config; - -/* - * @param key the input key - * @param key_len length of the key - * @param s string for key derivation as defined in 3GPP TS.33401 Annex A - * @param s_len length of s - * @param out buffer to place the output of kdf - * @param ou_len expected length for the output key - */ -inline -void kdf(uint8_t *key, uint16_t key_len, uint8_t *s, uint16_t s_len, uint8_t *out, - uint16_t out_len) -{ - struct hmac_sha256_ctx ctx; - - memset(&ctx, 0, sizeof(ctx)); - - hmac_sha256_set_key(&ctx, key_len, key); - hmac_sha256_update(&ctx, s_len, s); - hmac_sha256_digest(&ctx, out_len, out); -} - -/* - * Derive the Kasme using the KDF (key derive function). - * See 3GPP TS.33401 Annex A.2 - * The input String S to the KDF is composed of 14 bytes: - * FC = 0x10 - * P0 = SN id = PLMN - * L0 = length(SN id) = 0x00 0x03 - * P1 = SQN xor AK - * L1 = length(P1) = 0x00 0x06 - */ -inline -void derive_kasme(uint8_t ck[16], uint8_t ik[16], uint8_t plmn[3], uint8_t sqn[6], - uint8_t ak[6], uint8_t *kasme) -{ - uint8_t s[14]; - int i; - uint8_t key[32]; - - /* The input key is equal to the concatenation of CK and IK */ - memcpy(&key[0], ck, 16); - memcpy(&key[16], ik, 16); - - /*if (hss_config.valid_opc == 0) { - SetOP(hss_config.operator_key); - }*/ - - /* FC */ - s[0] = 0x10; - - /* SN id is composed of MCC and MNC - * Octets: - * 1 MCC digit 2 | MCC digit 1 - * 2 MNC digit 3 | MCC digit 3 - * 3 MNC digit 2 | MNC digit 1 - */ - memcpy(&s[1], plmn, 3); - - /* L0 */ - s[4] = 0x00; - s[5] = 0x03; - - /* P1 */ - for (i = 0; i < 6; i++) { - s[6 + i] = sqn[i] ^ ak[i]; - } - - /* L1 */ - s[12] = 0x00; - s[13] = 0x06; - -#if defined(DEBUG_AUC_KDF) - - for (i = 0; i < 32; i++) - printf("0x%02x ", key[i]); - - printf("\n"); - - for (i = 0; i < 14; i++) - printf("0x%02x ", s[i]); - - printf("\n"); -#endif - - kdf(key, 32, s, 14, kasme, 32); -} - -int generate_vector(const uint8_t const opc[16], uint64_t imsi, uint8_t key[16], uint8_t plmn[3], - uint8_t sqn[6], auc_vector_t *vector) -{ - /* in E-UTRAN an authentication vector is composed of: - * - RAND - * - XRES - * - AUTN - * - KASME - */ - - uint8_t amf[] = { 0x80, 0x00 }; - uint8_t mac_a[8]; - uint8_t ck[16]; - uint8_t ik[16]; - uint8_t ak[6]; - - if (vector == NULL) { - return EINVAL; - } - - /* Compute MAC */ - f1(opc, key, vector->rand, sqn, amf, mac_a); - - print_buffer("MAC_A : ", mac_a, 8); - print_buffer("SQN : ", sqn, 6); - print_buffer("RAND : ", vector->rand, 16); - - /* Compute XRES, CK, IK, AK */ - f2345(opc, key, vector->rand, vector->xres, ck, ik, ak); - print_buffer("AK : ", ak, 6); - print_buffer("CK : ", ck, 16); - print_buffer("IK : ", ik, 16); - print_buffer("XRES : ", vector->xres, 8); - - /* AUTN = SQN ^ AK || AMF || MAC */ - generate_autn(sqn, ak, amf, mac_a, vector->autn); - - print_buffer("AUTN : ", vector->autn, 16); - - derive_kasme(ck, ik, plmn, sqn, ak, vector->kasme); - print_buffer("KASME : ", vector->kasme, 32); - - return 0; -} diff --git a/openair-cn/OPENAIRHSS/auc/random.c b/openair-cn/OPENAIRHSS/auc/random.c deleted file mode 100644 index 5e71b32461..0000000000 --- a/openair-cn/OPENAIRHSS/auc/random.c +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include -#include - -#include "auc.h" -#include "hss_config.h" - -typedef struct random_state_s { - pthread_mutex_t lock; - gmp_randstate_t state; -} random_state_t; - -random_state_t random_state; -extern hss_config_t hss_config; - -void random_init(void) -{ - // mpz_t number; - // pthread_mutex_init(&random_state.lock, NULL); - // mpz_init(number); - // gmp_randinit_default(random_state.state); - // srand(time(NULL)); - struct timeval t1; - gettimeofday(&t1, NULL); - srand(t1.tv_usec * t1.tv_sec); -} - -/* Generate a random number between 0 and 2^length - 1 where length is expressed - * in bits. - */ -void generate_random(uint8_t *random_p, ssize_t length) -{ - // random_t random_nb; - - // mpz_init_set_ui(random_nb, 0); - - // pthread_mutex_lock(&random_state.lock); - // mpz_urandomb(random_nb, random_state.state, 8 * length); - // pthread_mutex_unlock(&random_state.lock); - - // mpz_export(random_p, NULL, 1, length, 0, 0, random_nb); - int i;//r = 0, mask = 0, shift; - if (hss_config.random_bool > 0) { - for (i = 0; i < length; i ++) { - // if ((i % sizeof(i)) == 0) - // r = rand(); - // shift = 8 * (i % sizeof(i)); - // mask = 0xFF << shift; - // random_p[i] = (r & mask) >> shift; - random_p[i] = rand(); - } - } else { - for (i = 0; i < length; i ++) { - random_p[i] = 0; - } - } -} diff --git a/openair-cn/OPENAIRHSS/auc/rijndael.c b/openair-cn/OPENAIRHSS/auc/rijndael.c deleted file mode 100644 index bbf1e57d30..0000000000 --- a/openair-cn/OPENAIRHSS/auc/rijndael.c +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "auc.h" - -typedef uint8_t u8; -typedef uint32_t u32; - -/*-------------------- Rijndael round subkeys ---------------------*/ -u8 roundKeys[11][4][4]; -/*--------------------- Rijndael S box table ----------------------*/ -u8 S[256] = { - 99,124,119,123,242,107,111,197, 48, 1,103, 43,254,215,171,118, - 202,130,201,125,250, 89, 71,240,173,212,162,175,156,164,114,192, - 183,253,147, 38, 54, 63,247,204, 52,165,229,241,113,216, 49, 21, - 4,199, 35,195, 24,150, 5,154, 7, 18,128,226,235, 39,178,117, - 9,131, 44, 26, 27,110, 90,160, 82, 59,214,179, 41,227, 47,132, - 83,209, 0,237, 32,252,177, 91,106,203,190, 57, 74, 76, 88,207, - 208,239,170,251, 67, 77, 51,133, 69,249, 2,127, 80, 60,159,168, - 81,163, 64,143,146,157, 56,245,188,182,218, 33, 16,255,243,210, - 205, 12, 19,236, 95,151, 68, 23,196,167,126, 61,100, 93, 25,115, - 96,129, 79,220, 34, 42,144,136, 70,238,184, 20,222, 94, 11,219, - 224, 50, 58, 10, 73, 6, 36, 92,194,211,172, 98,145,149,228,121, - 231,200, 55,109,141,213, 78,169,108, 86,244,234,101,122,174, 8, - 186,120, 37, 46, 28,166,180,198,232,221,116, 31, 75,189,139,138, - 112, 62,181,102, 72, 3,246, 14, 97, 53, 87,185,134,193, 29,158, - 225,248,152, 17,105,217,142,148,155, 30,135,233,206, 85, 40,223, - 140,161,137, 13,191,230, 66,104, 65,153, 45, 15,176, 84,187, 22, -}; -/*------- This array does the multiplication by x in GF(2^8) ------*/ -u8 Xtime[256] = { - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, - 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, - 96, 98,100,102,104,106,108,110,112,114,116,118,120,122,124,126, - 128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158, - 160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190, - 192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222, - 224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254, - 27, 25, 31, 29, 19, 17, 23, 21, 11, 9, 15, 13, 3, 1, 7, 5, - 59, 57, 63, 61, 51, 49, 55, 53, 43, 41, 47, 45, 35, 33, 39, 37, - 91, 89, 95, 93, 83, 81, 87, 85, 75, 73, 79, 77, 67, 65, 71, 69, - 123,121,127,125,115,113,119,117,107,105,111,109, 99, 97,103,101, - 155,153,159,157,147,145,151,149,139,137,143,141,131,129,135,133, - 187,185,191,189,179,177,183,181,171,169,175,173,163,161,167,165, - 219,217,223,221,211,209,215,213,203,201,207,205,195,193,199,197, - 251,249,255,253,243,241,247,245,235,233,239,237,227,225,231,229 -}; -/*------------------------------------------------------------------- - * Rijndael key schedule function. Takes 16-byte key and creates - * all Rijndael's internal subkeys ready for encryption. - *-----------------------------------------------------------------*/ -void RijndaelKeySchedule( const u8 const key[16] ) -{ - u8 roundConst; - int i, j; - - printf("RijndaelKeySchedule: K %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n", - key[0],key[1],key[2],key[3],key[4],key[5],key[6],key[7], - key[8],key[9],key[10],key[11],key[12],key[13],key[14],key[15] ); - /* first round key equals key */ - for (i=0; i<16; i++) - roundKeys[0][i & 0x03][i>>2] = key[i]; - - roundConst = 1; - - /* now calculate round keys */ - for (i=1; i<11; i++) { - roundKeys[i][0][0] = S[roundKeys[i-1][1][3]] - ^ roundKeys[i-1][0][0] ^ roundConst; - roundKeys[i][1][0] = S[roundKeys[i-1][2][3]] - ^ roundKeys[i-1][1][0]; - roundKeys[i][2][0] = S[roundKeys[i-1][3][3]] - ^ roundKeys[i-1][2][0]; - roundKeys[i][3][0] = S[roundKeys[i-1][0][3]] - ^ roundKeys[i-1][3][0]; - - for (j=0; j<4; j++) { - roundKeys[i][j][1] = roundKeys[i-1][j][1] ^ roundKeys[i][j][0]; - roundKeys[i][j][2] = roundKeys[i-1][j][2] ^ roundKeys[i][j][1]; - roundKeys[i][j][3] = roundKeys[i-1][j][3] ^ roundKeys[i][j][2]; - } - - /* update round constant */ - roundConst = Xtime[roundConst]; - } - - return; -} /* end of function RijndaelKeySchedule */ -/* Round key addition function */ -void KeyAdd(u8 state[4][4], u8 roundKeys[11][4][4], int round) -{ - int i, j; - - for (i=0; i<4; i++) - for (j=0; j<4; j++) - state[i][j] ^= roundKeys[round][i][j]; - - return; -} -/* Byte substitution transformation */ -int ByteSub(u8 state[4][4]) -{ - int i, j; - - for (i=0; i<4; i++) - for (j=0; j<4; j++) - state[i][j] = S[state[i][j]]; - - return 0; -} -/* Row shift transformation */ -void ShiftRow(u8 state[4][4]) -{ - u8 temp; - /* left rotate row 1 by 1 */ - temp = state[1][0]; - state[1][0] = state[1][1]; - state[1][1] = state[1][2]; - state[1][2] = state[1][3]; - state[1][3] = temp; - /* left rotate row 2 by 2 */ - temp = state[2][0]; - state[2][0] = state[2][2]; - state[2][2] = temp; - temp = state[2][1]; - state[2][1] = state[2][3]; - state[2][3] = temp; - /* left rotate row 3 by 3 */ - temp = state[3][0]; - state[3][0] = state[3][3]; - state[3][3] = state[3][2]; - state[3][2] = state[3][1]; - state[3][1] = temp; - return; -} -/* MixColumn transformation*/ -void MixColumn(u8 state[4][4]) -{ - u8 temp, tmp, tmp0; - int i; - - /* do one column at a time */ - for (i=0; i<4; i++) { - temp = state[0][i] ^ state[1][i] ^ state[2][i] ^ state[3][i]; - tmp0 = state[0][i]; - /* Xtime array does multiply by x in GF2^8 */ - tmp = Xtime[state[0][i] ^ state[1][i]]; - state[0][i] ^= temp ^ tmp; - tmp = Xtime[state[1][i] ^ state[2][i]]; - state[1][i] ^= temp ^ tmp; - tmp = Xtime[state[2][i] ^ state[3][i]]; - state[2][i] ^= temp ^ tmp; - tmp = Xtime[state[3][i] ^ tmp0]; - state[3][i] ^= temp ^ tmp; - } - - return; -} -/*------------------------------------------------------------------- - * Rijndael encryption function. Takes 16-byte input and creates - * 16-byte output (using round keys already derived from 16-byte - * key). - *-----------------------------------------------------------------*/ -void RijndaelEncrypt( const u8 const input[16], u8 output[16] ) -{ - u8 state[4][4]; - int i, r; - - /* initialise state array from input byte string */ - for (i=0; i<16; i++) - state[i & 0x3][i>>2] = input[i]; - - /* add first round_key */ - KeyAdd(state, roundKeys, 0); - - /* do lots of full rounds */ - for (r=1; r<=9; r++) { - ByteSub(state); - ShiftRow(state); - MixColumn(state); - KeyAdd(state, roundKeys, r); - } - - /* final round */ - ByteSub(state); - ShiftRow(state); - KeyAdd(state, roundKeys, r); - - /* produce output byte string from state array */ - for (i=0; i<16; i++) { - output[i] = state[i & 0x3][i>>2]; - } - - return; -} /* end of function RijndaelEncrypt */ diff --git a/openair-cn/OPENAIRHSS/auc/sequence_number.c b/openair-cn/OPENAIRHSS/auc/sequence_number.c deleted file mode 100644 index 2f53b98be0..0000000000 --- a/openair-cn/OPENAIRHSS/auc/sequence_number.c +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "auc.h" -#include "hss_config.h" - -extern hss_config_t hss_config; -extern uint8_t op[16]; - -uint8_t *sqn_ms_derive(const uint8_t const opc[16], uint8_t *key, uint8_t *auts, uint8_t *rand_p) -{ - /* AUTS = Conc(SQN MS ) || MAC-S - * Conc(SQN MS ) = SQN MS ^ f5* (RAND) - * MAC-S = f1* (SQN MS || RAND || AMF) - */ - uint8_t ak[6]; - uint8_t *conc_sqn_ms; - uint8_t *mac_s; - uint8_t mac_s_computed[MAC_S_LENGTH]; - uint8_t *sqn_ms; - uint8_t amf[2] = { 0, 0 }; - int i; - - conc_sqn_ms = auts; - mac_s = &auts[6]; - - sqn_ms = malloc(SQN_LENGTH_OCTEST); - - /*if (hss_config.valid_opc == 0) { - SetOP(hss_config.operator_key); - }*/ - - /* Derive AK from key and rand */ - f5star(opc, key, rand_p, ak); - - for (i = 0; i < 6; i++) { - sqn_ms[i] = ak[i] ^ conc_sqn_ms[i]; - } - - print_buffer("sqn_ms_derive() KEY : ", key, 16); - print_buffer("sqn_ms_derive() RAND : ", rand_p, 16); - print_buffer("sqn_ms_derive() AUTS : ", auts, 14); - print_buffer("sqn_ms_derive() AK : ", ak, 6); - print_buffer("sqn_ms_derive() SQN_MS : ", sqn_ms, 6); - print_buffer("sqn_ms_derive() MAC_S : ", mac_s, 8); - - f1star(opc, key, rand_p, sqn_ms, amf, mac_s_computed); - - print_buffer("MAC_S +: ", mac_s_computed, 8); - - if (memcmp(mac_s_computed, mac_s, 8) != 0) { - fprintf(stderr, "Failed to verify computed SQN_MS\n"); - free(sqn_ms); - return NULL; - } - - return sqn_ms; -} diff --git a/openair-cn/OPENAIRHSS/autogen.sh b/openair-cn/OPENAIRHSS/autogen.sh deleted file mode 100755 index fccf26a61e..0000000000 --- a/openair-cn/OPENAIRHSS/autogen.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -autoreconf --force --install -I m4 \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/conf/COPYING b/openair-cn/OPENAIRHSS/conf/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/conf/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/conf/demoCA/COPYING b/openair-cn/OPENAIRHSS/conf/demoCA/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/conf/demoCA/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/conf/hss.conf.in b/openair-cn/OPENAIRHSS/conf/hss.conf.in deleted file mode 100644 index 4c5e4c7d93..0000000000 --- a/openair-cn/OPENAIRHSS/conf/hss.conf.in +++ /dev/null @@ -1,11 +0,0 @@ -## MySQL mandatory options -MYSQL_server = "@MYSQL_server@"; -MYSQL_user = "@MYSQL_user@"; -MYSQL_pass = "@MYSQL_pass@"; -MYSQL_db = "@MYSQL_db@"; - -## HSS options -OPERATOR_key = "@OPERATOR_key@"; - -## Freediameter options -FD_conf = "@FREEDIAMETER_PATH@/../etc/freeDiameter/hss_fd.conf"; diff --git a/openair-cn/OPENAIRHSS/conf/make_certs.sh b/openair-cn/OPENAIRHSS/conf/make_certs.sh deleted file mode 100755 index 181c49912d..0000000000 --- a/openair-cn/OPENAIRHSS/conf/make_certs.sh +++ /dev/null @@ -1,75 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ - -# ARG is REALM -# BY DEFAULT REALM IS "eur" - -DEFAULTREALMVALUE="eur" -REALM=${1:-$DEFAULTREALMVALUE} - -rm -rf demoCA -mkdir demoCA -echo 01 > demoCA/serial -touch demoCA/index.txt - -user=$(whoami) -HOSTNAME=$(hostname -f) - -echo "Creating HSS certificate for user '$HOSTNAME'.'$REALM'" -# -# # CA self certificate -# openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -subj /CN=test.fr/C=FR/ST=Biot/L=Aix/O=test.fr/OU=mobiles -# -# openssl genrsa -out hss.key.pem 1024 -# openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=hss.test.fr/C=FR/ST=Biot/L=Aix/O=test.fr/OU=mobiles -# openssl ca -cert cacert.pem -keyfile cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch - -# Create a Root Certification Authority Certificate -openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out hss.cacert.pem -keyout hss.cakey.pem -subj /CN=$REALM/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - -# Generate a Private Key -openssl genrsa -out hss.key.pem 1024 - -# Generate a CSR (Certificate Signing Request) that will be self-signed -openssl req -new -batch -out hss.csr.pem -key hss.key.pem -subj /CN=$HOSTNAME.$REALM/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - -# Certification authority -openssl ca -cert hss.cacert.pem -keyfile hss.cakey.pem -in hss.csr.pem -out hss.cert.pem -outdir . -batch - -if [ ! -d /usr/local/etc/freeDiameter ] -then - echo "Creating non existing directory: /usr/local/etc/freeDiameter/" - sudo mkdir /usr/local/etc/freeDiameter/ -fi - -sudo cp -upv hss.cakey.pem hss.cert.pem hss.cacert.pem hss.key.pem /usr/local/etc/freeDiameter/ - -# openssl genrsa -out $hss.key.pem 1024 -# openssl req -new -batch -out $hss.csr.pem -key $hss.key.pem -subj /CN=$hss.test.fr/C=FR/ST=Biot/L=Aix/O=test.fr/OU=mobiles -# openssl ca -cert cacert.pem -keyfile cakey.pem -in $hss.csr.pem -out $hss.cert.pem -outdir . -batch diff --git a/openair-cn/OPENAIRHSS/configure.ac b/openair-cn/OPENAIRHSS/configure.ac deleted file mode 100644 index 3aa0f11e8a..0000000000 --- a/openair-cn/OPENAIRHSS/configure.ac +++ /dev/null @@ -1,200 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AC_PREREQ([2.65]) - -define([svnversion], esyscmd([sh -c "svnversion ..|tr -d '\n'"])) - -AC_DEFINE(SVN_REVISION, "svnversion", [SVN Revision]) - -AC_INIT([openair-hss], [1.0.0.svnversion], [openair_admin@eurecom.fr]) -AC_CANONICAL_BUILD -AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE([1.11 silent-rules]) - -AC_CONFIG_MACRO_DIR([m4]) - -AC_CONFIG_HEADERS([config.h]) - -AM_MAINTAINER_MODE - -AM_SILENT_RULES([yes]) - -PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=true], [HAVE_CHECK=false]) -AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xtrue) - -AM_PROG_LEX -AM_PROG_LIBTOOL - -AC_PROG_YACC -AC_PROG_CXX -AC_PROG_RANLIB - -AC_TYPE_INT8_T -AC_TYPE_INT16_T -AC_TYPE_INT32_T -AC_TYPE_UINT8_T -AC_TYPE_UINT16_T -AC_TYPE_UINT32_T -AC_TYPE_UINT64_T -AC_TYPE_SIZE_T -AC_TYPE_SSIZE_T - -AC_CHECK_HEADERS([libintl.h malloc.h netinet/in.h stddef.h]) - -AC_CHECK_FUNCS([memset strdup strerror]) -AC_C_INLINE - -AC_FUNC_ALLOCA -AC_FUNC_MALLOC -AC_FUNC_REALLOC - -dnl *** Autoconf support *** -AC_ARG_ENABLE(autoconf, - [ --disable-autoconf disable automatic generation of configure script ], - enable_autoconf=$enableval, enable_autoconf=yes -) -AC_PATH_PROG(AUTOCONF, autoconf, @echo autoconf not available) -AC_PATH_PROG(AUTOHEADER, autoheader, @echo autoheader not available) -if test -z "$AUTOCONF"; then enable_autoconf=no ; fi -if test -z "$AUTOHEADER"; then enable_autoconf=no ; fi -if test x$enable_autoconf = xyes; then - CONFIGURE_DEPENDS="configure.in" -fi -AC_SUBST(CONFIGURE_DEPENDS) - -AC_CHECK_LIB([mysqlclient], - [mysql_init], - [], - []) - -dnl ***freediameter support*** -AC_CHECK_LIB([fdcore], [fd_core_initialize], [], - [AC_MSG_ERROR(Free diameter lib not installed)]) -AC_CHECK_LIB([fdproto], [fd_core_initialize], [], - [AC_MSG_ERROR(Free diameter lib not installed)]) - -dnl *** Freediameter requirements *** -AC_CHECK_HEADERS([signalent.h]) -AC_CHECK_FUNCS([ntohll strndup]) -AC_DEFINE([HAVE_AI_ADDRCONFIG], [], - [Define to 1 if you have AI_ADDRCONFIG defined in netdb.h]) -AC_DEFINE([HAVE_CLOCK_GETTIME], [], - [Define to 1 if you have clock_gettime in librt]) -AC_DEFINE([HAVE_PTHREAD_BAR], [], - [Define to 1 if you have pthread_barrier_wait in libpthread]) -AC_DEFINE([SCTP_CONNECTX_4_ARGS], [], - [Define to 1 if sctp_connectx function accepts 4 arguments]) -AC_CHECK_LIB([rt], [clock_gettime], [AC_DEFINE(HAVE_CLOCK_GETTIME, 1)], []) -AC_CHECK_LIB([pthread], [pthread_barrier_wait], - [AC_DEFINE(HAVE_PTHREAD_BAR, 1)], []) -AC_CHECK_DECL([AI_ADDRCONFIG], - [AC_DEFINE(HAVE_AI_ADDRCONFIG, 1)], - [], [[#include ]]) -AC_MSG_CHECKING(if sctp_connectx accepts 4 arguments) -AC_LINK_IFELSE([ - AC_LANG_SOURCE( - [[int main() { return sctp_connectx(0, NULL, 0, NULL); }]]) -], [AC_DEFINE(SCTP_CONNECTX_4_ARGS, 1)]) -AC_CHECK_LIB([gnutls], - [gnutls_hash], - [AC_DEFINE(GNUTLS_VERSION_210, 1, - [Define to 1 if you have gnutls 2.10 installed])], - []) -AC_CHECK_LIB([gnutls], - [gnutls_x509_trust_list_verify_crt], - [AC_DEFINE(GNUTLS_VERSION_300, 1, - [Define to 1 if you have gnutls 3.0 installed])], - []) -AC_CHECK_LIB([gnutls], - [gnutls_handshake_set_timeout], - [AC_DEFINE(GNUTLS_VERSION_310, 1, - [Define to 1 if you have gnutls 3.1 installed])], - []) - -AC_DEFINE(FREE_DIAMETER_MINIMUM_VERSION, "1.1.5", [freeDiameter minimum version]) - -AC_CHECK_LIB(gmp, __gmpz_init, , - [AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])]) -AC_CHECK_LIB([nettle], - [nettle_hmac_sha256_set_key], - [], - [AC_MSG_ERROR(nettle is not installed)]) -AC_CHECK_LIB([pthread], - [pthread_getspecific], - [], - [AC_MSG_ERROR(lib pthread is not installed)]) - -AC_SUBST(ADD_CFLAGS) - -dnl Add these flags -CFLAGS="$CFLAGS -Wall" -CFLAGS="$CFLAGS -Wshadow" -CFLAGS="$CFLAGS -Wcast-align" -CFLAGS="$CFLAGS -Wchar-subscripts" -CFLAGS="$CFLAGS -Wmissing-prototypes" -CFLAGS="$CFLAGS -Wmissing-declarations" -CFLAGS="$CFLAGS -Werror=implicit-function-declaration" - -AC_C_BIGENDIAN -if test "x$ac_cv_c_bigendian" = "xyes"; then - CFLAGS="$CFLAGS -DBYTE_ORDER=BIG_ENDIAN" -else - CFLAGS="$CFLAGS -DBYTE_ORDER=LITTLE_ENDIAN" -fi - -AC_SUBST([AM_CFLAGS]) - -AC_ARG_ENABLE(dh_install, AS_HELP_STRING([--enable-dh-install], [Replace some variables for installation]), - [], - []) - -if test x$enable_dh_install == xyes; then - AC_SUBST(AM_CONF_DIR, $sysconfdir/openair-hss) -else - AC_SUBST(AM_CONF_DIR, $srcdir/conf) -fi - -AC_OUTPUT( \ - conf/hss.conf \ - access_restriction/Makefile \ - auc/Makefile \ - db/Makefile \ - s6a/Makefile \ - utils/Makefile \ - tests/Makefile \ - Makefile \ -) - -echo " -($PACKAGE_NAME) version $PACKAGE_VERSION -Prefix.........: $prefix -C Compiler.....: $CC $CFLAGS -Linker.........: $LD $LDFLAGS $LIBS -Tests..........: ${HAVE_CHECK} -" \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/db/COPYING b/openair-cn/OPENAIRHSS/db/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/db/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/db/Makefile.am b/openair-cn/OPENAIRHSS/db/Makefile.am deleted file mode 100644 index cc97c37a20..0000000000 --- a/openair-cn/OPENAIRHSS/db/Makefile.am +++ /dev/null @@ -1,40 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir) \ - -I$(top_srcdir)/s6a \ - -I$(top_srcdir)/utils - -noinst_LTLIBRARIES = libdb.la - -libdb_la_LDFLAGS = -all-static -libdb_la_SOURCES = \ - db_proto.h db_connector.c \ - db_subscription_data.c \ - db_epc_equipment.c \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/db/db_connector.c b/openair-cn/OPENAIRHSS/db/db_connector.c deleted file mode 100644 index f96032896a..0000000000 --- a/openair-cn/OPENAIRHSS/db/db_connector.c +++ /dev/null @@ -1,702 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "hss_config.h" -#include "db_proto.h" - -extern void ComputeOPc( const uint8_t const kP[16], const uint8_t const opP[16], uint8_t opcP[16] ); - - -database_t *db_desc; - -static void print_buffer(const char *prefix, uint8_t *buffer, int length) -{ - int i; - - fprintf(stdout, "%s", prefix); - - for (i = 0; i < length; i++) { - fprintf(stdout, "%02x.", buffer[i]); - } - - fprintf(stdout, "\n"); -} - -int hss_mysql_connect(const hss_config_t *hss_config_p) -{ - const int mysql_reconnect_val = 1; - - if ((hss_config_p->mysql_server == NULL) || - (hss_config_p->mysql_user == NULL) || - (hss_config_p->mysql_password == NULL) || - (hss_config_p->mysql_database == NULL)) { - DB_ERROR("An empty name is not allowed\n"); - return EINVAL; - } - - DB_DEBUG("Initializing db layer\n"); - - db_desc = malloc(sizeof(database_t)); - - if (db_desc == NULL) { - DB_DEBUG("An error occured on MALLOC\n"); - return errno; - } - - pthread_mutex_init(&db_desc->db_cs_mutex, NULL); - - /* Copy database configuration from static hss config */ - db_desc->server = strdup(hss_config_p->mysql_server); - db_desc->user = strdup(hss_config_p->mysql_user); - db_desc->password = strdup(hss_config_p->mysql_password); - db_desc->database = strdup(hss_config_p->mysql_database); - - /* Init mySQL client */ - db_desc->db_conn = mysql_init(NULL); - - mysql_options(db_desc->db_conn, MYSQL_OPT_RECONNECT, &mysql_reconnect_val); - - /* Try to connect to database */ - if (!mysql_real_connect(db_desc->db_conn, db_desc->server, db_desc->user, - db_desc->password, db_desc->database, 0, NULL, 0)) { - DB_ERROR("An error occured while connecting to db: %s\n", - mysql_error(db_desc->db_conn)); - return -1; - } - - /* Set the multi statement ON */ - mysql_set_server_option(db_desc->db_conn, MYSQL_OPTION_MULTI_STATEMENTS_ON); - - DB_DEBUG("Initializing db layer: DONE\n"); - - return 0; -} - -void hss_mysql_disconnect(void) -{ - mysql_close(db_desc->db_conn); -} - -int hss_mysql_update_loc(const char *imsi, mysql_ul_ans_t *mysql_ul_ans) -{ - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - int ret = 0; - - if ((db_desc->db_conn == NULL) || (mysql_ul_ans == NULL)) { - return EINVAL; - } - - if (strlen(imsi) > 15) { - return EINVAL; - } - - sprintf(query, "SELECT `access_restriction`,`mmeidentity_idmmeidentity`," - "`msisdn`,`ue_ambr_ul`,`ue_ambr_dl`,`rau_tau_timer` " - "FROM `users` WHERE `users`.`imsi`='%s' ", imsi); - - memcpy(mysql_ul_ans->imsi, imsi, strlen(imsi) + 1); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - int mme_id; - /* MSISDN may be NULL */ - mysql_ul_ans->access_restriction = atoi(row[0]); - - if ((mme_id = atoi(row[1])) > 0) { - ret = hss_mysql_query_mmeidentity(mme_id, &mysql_ul_ans->mme_identity); - } else { - mysql_ul_ans->mme_identity.mme_host[0] = '\0'; - mysql_ul_ans->mme_identity.mme_realm[0] = '\0'; - } - - if (row[2] != 0) { - memcpy(mysql_ul_ans->msisdn, row[2], strlen(row[2])); - } - - mysql_ul_ans->aggr_ul = atoi(row[3]); - mysql_ul_ans->aggr_dl = atoi(row[4]); - mysql_ul_ans->rau_tau = atoi(row[5]); - - mysql_free_result(res); - mysql_thread_end(); - return ret; - } - - mysql_free_result(res); - mysql_thread_end(); - return EINVAL; -} - -int hss_mysql_purge_ue(mysql_pu_req_t *mysql_pu_req, - mysql_pu_ans_t *mysql_pu_ans) -{ - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - int ret = 0; - - if ((db_desc->db_conn == NULL) || - (mysql_pu_req == NULL) || - (mysql_pu_ans == NULL)) { - return EINVAL; - } - - if (strlen(mysql_pu_req->imsi) > 15) { - return EINVAL; - } - - sprintf(query, "UPDATE `users` SET `users`.`ms_ps_status`=\"PURGED\" " - "WHERE `users`.`imsi`='%s'; " - "SELECT `users`.`mmeidentity_idmmeidentity` FROM `users` " - "WHERE `users`.`imsi`=%s ", - mysql_pu_req->imsi, mysql_pu_req->imsi); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - int mme_id; - - if ((mme_id = atoi(row[0])) > 0) { - ret = hss_mysql_query_mmeidentity(mme_id, mysql_pu_ans); - } else { - mysql_pu_ans->mme_host[0] = '\0'; - mysql_pu_ans->mme_realm[0] = '\0'; - } - - mysql_free_result(res); - mysql_thread_end(); - return ret; - } - - mysql_free_result(res); - mysql_thread_end(); - return EINVAL; -} - -int hss_mysql_get_user(const char *imsi) -{ - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - sprintf(query, "SELECT `imsi` FROM `users` WHERE `users`.`imsi`=%s ", imsi); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - mysql_free_result(res); - mysql_thread_end(); - return 0; - } - - mysql_free_result(res); - mysql_thread_end(); - - return EINVAL; -} - -int mysql_push_up_loc(mysql_ul_push_t *ul_push_p) -{ - MYSQL_RES *res; - char query[1000]; - int query_length = 0; - int status; - - if ((db_desc->db_conn == NULL) || (ul_push_p == NULL)) { - return EINVAL; - } - - // TODO: multi-statement check results - - if (ul_push_p->mme_identity_present == MME_IDENTITY_PRESENT) { - query_length += sprintf(&query[query_length], "INSERT INTO `mmeidentity`" - " (`mmehost`,`mmerealm`) SELECT '%s','%s' FROM `mmeidentity` WHERE NOT" - " EXISTS (SELECT * FROM `mmeidentity` WHERE `mmehost`='%s'" - " AND `mmerealm`='%s') LIMIT 1;", ul_push_p->mme_identity.mme_host, - ul_push_p->mme_identity.mme_realm, ul_push_p->mme_identity.mme_host, - ul_push_p->mme_identity.mme_realm); - } - - query_length += sprintf(&query[query_length], "UPDATE `users`%s SET ", - ul_push_p->mme_identity_present == MME_IDENTITY_PRESENT ? - ",`mmeidentity`" : ""); - - if (ul_push_p->imei_present == IMEI_PRESENT) { - query_length += sprintf(&query[query_length], "`imei`='%s',", - ul_push_p->imei); - } - - if (ul_push_p->sv_present == SV_PRESENT) { - query_length += sprintf(&query[query_length], "`imeisv`='%*s',", 2, - ul_push_p->software_version); - } - - if (ul_push_p->mme_identity_present == MME_IDENTITY_PRESENT) { - query_length += sprintf(&query[query_length], - "`users`.`mmeidentity_idmmeidentity`=`mmeidentity`.`idmmeidentity`, " - "`users`.`ms_ps_status`=\"NOT_PURGED\""); - } - - query_length += sprintf(&query[query_length], " WHERE `users`.`imsi`='%s'", - ul_push_p->imsi); - - if (ul_push_p->mme_identity_present == MME_IDENTITY_PRESENT) { - query_length += sprintf(&query[query_length], - " AND `mmeidentity`.`mmehost`='%s'" - " AND `mmeidentity`.`mmerealm`='%s'", - ul_push_p->mme_identity.mme_host, ul_push_p->mme_identity.mme_realm); - } - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - fprintf(stderr, "Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - /* process each statement result */ - do { - /* did current statement return data? */ - res = mysql_store_result(db_desc->db_conn); - - if (res) { - /* yes; process rows and free the result set */ - mysql_free_result(res); - } else { /* no result set or error */ - if (mysql_field_count(db_desc->db_conn) == 0) { - DB_ERROR("%lld rows affected\n", - mysql_affected_rows(db_desc->db_conn)); - } else { /* some error occurred */ - DB_ERROR("Could not retrieve result set\n"); - break; - } - } - - /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */ - if ((status = mysql_next_result(db_desc->db_conn)) > 0) - DB_ERROR("Could not execute statement\n"); - } while (status == 0); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - mysql_free_result(res); - mysql_thread_end(); - - return 0; -} - -int hss_mysql_push_rand_sqn(const char *imsi, uint8_t *rand_p, uint8_t *sqn) -{ - int status = 0, i; - MYSQL_RES *res; - char query[1000]; - int query_length = 0; - uint64_t sqn_decimal = 0; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - if (rand_p == NULL || sqn == NULL) { - return EINVAL; - } - - sqn_decimal = ((uint64_t)sqn[0] << 40) | ((uint64_t)sqn[1] << 32) | - ((uint64_t)sqn[2] << 24) | (sqn[3] << 16) | - (sqn[4] << 8) | sqn[5]; - - query_length = sprintf(query, "UPDATE `users` SET `rand`=UNHEX('"); - - for (i = 0; i < RAND_LENGTH; i ++) { - query_length += sprintf(&query[query_length], "%02x", rand_p[i]); - } - - query_length += sprintf(&query[query_length], "'),`sqn`=%"PRIu64, sqn_decimal); - query_length += sprintf(&query[query_length], " WHERE `users`.`imsi`='%s'", imsi); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - /* process each statement result */ - do { - /* did current statement return data? */ - res = mysql_store_result(db_desc->db_conn); - - if (res) { - /* yes; process rows and free the result set */ - mysql_free_result(res); - } else { /* no result set or error */ - if (mysql_field_count(db_desc->db_conn) == 0) { - DB_ERROR("%lld rows affected\n", - mysql_affected_rows(db_desc->db_conn)); - } else { /* some error occurred */ - DB_ERROR("Could not retrieve result set\n"); - break; - } - } - - /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */ - if ((status = mysql_next_result(db_desc->db_conn)) > 0) - DB_ERROR("Could not execute statement\n"); - } while (status == 0); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - mysql_free_result(res); - mysql_thread_end(); - - return 0; -} - -int hss_mysql_increment_sqn(const char *imsi) -{ - int status; - MYSQL_RES *res; - char query[1000]; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - if (imsi == NULL) { - return EINVAL; - } - - /* + 32 = 2 ^ sizeof(IND) (see 3GPP TS. 33.102) */ - sprintf(query, "UPDATE `users` SET `sqn` = `sqn` + 32 WHERE `users`.`imsi`=%s", imsi); - - DB_DEBUG("Query: %s\n", query); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - /* process each statement result */ - do { - /* did current statement return data? */ - res = mysql_store_result(db_desc->db_conn); - - if (res) { - /* yes; process rows and free the result set */ - mysql_free_result(res); - } else { /* no result set or error */ - if (mysql_field_count(db_desc->db_conn) == 0) { - DB_ERROR("%lld rows affected\n", - mysql_affected_rows(db_desc->db_conn)); - } else { /* some error occurred */ - DB_ERROR("Could not retrieve result set\n"); - break; - } - } - - /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */ - if ((status = mysql_next_result(db_desc->db_conn)) > 0) - DB_ERROR("Could not execute statement\n"); - } while (status == 0); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - mysql_free_result(res); - mysql_thread_end(); - - return 0; -} - -int hss_mysql_auth_info(mysql_auth_info_req_t *auth_info_req, - mysql_auth_info_resp_t *auth_info_resp) -{ - int ret = 0; - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - if ((auth_info_req == NULL) || (auth_info_resp == NULL)) { - return EINVAL; - } - - sprintf(query, "SELECT `key`,`sqn`,`rand`,`OPc` FROM `users` WHERE `users`.`imsi`=%s ", - auth_info_req->imsi); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - if (row[0] == NULL || row[1] == NULL || row[2] == NULL || row[3] == NULL) { - ret = EINVAL; - } - - if (row[0] != NULL) { - print_buffer("Key: ", (uint8_t*)row[0], KEY_LENGTH); - memcpy(auth_info_resp->key, row[0], KEY_LENGTH); - } - - if (row[1] != NULL) { - uint64_t sqn = 0; - - sqn = atoll(row[1]); - printf("Received SQN %s converted to %"PRIu64"\n", row[1], sqn); - - auth_info_resp->sqn[0] = (sqn & (255UL << 40)) >> 40; - auth_info_resp->sqn[1] = (sqn & (255UL << 32)) >> 32; - auth_info_resp->sqn[2] = (sqn & (255UL << 24)) >> 24; - auth_info_resp->sqn[3] = (sqn & (255UL << 16)) >> 16; - auth_info_resp->sqn[4] = (sqn & (255UL << 8)) >> 8; - auth_info_resp->sqn[5] = (sqn & 0xFF); - - print_buffer("SQN: ", auth_info_resp->sqn, SQN_LENGTH); - } - - if (row[2] != NULL) { - print_buffer("RAND: ", (uint8_t*)row[2], RAND_LENGTH); - memcpy(auth_info_resp->rand, row[2], RAND_LENGTH); - } - - if (row[3] != NULL) { - print_buffer("OPc: ", (uint8_t*)row[3], KEY_LENGTH); - memcpy(auth_info_resp->opc, row[3], KEY_LENGTH); - } - - mysql_free_result(res); - mysql_thread_end(); - return ret; - } - - mysql_free_result(res); - mysql_thread_end(); - - return EINVAL; -} - -int hss_mysql_check_opc_keys(const uint8_t const opP[16]) -{ - int ret = 0; - MYSQL_RES *res = NULL; - MYSQL_RES *res2 = NULL; - MYSQL_ROW row; - char query[1000]; - char update[1000]; - uint8_t k[16]; - uint8_t opc[16]; - int update_length = 0; - int status = 0; - int i; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - sprintf(query, "SELECT `imsi`,`key`,`OPc` FROM `users` "); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - - while ((row = mysql_fetch_row(res))) { - if (row[0] == NULL || row[1] == NULL ) { - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - ret = EINVAL; - } else { - if (row[0] != NULL) { - printf("IMSI: %s", (uint8_t*)row[0]); - } - if (row[1] != NULL) { - print_buffer("Key: ", (uint8_t*)row[1], KEY_LENGTH); - memcpy(k, row[1], KEY_LENGTH); - } - //if (row[3] != NULL) - { - print_buffer("OPc: ", (uint8_t*)row[2], KEY_LENGTH); - //} else { - ComputeOPc( k, opP, opc); - update_length = sprintf(update, "UPDATE `users` SET `OPc`=UNHEX('"); - for (i = 0; i < KEY_LENGTH; i ++) { - update_length += sprintf(&update[update_length], "%02x", opc[i]); - } - update_length += sprintf(&update[update_length], "') WHERE `users`.`imsi`='%s'", (uint8_t*)row[0]); - DB_DEBUG("Query: %s\n", update); - - if (mysql_query(db_desc->db_conn, update)) { - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - } else { - printf("IMSI %s Updated OPc ", (uint8_t*)row[0]); - for (i = 0; i < KEY_LENGTH; i ++) { - printf("%02x", (uint8_t)(row[2][i])); - } - printf(" -> "); - for (i = 0; i < KEY_LENGTH; i ++) { - printf("%02x", opc[i]); - } - printf("\n"); - - /* process each statement result */ - do { - /* did current statement return data? */ - res2 = mysql_store_result(db_desc->db_conn); - - if (res2) { - /* yes; process rows and free the result set */ - mysql_free_result(res2); - } else { /* no result set or error */ - if (mysql_field_count(db_desc->db_conn) == 0) { - DB_ERROR("%lld rows affected\n", - mysql_affected_rows(db_desc->db_conn)); - } else { /* some error occurred */ - DB_ERROR("Could not retrieve result set\n"); - break; - } - } - - /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */ - if ((status = mysql_next_result(db_desc->db_conn)) > 0) - DB_ERROR("Could not execute statement\n"); - } while (status == 0); - } - } - } - } - - mysql_free_result(res); - mysql_thread_end(); - - return ret; - -} - - diff --git a/openair-cn/OPENAIRHSS/db/db_epc_equipment.c b/openair-cn/OPENAIRHSS/db/db_epc_equipment.c deleted file mode 100644 index 8b6c430e7c..0000000000 --- a/openair-cn/OPENAIRHSS/db/db_epc_equipment.c +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "hss_config.h" -#include "db_proto.h" - -int hss_mysql_query_mmeidentity(const int id_mme_identity, - mysql_mme_identity_t *mme_identity_p) -{ - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - - if ((db_desc->db_conn == NULL) || (mme_identity_p == NULL)) { - return EINVAL; - } - - memset(mme_identity_p, 0, sizeof(mysql_mme_identity_t)); - - sprintf(query, "SELECT mmehost,mmerealm FROM mmeidentity WHERE " - "mmeidentity.idmmeidentity='%d' ", id_mme_identity); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - if (row[0] != NULL) { - memcpy(mme_identity_p->mme_host, row[0], strlen(row[0])); - } else { - mme_identity_p->mme_host[0] = '\0'; - } - - if (row[1] != NULL) { - memcpy(mme_identity_p->mme_realm, row[1], strlen(row[1])); - } else { - mme_identity_p->mme_realm[0] = '\0'; - } - - mysql_free_result(res); - mysql_thread_end(); - return 0; - } - - mysql_free_result(res); - mysql_thread_end(); - return EINVAL; -} - -int hss_mysql_check_epc_equipment(mysql_mme_identity_t *mme_identity_p) -{ - MYSQL_RES *res; - MYSQL_ROW row; - char query[1000]; - - if ((db_desc->db_conn == NULL) || (mme_identity_p == NULL)) { - return EINVAL; - } - - sprintf(query, "SELECT idmmeidentity FROM mmeidentity WHERE mmeidentity.mmehost='%s' ", - mme_identity_p->mme_host); - - DB_DEBUG("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - DB_ERROR("Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - if ((row = mysql_fetch_row(res)) != NULL) { - mysql_free_result(res); - mysql_thread_end(); - return 0; - } - - mysql_free_result(res); - mysql_thread_end(); - return EINVAL; -} diff --git a/openair-cn/OPENAIRHSS/db/db_proto.h b/openair-cn/OPENAIRHSS/db/db_proto.h deleted file mode 100644 index d87ed461e5..0000000000 --- a/openair-cn/OPENAIRHSS/db/db_proto.h +++ /dev/null @@ -1,206 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include - -#include /* To provide internet addresses strings helpers */ - -#ifndef DB_PROTO_H_ -#define DB_PROTO_H_ - -#define DB_DEBUG(fmt, args...) fprintf(stdout, "%s:%d: "fmt, __FILE__, __LINE__, ##args) -#define DB_ERROR(fmt, args...) fprintf(stderr, "%s:%d: "fmt, __FILE__, __LINE__, ##args) - -typedef struct { - /* The mysql reference connector object */ - MYSQL *db_conn; - char *server; - char *user; - char *password; - char *database; - - pthread_mutex_t db_cs_mutex; -} database_t; - -extern database_t *db_desc; - -typedef uint32_t pre_emp_vul_t; -typedef uint32_t pre_emp_cap_t; -typedef uint8_t access_restriction_t; -typedef uint32_t ambr_t; -typedef uint8_t qci_t; -typedef uint8_t prio_level_t; -typedef uint32_t rau_tau_t; - -#define IMSI_LENGTH_MAX (15) - -typedef struct { - char imsi[IMSI_LENGTH_MAX + 1]; -} mysql_auth_info_req_t; - -/* Expressed in bytes */ -#define KEY_LENGTH (16) -#define SQN_LENGTH (6) -#define RAND_LENGTH (16) - -typedef struct mysql_auth_info_resp_s{ - uint8_t key[KEY_LENGTH]; - uint8_t sqn[SQN_LENGTH]; - /* RAND should not be here... */ - uint8_t rand[RAND_LENGTH]; - uint8_t opc[KEY_LENGTH]; -} mysql_auth_info_resp_t; - -typedef struct mysql_opc_push_s{ - char imsi[IMSI_LENGTH_MAX + 1]; - /* New computed SQN that will be used on next auth info req */ - uint8_t sqn[SQN_LENGTH]; -} mysql_opc_push_t; - -typedef struct mysql_sqn_push_s{ - char imsi[IMSI_LENGTH_MAX + 1]; - /* New computed SQN that will be used on next auth info req */ - uint8_t sqn[SQN_LENGTH]; -} mysql_sqn_push_t; - -typedef struct mysql_mme_identity_s{ - /* An MME may have already been registered as serving the UE. */ - char mme_host[255]; - char mme_realm[200]; -} mysql_mme_identity_t; - -typedef struct mysql_ul_ans_s{ - char imsi[16]; - /* MSISDN this parameter may be NULL */ - char msisdn[16]; - - /* Maximum aggregated bitrates for the user */ - ambr_t aggr_ul; - ambr_t aggr_dl; - - /* Subscribed RAU-TAU timer */ - rau_tau_t rau_tau; - - access_restriction_t access_restriction; - mysql_mme_identity_t mme_identity; -} mysql_ul_ans_t; - -typedef struct mysql_ul_push_s{ - /* Bit masks indicating presence of optional fields */ -#define MME_IDENTITY_PRESENT (0x1) -#define MME_SUPPORTED_FEATURES_PRESENT (0x1) -#define IMEI_PRESENT (0x1) -#define SV_PRESENT (0x1) -#define UE_SRVCC_PRESENT (0x1) - - unsigned mme_identity_present:1; - unsigned mme_supported_features_present:1; - unsigned imei_present:1; - unsigned sv_present:1; - unsigned ue_srvcc_present:1; - - /* IMSI */ - char imsi[16]; - /* Origin host and realm */ - mysql_mme_identity_t mme_identity; - /* IMEISV */ - char imei[16]; - char software_version[2]; - - uint32_t ue_srvcc; - uint32_t mme_supported_features; -} mysql_ul_push_t; - -typedef enum { - IPV4 = 0, - IPV6 = 1, - IPV4V6 = 2, - IPV4_OR_IPV6 = 3, -} pdn_type_t; - -typedef struct pdn_address_s{ - char ipv4_address[INET_ADDRSTRLEN]; - char ipv6_address[INET6_ADDRSTRLEN]; -} pdn_address_t; - -typedef struct mysql_pdn_s{ - char apn[61]; - pdn_type_t pdn_type; - pdn_address_t pdn_address; - ambr_t aggr_ul; - ambr_t aggr_dl; - qci_t qci; - prio_level_t priority_level; - pre_emp_cap_t pre_emp_cap; - pre_emp_vul_t pre_emp_vul; -} mysql_pdn_t; - -typedef struct mysql_pu_req_s{ - /* IMSI */ - char imsi[16]; -} mysql_pu_req_t; - -typedef mysql_mme_identity_t mysql_pu_ans_t; - -int hss_mysql_connect(const hss_config_t *hss_config_p); - -void hss_mysql_disconnect(void); - -int hss_mysql_get_user(const char *imsi); - -int hss_mysql_update_loc(const char *imsi, mysql_ul_ans_t *mysql_ul_ans); - -int hss_mysql_query_mmeidentity(const int id_mme_identity, - mysql_mme_identity_t *mme_identity_p); - -int hss_mysql_check_epc_equipment(mysql_mme_identity_t *mme_identity_p); - -int mysql_push_up_loc(mysql_ul_push_t *ul_push_p); - -int hss_mysql_purge_ue(mysql_pu_req_t *mysql_pu_req, - mysql_pu_ans_t *mysql_pu_ans); - -int hss_mysql_query_pdns(const char *imsi, - mysql_pdn_t **pdns_p, - uint8_t *nb_pdns); - -int hss_mysql_auth_info(mysql_auth_info_req_t *auth_info_req, - mysql_auth_info_resp_t *auth_info_resp); - -int hss_mysql_push_rand_sqn(const char *imsi, uint8_t *rand_p, uint8_t *sqn); - -int hss_mysql_increment_sqn(const char *imsi); - -int hss_mysql_check_opc_keys(const uint8_t const opP[16]); - - -#endif /* DB_PROTO_H_ */ diff --git a/openair-cn/OPENAIRHSS/db/db_subscription_data.c b/openair-cn/OPENAIRHSS/db/db_subscription_data.c deleted file mode 100644 index dc06a011a8..0000000000 --- a/openair-cn/OPENAIRHSS/db/db_subscription_data.c +++ /dev/null @@ -1,171 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "hss_config.h" -#include "db_proto.h" - -int hss_mysql_query_pdns(const char *imsi, - mysql_pdn_t **pdns_p, - uint8_t *nb_pdns) -{ - int ret; - MYSQL_RES *res = NULL; - MYSQL_ROW row; - char query[1000]; - mysql_pdn_t *pdn_array = NULL; - - if (db_desc->db_conn == NULL) { - return EINVAL; - } - - if (nb_pdns == NULL || pdns_p == NULL) { - return EINVAL; - } - - sprintf(query, "SELECT * FROM `pdn` WHERE " - "`pdn`.`users_imsi`=%s LIMIT 10; ", imsi); - - printf("Query: %s\n", query); - - pthread_mutex_lock(&db_desc->db_cs_mutex); - - if (mysql_query(db_desc->db_conn, query)) { - pthread_mutex_unlock(&db_desc->db_cs_mutex); - fprintf(stderr, "Query execution failed: %s\n", - mysql_error(db_desc->db_conn)); - mysql_thread_end(); - return EINVAL; - } - - res = mysql_store_result(db_desc->db_conn); - - pthread_mutex_unlock(&db_desc->db_cs_mutex); - - *nb_pdns = 0; - - while ((row = mysql_fetch_row(res)) != NULL) { - mysql_pdn_t *pdn_elm; /* Local PDN element in array */ - unsigned long *lengths; - - lengths = mysql_fetch_lengths(res); - - *nb_pdns += 1; - - if (*nb_pdns == 1) { - /* First row, must malloc */ - pdn_array = malloc(sizeof(mysql_pdn_t)); - } else { - pdn_array = realloc(pdn_array, *nb_pdns * sizeof(mysql_pdn_t)); - } - - if (pdn_array == NULL) { - /* Error on malloc */ - ret = ENOMEM; - goto err; - } - - pdn_elm = &pdn_array[*nb_pdns - 1]; - /* Copying the APN */ - memset(pdn_elm, 0, sizeof(mysql_pdn_t)); - memcpy(pdn_elm->apn, row[1], lengths[1]); - - /* PDN Type + PDN address */ - if (strcmp(row[2], "IPv6") == 0) { - pdn_elm->pdn_type = IPV6; - memcpy(pdn_elm->pdn_address.ipv6_address, row[4], lengths[4]); - pdn_elm->pdn_address.ipv6_address[lengths[4]] = '\0'; - } else if (strcmp(row[2], "IPv4v6") == 0) { - pdn_elm->pdn_type = IPV4V6; - memcpy(pdn_elm->pdn_address.ipv4_address, row[3], lengths[3]); - pdn_elm->pdn_address.ipv4_address[lengths[3]] = '\0'; - memcpy(pdn_elm->pdn_address.ipv6_address, row[4], lengths[4]); - pdn_elm->pdn_address.ipv6_address[lengths[4]] = '\0'; - } else if (strcmp(row[2], "IPv4_or_IPv6") == 0) { - pdn_elm->pdn_type = IPV4_OR_IPV6; - memcpy(pdn_elm->pdn_address.ipv4_address, row[3], lengths[3]); - pdn_elm->pdn_address.ipv4_address[lengths[3]] = '\0'; - memcpy(pdn_elm->pdn_address.ipv6_address, row[4], lengths[4]); - pdn_elm->pdn_address.ipv6_address[lengths[4]] = '\0'; - } else { - pdn_elm->pdn_type = IPV4; - memcpy(pdn_elm->pdn_address.ipv4_address, row[3], lengths[3]); - pdn_elm->pdn_address.ipv4_address[lengths[3]] = '\0'; - } - - pdn_elm->aggr_ul = atoi(row[5]); - pdn_elm->aggr_dl = atoi(row[6]); - pdn_elm->qci = atoi(row[9]); - pdn_elm->priority_level = atoi(row[10]); - - if (strcmp(row[11], "ENABLED") == 0) { - pdn_elm->pre_emp_cap = 0; - } else { - pdn_elm->pre_emp_cap = 1; - } - - if (strcmp(row[12], "DISABLED") == 0) { - pdn_elm->pre_emp_vul = 1; - } else { - pdn_elm->pre_emp_vul = 0; - } - } - - mysql_free_result(res); - mysql_thread_end(); - - /* We did not find any APN for the requested IMSI */ - if (*nb_pdns == 0) { - return EINVAL; - } else { - *pdns_p = pdn_array; - return 0; - } - -err: - - if (pdn_array) { - free(pdn_array); - } - - pdn_array = NULL; - *pdns_p = pdn_array; - *nb_pdns = 0; - mysql_free_result(res); - mysql_thread_end(); - return ret; -} diff --git a/openair-cn/OPENAIRHSS/db/oai_db.sql b/openair-cn/OPENAIRHSS/db/oai_db.sql deleted file mode 100644 index c763ce4afb..0000000000 --- a/openair-cn/OPENAIRHSS/db/oai_db.sql +++ /dev/null @@ -1,175 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.0.10deb1 --- http://www.phpmyadmin.net --- --- Host: localhost --- Generation Time: May 28, 2015 at 02:32 PM --- Server version: 5.5.43-0ubuntu0.14.04.1 --- PHP Version: 5.5.9-1ubuntu4.9 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; - --- --- Database: `oai_db` --- - --- -------------------------------------------------------- - --- --- Table structure for table `apn` --- - -CREATE TABLE IF NOT EXISTS `apn` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `apn-name` varchar(60) NOT NULL, - `pdn-type` enum('IPv4','IPv6','IPv4v6','IPv4_or_IPv6') NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `apn-name` (`apn-name`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `mmeidentity` --- - -CREATE TABLE IF NOT EXISTS `mmeidentity` ( - `idmmeidentity` int(11) NOT NULL AUTO_INCREMENT, - `mmehost` varchar(255) DEFAULT NULL, - `mmerealm` varchar(200) DEFAULT NULL, - `UE-Reachability` tinyint(1) NOT NULL COMMENT 'Indicates whether the MME supports UE Reachability Notifcation', - PRIMARY KEY (`idmmeidentity`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ; - --- --- Dumping data for table `mmeidentity` --- - -INSERT INTO `mmeidentity` (`idmmeidentity`, `mmehost`, `mmerealm`, `UE-Reachability`) VALUES -(2, 'yang.openair4G.eur', 'openair4G.eur', 0), -(1, 'ng40-erc.openair4G.eur', 'openair4G.eur', 0); - --- -------------------------------------------------------- - --- --- Table structure for table `pdn` --- - -CREATE TABLE IF NOT EXISTS `pdn` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `apn` varchar(60) NOT NULL, - `pdn_type` enum('IPv4','IPv6','IPv4v6','IPv4_or_IPv6') NOT NULL DEFAULT 'IPv4', - `pdn_ipv4` varchar(15) DEFAULT '0.0.0.0', - `pdn_ipv6` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT '0:0:0:0:0:0:0:0', - `aggregate_ambr_ul` int(10) unsigned DEFAULT '50000000', - `aggregate_ambr_dl` int(10) unsigned DEFAULT '100000000', - `pgw_id` int(11) NOT NULL, - `users_imsi` varchar(15) NOT NULL, - `qci` tinyint(3) unsigned NOT NULL DEFAULT '9', - `priority_level` tinyint(3) unsigned NOT NULL DEFAULT '15', - `pre_emp_cap` enum('ENABLED','DISABLED') DEFAULT 'DISABLED', - `pre_emp_vul` enum('ENABLED','DISABLED') DEFAULT 'DISABLED', - `LIPA-Permissions` enum('LIPA-prohibited','LIPA-only','LIPA-conditional') NOT NULL DEFAULT 'LIPA-only', - PRIMARY KEY (`id`,`pgw_id`,`users_imsi`), - KEY `fk_pdn_pgw1_idx` (`pgw_id`), - KEY `fk_pdn_users1_idx` (`users_imsi`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=36 ; - --- --- Dumping data for table `pdn` --- - -INSERT INTO `pdn` (`id`, `apn`, `pdn_type`, `pdn_ipv4`, `pdn_ipv6`, `aggregate_ambr_ul`, `aggregate_ambr_dl`, `pgw_id`, `users_imsi`, `qci`, `priority_level`, `pre_emp_cap`, `pre_emp_vul`, `LIPA-Permissions`) VALUES -(1, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208930000000001', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(11, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '20834123456789', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(10, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '20810000001234', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(12, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '31002890832150', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(2, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208950000000002', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(3, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '001010123456789', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'); - --- -------------------------------------------------------- - --- --- Table structure for table `pgw` --- - -CREATE TABLE IF NOT EXISTS `pgw` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ipv4` varchar(15) NOT NULL, - `ipv6` varchar(39) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `ipv4` (`ipv4`), - UNIQUE KEY `ipv6` (`ipv6`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; - --- --- Dumping data for table `pgw` --- - -INSERT INTO `pgw` (`id`, `ipv4`, `ipv6`) VALUES -(1, '127.0.0.1', '0:0:0:0:0:0:0:1'), -(2, '192.168.56.101', ''), -(3, '10.0.0.2', '0'); - --- -------------------------------------------------------- - --- --- Table structure for table `terminal-info` --- - -CREATE TABLE IF NOT EXISTS `terminal-info` ( - `imei` varchar(15) NOT NULL, - `sv` varchar(2) NOT NULL, - UNIQUE KEY `imei` (`imei`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `users` --- - -CREATE TABLE IF NOT EXISTS `users` ( - `imsi` varchar(15) NOT NULL COMMENT 'IMSI is the main reference key.', - `msisdn` varchar(46) DEFAULT NULL COMMENT 'The basic MSISDN of the UE (Presence of MSISDN is optional).', - `imei` varchar(15) DEFAULT NULL COMMENT 'International Mobile Equipment Identity', - `imei_sv` varchar(2) DEFAULT NULL COMMENT 'International Mobile Equipment Identity Software Version Number', - `ms_ps_status` enum('PURGED','NOT_PURGED') DEFAULT 'PURGED' COMMENT 'Indicates that ESM and EMM status are purged from MME', - `rau_tau_timer` int(10) unsigned DEFAULT '120', - `ue_ambr_ul` bigint(20) unsigned DEFAULT '50000000' COMMENT 'The Maximum Aggregated uplink MBRs to be shared across all Non-GBR bearers according to the subscription of the user.', - `ue_ambr_dl` bigint(20) unsigned DEFAULT '100000000' COMMENT 'The Maximum Aggregated downlink MBRs to be shared across all Non-GBR bearers according to the subscription of the user.', - `access_restriction` int(10) unsigned DEFAULT '60' COMMENT 'Indicates the access restriction subscription information. 3GPP TS.29272 #7.3.31', - `mme_cap` int(10) unsigned zerofill DEFAULT NULL COMMENT 'Indicates the capabilities of the MME with respect to core functionality e.g. regional access restrictions.', - `mmeidentity_idmmeidentity` int(11) NOT NULL DEFAULT '0', - `key` varbinary(16) NOT NULL DEFAULT '0' COMMENT 'UE security key', - `RFSP-Index` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'An index to specific RRM configuration in the E-UTRAN. Possible values from 1 to 256', - `urrp_mme` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'UE Reachability Request Parameter indicating that UE activity notification from MME has been requested by the HSS.', - `sqn` bigint(20) unsigned zerofill NOT NULL, - `rand` varbinary(16) NOT NULL, - `OPc` varbinary(16) DEFAULT NULL COMMENT 'Can be computed by HSS', - PRIMARY KEY (`imsi`,`mmeidentity_idmmeidentity`), - KEY `fk_users_mmeidentity_idx1` (`mmeidentity_idmmeidentity`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- --- Dumping data for table `users` --- - -INSERT INTO `users` (`imsi`, `msisdn`, `imei`, `imei_sv`, `ms_ps_status`, `rau_tau_timer`, `ue_ambr_ul`, `ue_ambr_dl`, `access_restriction`, `mme_cap`, `mmeidentity_idmmeidentity`, `key`, `RFSP-Index`, `urrp_mme`, `sqn`, `rand`, `OPc`) VALUES -('20834123456789', '380561234567', '12345678', '23', 'PURGED', 50, 40000000, 100000000, 47, 0000000000, 2, '+ÖEŸ‚ų\0•,IH�ÿH', 0, 0, 00000000000000000096, 'Px¼X \Z1¡Éx™ß', 'gí��jS+Aq„‘§6Y'), -('20810000001234', '33611123456', NULL, NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д‡ÌË× |hb', 1, 0, 00000281454575616097, 'sËÚæ$r®C¹f‰=:¾xÞ', 'Ž''¶¯i.u2fz;`]'), -('31002890832150', '33638060059', '35611302209414', NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д‡ÌË× |hb', 1, 0, 00000000000000012416, '`ÏF®Ý†ôéD¢¼Ï›‰Á¼', 'Ž''¶¯i.u2fz;`]'), -('001010123456789', '33600101789', NULL, NULL, 'PURGED', 120, 50000000, 100000000, 47, 0000000000, 2, '\0 \n \r', 1, 0, 00000000000000000351, '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', '$À_|/+6�á%/%öÏÂ'), -('208930000000001', '33638060008', NULL, NULL, 'PURGED', 120, 50000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д‡ÌË× |hb', 1, 0, 00000000000000006103, 'ëÐwq¬ègzW®Ð�²áZ]', 'Ž''¶¯i.u2fz;`]'), -('208950000000002', '33638060009', NULL, NULL, 'PURGED', 120, 50000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д‡ÌË× |hb', 1, 0, 00000000000000006391, 'U¶|Ç w±DÌü\Z…7', 'Ž''¶¯i.u2fz;`]'); - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/openair-cn/OPENAIRHSS/db/pft_db.sql b/openair-cn/OPENAIRHSS/db/pft_db.sql deleted file mode 100644 index e2eb8bfaa6..0000000000 --- a/openair-cn/OPENAIRHSS/db/pft_db.sql +++ /dev/null @@ -1,173 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.0.10deb1 --- http://www.phpmyadmin.net --- --- Host: localhost --- Generation Time: May 28, 2015 at 02:24 PM --- Server version: 5.5.43-0ubuntu0.14.04.1 --- PHP Version: 5.5.9-1ubuntu4.9 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; - --- --- Database: `oai_db` --- - --- -------------------------------------------------------- - --- --- Table structure for table `apn` --- - -CREATE TABLE IF NOT EXISTS `apn` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `apn-name` varchar(60) NOT NULL, - `pdn-type` enum('IPv4','IPv6','IPv4v6','IPv4_or_IPv6') NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `apn-name` (`apn-name`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `mmeidentity` --- - -CREATE TABLE IF NOT EXISTS `mmeidentity` ( - `idmmeidentity` int(11) NOT NULL AUTO_INCREMENT, - `mmehost` varchar(255) DEFAULT NULL, - `mmerealm` varchar(200) DEFAULT NULL, - `UE-Reachability` tinyint(1) NOT NULL COMMENT 'Indicates whether the MME supports UE Reachability Notifcation', - PRIMARY KEY (`idmmeidentity`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ; - --- --- Dumping data for table `mmeidentity` --- - -INSERT INTO `mmeidentity` (`idmmeidentity`, `mmehost`, `mmerealm`, `UE-Reachability`) VALUES -(2, 'yang.openair4G.eur', 'openair4G.eur', 0), -(1, 'ng40-erc.openair4G.eur', 'openair4G.eur', 0); - --- -------------------------------------------------------- - --- --- Table structure for table `pdn` --- - -CREATE TABLE IF NOT EXISTS `pdn` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `apn` varchar(60) NOT NULL, - `pdn_type` enum('IPv4','IPv6','IPv4v6','IPv4_or_IPv6') NOT NULL DEFAULT 'IPv4', - `pdn_ipv4` varchar(15) DEFAULT '0.0.0.0', - `pdn_ipv6` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT '0:0:0:0:0:0:0:0', - `aggregate_ambr_ul` int(10) unsigned DEFAULT '50000000', - `aggregate_ambr_dl` int(10) unsigned DEFAULT '100000000', - `pgw_id` int(11) NOT NULL, - `users_imsi` varchar(15) NOT NULL, - `qci` tinyint(3) unsigned NOT NULL DEFAULT '9', - `priority_level` tinyint(3) unsigned NOT NULL DEFAULT '15', - `pre_emp_cap` enum('ENABLED','DISABLED') DEFAULT 'DISABLED', - `pre_emp_vul` enum('ENABLED','DISABLED') DEFAULT 'DISABLED', - `LIPA-Permissions` enum('LIPA-prohibited','LIPA-only','LIPA-conditional') NOT NULL DEFAULT 'LIPA-only', - PRIMARY KEY (`id`,`pgw_id`,`users_imsi`), - KEY `fk_pdn_pgw1_idx` (`pgw_id`), - KEY `fk_pdn_users1_idx` (`users_imsi`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=36 ; - --- --- Dumping data for table `pdn` --- - -INSERT INTO `pdn` (`id`, `apn`, `pdn_type`, `pdn_ipv4`, `pdn_ipv6`, `aggregate_ambr_ul`, `aggregate_ambr_dl`, `pgw_id`, `users_imsi`, `qci`, `priority_level`, `pre_emp_cap`, `pre_emp_vul`, `LIPA-Permissions`) VALUES -(8, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208920000000008', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(9, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208920000000009', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(11, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208920000000053', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(12, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208920000000055', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'), -(16, 'oai.ipv4', 'IPv4', '0.0.0.0', '0:0:0:0:0:0:0:0', 50000000, 100000000, 3, '208920000000054', 9, 15, 'DISABLED', 'ENABLED', 'LIPA-only'); - --- -------------------------------------------------------- - --- --- Table structure for table `pgw` --- - -CREATE TABLE IF NOT EXISTS `pgw` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ipv4` varchar(15) NOT NULL, - `ipv6` varchar(39) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `ipv4` (`ipv4`), - UNIQUE KEY `ipv6` (`ipv6`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; - --- --- Dumping data for table `pgw` --- - -INSERT INTO `pgw` (`id`, `ipv4`, `ipv6`) VALUES -(1, '127.0.0.1', '0:0:0:0:0:0:0:1'), -(2, '192.168.56.101', ''), -(3, '10.0.0.2', '0'); - --- -------------------------------------------------------- - --- --- Table structure for table `terminal-info` --- - -CREATE TABLE IF NOT EXISTS `terminal-info` ( - `imei` varchar(15) NOT NULL, - `sv` varchar(2) NOT NULL, - UNIQUE KEY `imei` (`imei`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `users` --- - -CREATE TABLE IF NOT EXISTS `users` ( - `imsi` varchar(15) NOT NULL COMMENT 'IMSI is the main reference key.', - `msisdn` varchar(46) DEFAULT NULL COMMENT 'The basic MSISDN of the UE (Presence of MSISDN is optional).', - `imei` varchar(15) DEFAULT NULL COMMENT 'International Mobile Equipment Identity', - `imei_sv` varchar(2) DEFAULT NULL COMMENT 'International Mobile Equipment Identity Software Version Number', - `ms_ps_status` enum('PURGED','NOT_PURGED') DEFAULT 'PURGED' COMMENT 'Indicates that ESM and EMM status are purged from MME', - `rau_tau_timer` int(10) unsigned DEFAULT '120', - `ue_ambr_ul` bigint(20) unsigned DEFAULT '50000000' COMMENT 'The Maximum Aggregated uplink MBRs to be shared across all Non-GBR bearers according to the subscription of the user.', - `ue_ambr_dl` bigint(20) unsigned DEFAULT '100000000' COMMENT 'The Maximum Aggregated downlink MBRs to be shared across all Non-GBR bearers according to the subscription of the user.', - `access_restriction` int(10) unsigned DEFAULT '60' COMMENT 'Indicates the access restriction subscription information. 3GPP TS.29272 #7.3.31', - `mme_cap` int(10) unsigned zerofill DEFAULT NULL COMMENT 'Indicates the capabilities of the MME with respect to core functionality e.g. regional access restrictions.', - `mmeidentity_idmmeidentity` int(11) NOT NULL DEFAULT '0', - `key` varbinary(16) NOT NULL DEFAULT '0' COMMENT 'UE security key', - `RFSP-Index` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'An index to specific RRM configuration in the E-UTRAN. Possible values from 1 to 256', - `urrp_mme` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'UE Reachability Request Parameter indicating that UE activity notification from MME has been requested by the HSS.', - `sqn` bigint(20) unsigned zerofill NOT NULL, - `rand` varbinary(16) NOT NULL, - `OPc` varbinary(16) DEFAULT NULL COMMENT 'Can be computed by HSS', - PRIMARY KEY (`imsi`,`mmeidentity_idmmeidentity`), - KEY `fk_users_mmeidentity_idx1` (`mmeidentity_idmmeidentity`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- --- Dumping data for table `users` --- - -INSERT INTO `users` (`imsi`, `msisdn`, `imei`, `imei_sv`, `ms_ps_status`, `rau_tau_timer`, `ue_ambr_ul`, `ue_ambr_dl`, `access_restriction`, `mme_cap`, `mmeidentity_idmmeidentity`, `key`, `RFSP-Index`, `urrp_mme`, `sqn`, `rand`, `OPc`) VALUES -('208920000000008', '33638060008', NULL, NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д‡ÌË× |hb', 1, 0, 00000000004294969388, '�™Iðj„�æ·>OƒO×K)', 'Ž''¶¯i.u2fz;`]'), -('208920000000009', '33638060009', NULL, NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�ДWdiHC×¾½', 1, 0, 00000000000000033361, '\ZM{™hÄÏ#‡\\*láà', '¾·¶¿xÈJ ø™ ÿ”'), -('208920000000053', '33638060053', '35611302209415', NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�Д6¦`FB&w', 1, 0, 00000000004294972622, 'o.Öq@Î#ë\0ï^�ñÌ4¿', 'O¢Ñ~¤ï çî˜ÀÉ­ÓÏ'), -('208920000000055', '33638060055', NULL, NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�ДM_^r v', 1, 0, 00000000004294969388, '�™Iðj„�æ·>OƒO×K)', 'NÓ0;ã­bCRÿÃòó_'), -('208920000000054', '33638060054', NULL, NULL, 'PURGED', 120, 40000000, 100000000, 47, 0000000000, 2, '‹¯G?/�ДM_^r v', 1, 0, 00000000000000039820, 'B@W®Ø´JUÙ°To½C', 'NÓ0;ã­bCRÿÃòó_'); - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/openair-cn/OPENAIRHSS/debian/changelog b/openair-cn/OPENAIRHSS/debian/changelog deleted file mode 100644 index 5ce3ffbc17..0000000000 --- a/openair-cn/OPENAIRHSS/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -openair-hss (1.0.0-1) UNRELEASED; urgency=low - - * Initial release. (Closes: #XXXXXX) - - -- Sebastien Roux Wed, 10 Apr 2013 09:54:55 +0200 diff --git a/openair-cn/OPENAIRHSS/debian/compat b/openair-cn/OPENAIRHSS/debian/compat deleted file mode 100644 index c7930257df..0000000000 --- a/openair-cn/OPENAIRHSS/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/debian/control b/openair-cn/OPENAIRHSS/debian/control deleted file mode 100644 index ff727b65fa..0000000000 --- a/openair-cn/OPENAIRHSS/debian/control +++ /dev/null @@ -1,15 +0,0 @@ -Source: openair-hss -Maintainer: Sebastien ROUX -Section: misc -Priority: optional -Standards-Version: 3.9.2 -Build-Depends: debhelper (>= 8), - make, gcc, bison, flex, autotools, - libmysqlclient-dev, libsctp-dev, - freediameter-dev, freediameter-dictionary-s6a, freediameter-dictionary-mip6, - libgmp-dev, libnettle-dev - -Package: openair-hss -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Implementation of R10 HSS for 3GPP LTE core network \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/debian/copyright b/openair-cn/OPENAIRHSS/debian/copyright deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair-cn/OPENAIRHSS/debian/dirs b/openair-cn/OPENAIRHSS/debian/dirs deleted file mode 100644 index b01f7e5c00..0000000000 --- a/openair-cn/OPENAIRHSS/debian/dirs +++ /dev/null @@ -1 +0,0 @@ -etc/openair-hss/ \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/debian/files b/openair-cn/OPENAIRHSS/debian/files deleted file mode 100644 index 94dcd01645..0000000000 --- a/openair-cn/OPENAIRHSS/debian/files +++ /dev/null @@ -1 +0,0 @@ -openair-hss_1.0.0-1_i386.deb misc optional diff --git a/openair-cn/OPENAIRHSS/debian/openair-hss.install b/openair-cn/OPENAIRHSS/debian/openair-hss.install deleted file mode 100644 index 66a9d5fcb7..0000000000 --- a/openair-cn/OPENAIRHSS/debian/openair-hss.install +++ /dev/null @@ -1,3 +0,0 @@ -conf/hss.conf -conf/hss_fd.conf -db/oai_db.sql \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/debian/rules b/openair-cn/OPENAIRHSS/debian/rules deleted file mode 100755 index b6e44cb04d..0000000000 --- a/openair-cn/OPENAIRHSS/debian/rules +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/make -f - -export DH_OPTIONS - -%: - dh $@ - -override_dh_auto_configure: - dh_auto_configure -- --enable-dh-install LDFLAGS='-L/usr/local/lib' - -# Don't run tests: -override_dh_auto_test: \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/hss_main.c b/openair-cn/OPENAIRHSS/hss_main.c deleted file mode 100644 index 5a226bc0d9..0000000000 --- a/openair-cn/OPENAIRHSS/hss_main.c +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" -#include "auc.h" - -hss_config_t hss_config; - - -int main(int argc, char *argv[]) -{ - - memset(&hss_config, 0, sizeof(hss_config_t)); - - if (config_init(argc, argv, &hss_config) != 0) { - return -1; - } - - if (hss_mysql_connect(&hss_config) != 0) { - return -1; - } - - random_init(); - - if (hss_config.valid_op) { - hss_mysql_check_opc_keys((uint8_t*)hss_config.operator_key_bin); - } - - s6a_init(&hss_config); - - while(1) { - /* TODO: handle signals here */ - sleep(1); - } - - return 0; -} diff --git a/openair-cn/OPENAIRHSS/s6a/COPYING b/openair-cn/OPENAIRHSS/s6a/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/s6a/Makefile.am b/openair-cn/OPENAIRHSS/s6a/Makefile.am deleted file mode 100644 index bfd6a27fe6..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/Makefile.am +++ /dev/null @@ -1,49 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir) \ - -I$(top_srcdir)/access_restriction \ - -I$(top_srcdir)/auc \ - -I$(top_srcdir)/db \ - -I$(top_srcdir)/utils - -noinst_LTLIBRARIES = libs6a.la - -libs6a_la_LDFLAGS = -all-static -libs6a_la_SOURCES = \ - s6a_common.c \ - s6a_fd.c s6a_proto.h \ - s6a_auth_info.c \ - s6a_up_loc.c \ - s6a_purge_ue.c \ - s6a_error.c \ - s6a_subscription_data.c \ - s6a_in_addr.c \ - s6a_peers.c \ - s6a_supported_features.h s6a_supported_features.c \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_auth_info.c b/openair-cn/OPENAIRHSS/s6a/s6a_auth_info.c deleted file mode 100644 index 718e48cce4..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_auth_info.c +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_auth_info.c - * \brief Handle an authentication information request procedure and generate the answer - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include -#include -#include -#include -#include -#include - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" -#include "auc.h" -#include "access_restriction.h" - -int s6a_auth_info_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act) -{ - struct msg *ans, *qry; - struct avp *avp, *failed_avp = NULL; - - struct avp_hdr *hdr; - union avp_value value; - - /* Database queries */ - mysql_auth_info_req_t auth_info_req; - mysql_auth_info_resp_t auth_info_resp; - - /* Authentication vector */ - auc_vector_t vector; - - int ret = 0; - int result_code = ER_DIAMETER_SUCCESS; - int experimental = 0; - uint64_t imsi; - uint8_t *sqn = NULL, *auts = NULL; - - if (msg == NULL) { - return EINVAL; - } - - /* Create answer header */ - qry = *msg; - CHECK_FCT(fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0)); - ans = *msg; - - /* Retrieving IMSI AVP: User-Name */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_imsi, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (hdr->avp_value->os.len > IMSI_LENGTH_MAX) { - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - - sprintf(auth_info_req.imsi, "%*s", (int)hdr->avp_value->os.len, - hdr->avp_value->os.data); - sscanf(auth_info_req.imsi, "%"SCNu64, &imsi); - } else { - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving Supported Features AVP. This is an optional AVP. */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_supported_features, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - } - - /* Retrieving the Requested-EUTRAN-Authentication-Info. - * If this AVP is not present, we have to check for - * Requested-GERAN-Authentication-Info AVP which will mean that the request - * comes from RAT other than E-UTRAN, case not handled by this HSS - * implementation. - */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_req_e_utran_auth_info, &avp)); - - if (avp) { - struct avp *child_avp; - - /* Walk through childs avp */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_FIRST_CHILD, &child_avp, NULL)); - - while (child_avp) { - /* Retrieve the header of the child avp */ - CHECK_FCT(fd_msg_avp_hdr(child_avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_NUMBER_OF_REQ_VECTORS: { - /* We allow only one vector request */ - if (hdr->avp_value->u32 != 1) { - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - failed_avp = child_avp; - goto out; - } - } - break; - - case AVP_CODE_IMMEDIATE_RESP_PREF: - /* We always respond immediately to the request */ - break; - - case AVP_CODE_RE_SYNCHRONIZATION_INFO: - - /* The resynchronization-info AVP is present. - * AUTS = Conc(SQN MS ) || MAC-S - */ - if (avp) { - auts = hdr->avp_value->os.data; - } - - break; - - default: { - /* This AVP is not expected on s6a interface */ - result_code = ER_DIAMETER_AVP_UNSUPPORTED; - failed_avp = child_avp; - goto out; - } - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(child_avp, MSG_BRW_NEXT, &child_avp, NULL)); - } - } else { - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_req_geran_auth_info, &avp)); - - if (avp) { - result_code = DIAMETER_ERROR_RAT_NOT_ALLOWED; - experimental = 1; - goto out; - } else { - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - failed_avp = avp; - goto out; - } - } - - /* Retrieving the Visited-PLMN-Id AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_visited_plmn_id, &avp)); - - if (avp) { - /* TODO: check PLMN and allow/reject connectivity depending on roaming */ - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (hdr->avp_value->os.len == 3) { - if (apply_access_restriction(auth_info_req.imsi, hdr->avp_value->os.data) != 0) { - /* We found that user is roaming and has no right to do it -> - * reject the connection - */ - result_code = DIAMETER_ERROR_ROAMING_NOT_ALLOWED; - experimental = 1; - goto out; - } - } else { - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - } else { - /* Mandatory AVP, raise an error if not present */ - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Fetch User data */ - if (hss_mysql_auth_info(&auth_info_req, &auth_info_resp) != 0) { - /* Database query failed... */ - result_code = DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE; - experimental = 1; - goto out; - } - - if (auts != NULL) { - /* Try to derive SQN_MS from previous RAND */ - sqn = sqn_ms_derive(auth_info_resp.opc, auth_info_resp.key, auts, auth_info_resp.rand); - - if (sqn != NULL) { - /* We succeeded to verify SQN_MS... */ - - /* Pick a new RAND and store SQN_MS + RAND in the HSS */ - generate_random(vector.rand, RAND_LENGTH); - hss_mysql_push_rand_sqn(auth_info_req.imsi, auth_info_resp.rand, sqn); - - hss_mysql_increment_sqn(auth_info_req.imsi); - - free(sqn); - } - - /* Fetch new user data */ - if (hss_mysql_auth_info(&auth_info_req, &auth_info_resp) != 0) { - /* Database query failed... */ - result_code = DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE; - experimental = 1; - goto out; - } - - sqn = auth_info_resp.sqn; - - memcpy(vector.rand, auth_info_resp.rand, RAND_LENGTH); - } else { - /* Pick a new RAND and store SQN_MS + RAND in the HSS */ - generate_random(vector.rand, RAND_LENGTH); - sqn = auth_info_resp.sqn; - hss_mysql_push_rand_sqn(auth_info_req.imsi, vector.rand, sqn); - } - - hss_mysql_increment_sqn(auth_info_req.imsi); - - /* Generate authentication vector */ - generate_vector(auth_info_resp.opc, imsi, auth_info_resp.key, - hdr->avp_value->os.data, sqn, &vector); - - /* We add the vector */ - { - struct avp *e_utran_vector, *child_avp; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_authentication_info, 0, &avp)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_e_utran_vector, 0, &e_utran_vector)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_rand, 0, &child_avp)); - value.os.data = vector.rand; - value.os.len = RAND_LENGTH_OCTETS; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(e_utran_vector, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_xres, 0, &child_avp)); - value.os.data = vector.xres; - value.os.len = XRES_LENGTH_OCTETS; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(e_utran_vector, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_autn, 0, &child_avp)); - value.os.data = vector.autn; - value.os.len = AUTN_LENGTH_OCTETS; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(e_utran_vector, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_kasme, 0, &child_avp)); - value.os.data = vector.kasme; - value.os.len = KASME_LENGTH_OCTETS; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(e_utran_vector, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, e_utran_vector)); - - CHECK_FCT(fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp)); - } - -out: - /* Add the Auth-Session-State AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_auth_session_state, &avp)); - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_auth_session_state, 0, &avp)); - CHECK_FCT(fd_msg_avp_setvalue(avp, hdr->avp_value)); - CHECK_FCT(fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp)); - - /* Append the result code to the answer */ - CHECK_FCT(s6a_add_result_code(ans, failed_avp, result_code, experimental)); - - CHECK_FCT(fd_msg_send(msg, NULL, NULL )); - return ret; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_common.c b/openair-cn/OPENAIRHSS/s6a/s6a_common.c deleted file mode 100644 index fa896dd8d4..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_common.c +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -int s6a_add_result_code(struct msg *ans, struct avp *failed_avp, int result_code, int experimental) -{ - struct avp *avp; - union avp_value value; - - if (DIAMETER_ERROR_IS_VENDOR(result_code) && experimental != 0) { - struct avp *experimental_result; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_experimental_result, - 0, &experimental_result)); - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_vendor_id, - 0, &avp)); - value.u32 = VENDOR_3GPP; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(experimental_result, MSG_BRW_LAST_CHILD, avp)); - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_experimental_result_code, - 0, &avp)); - value.u32 = result_code; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(experimental_result, MSG_BRW_LAST_CHILD, avp)); - CHECK_FCT(fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, experimental_result)); - - /* Add Origin_Host & Origin_Realm AVPs */ - CHECK_FCT(fd_msg_add_origin(ans, 0)); - } else { - /* This is a code defined in the base protocol: result-code AVP should - * be used. - */ - CHECK_FCT(fd_msg_rescode_set(ans, retcode_2_string(result_code), NULL, - failed_avp, 1)); - } - - return 0; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_error.c b/openair-cn/OPENAIRHSS/s6a/s6a_error.c deleted file mode 100644 index 92d2465695..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_error.c +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -char *experimental_retcode_2_string(int ret_code) -{ - switch(ret_code) { - /* Experimental-Result-Codes */ - case DIAMETER_ERROR_USER_UNKNOWN: - return "DIAMETER_ERROR_USER_UNKNOWN"; - - case DIAMETER_ERROR_ROAMING_NOT_ALLOWED: - return "DIAMETER_ERROR_ROAMING_NOT_ALLOWED"; - - case DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION: - return "DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION"; - - case DIAMETER_ERROR_RAT_NOT_ALLOWED: - return "DIAMETER_ERROR_RAT_NOT_ALLOWED"; - - case DIAMETER_ERROR_EQUIPMENT_UNKNOWN: - return "DIAMETER_ERROR_EQUIPMENT_UNKNOWN"; - - case DIAMETER_ERROR_UNKOWN_SERVING_NODE: - return "DIAMETER_ERROR_UNKOWN_SERVING_NODE"; - - case DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE: - return "DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE"; - - default: - break; - } - - return "DIAMETER_AVP_UNSUPPORTED"; -} - -char *retcode_2_string(int ret_code) -{ - switch(ret_code) { - case ER_DIAMETER_SUCCESS: - return "DIAMETER_SUCCESS"; - - case ER_DIAMETER_MISSING_AVP: - return "DIAMETER_MISSING_AVP"; - - case ER_DIAMETER_INVALID_AVP_VALUE: - return "DIAMETER_INVALID_AVP_VALUE"; - - default: - break; - } - - return "DIAMETER_AVP_UNSUPPORTED"; -} - diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_fd.c b/openair-cn/OPENAIRHSS/s6a/s6a_fd.c deleted file mode 100644 index 8a8ea04812..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_fd.c +++ /dev/null @@ -1,370 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include -#include - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -/* session handler for s6a sessions state machine */ -static struct session_handler *s6a_reg = NULL; - -/* handler for s6a server callback */ -static struct disp_hdl *handle; -s6a_cnf_t s6a_cnf; - -#if FREEDIAMETER_VERSION < 120 -void s6a_cli_sess_cleanup(void * arg, char * sid, void * opaque); - -void s6a_cli_sess_cleanup(void * arg, char * sid, void * opaque) -{ - -} -#else -void s6a_cli_sess_cleanup(struct sess_state * state, os0_t sid, void * opaque); -void s6a_cli_sess_cleanup(struct sess_state * state, os0_t sid, void * opaque) -{ - -} - -#endif - - -static int s6a_init_objs(void) -{ - vendor_id_t vendor_3gpp = VENDOR_3GPP; - application_id_t app_s6a = APP_S6A; - - memset(&s6a_cnf, 0, sizeof(s6a_cnf)); - - /* Pre-loading vendor object */ - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_VENDOR, VENDOR_BY_ID, - (void*)&vendor_3gpp, &s6a_cnf.dataobj_s6a_vendor, ENOENT)); - /* Pre-loading application object */ - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_APPLICATION, - APPLICATION_BY_ID, (void*)&app_s6a, - &s6a_cnf.dataobj_s6a_app, ENOENT)); - - /* Pre-loading commands objects */ - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Authentication-Information-Request", - &s6a_cnf.dataobj_s6a_auth_cmd, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Update-Location-Request", - &s6a_cnf.dataobj_s6a_loc_up, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Purge-UE-Request", - &s6a_cnf.dataobj_s6a_purge_ue, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Cancel-Location-Request", - &s6a_cnf.dataobj_s6a_cancel_loc_req, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Cancel-Location-Answer", - &s6a_cnf.dataobj_s6a_cancel_loc_ans, ENOENT)); - - /* Pre-loading AVPs objects */ - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Origin-Host", - &s6a_cnf.dataobj_s6a_origin_host, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Origin-Realm", - &s6a_cnf.dataobj_s6a_origin_realm, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "User-Name", - &s6a_cnf.dataobj_s6a_imsi, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "IMEI", - &s6a_cnf.dataobj_s6a_imei, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Software-Version", - &s6a_cnf.dataobj_s6a_software_version, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Supported-Features", - &s6a_cnf.dataobj_s6a_supported_features, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", - &s6a_cnf.dataobj_s6a_req_e_utran_auth_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Number-Of-Requested-Vectors", - &s6a_cnf.dataobj_s6a_req_nb_of_req_vectors, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Re-Synchronization-Info", - &s6a_cnf.dataobj_s6a_req_resync_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-UTRAN-GERAN-Authentication-Info", - &s6a_cnf.dataobj_s6a_req_geran_auth_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Immediate-Response-Preferred", - &s6a_cnf.dataobj_s6a_immediate_response_pref, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Visited-PLMN-Id", - &s6a_cnf.dataobj_s6a_visited_plmn_id, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Result-Code", - &s6a_cnf.dataobj_s6a_result_code, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Experimental-Result", - &s6a_cnf.dataobj_s6a_experimental_result, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Vendor-Id", - &s6a_cnf.dataobj_s6a_vendor_id, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Experimental-Result-Code", - &s6a_cnf.dataobj_s6a_experimental_result_code, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Auth-Session-State", - &s6a_cnf.dataobj_s6a_auth_session_state, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Authentication-Info", - &s6a_cnf.dataobj_s6a_authentication_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "E-UTRAN-Vector", - &s6a_cnf.dataobj_s6a_e_utran_vector, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "RAND", - &s6a_cnf.dataobj_s6a_rand, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "XRES", - &s6a_cnf.dataobj_s6a_xres, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "AUTN", - &s6a_cnf.dataobj_s6a_autn, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "KASME", - &s6a_cnf.dataobj_s6a_kasme, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", - &s6a_cnf.dataobj_s6a_ulr_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", - &s6a_cnf.dataobj_s6a_ula_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PUR-Flags", - &s6a_cnf.dataobj_s6a_pur_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PUA-Flags", - &s6a_cnf.dataobj_s6a_pua_flags, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "RAT-Type", - &s6a_cnf.dataobj_s6a_rat_type, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Terminal-Information", - &s6a_cnf.dataobj_s6a_terminal_info, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", - &s6a_cnf.dataobj_s6a_ue_srvcc_cap, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "GMLC-Address", - &s6a_cnf.dataobj_s6a_gmlc_addr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", - &s6a_cnf.dataobj_s6a_subscription_data, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscriber-Status", - &s6a_cnf.dataobj_s6a_subscriber_status, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "MSISDN", - &s6a_cnf.dataobj_s6a_msisdn, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "AMBR", - &s6a_cnf.dataobj_s6a_ambr, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Network-Access-Mode", - &s6a_cnf.dataobj_s6a_network_access_mode, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Access-Restriction-Data", - &s6a_cnf.dataobj_s6a_access_restriction_data, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "APN-Configuration-Profile", - &s6a_cnf.dataobj_s6a_apn_configuration_profile, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscribed-Periodic-RAU-TAU-Timer", - &s6a_cnf.dataobj_s6a_subscribed_rau_tau_timer, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Context-Identifier", - &s6a_cnf.dataobj_s6a_context_identifier, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "All-APN-Configurations-Included-Indicator", - &s6a_cnf.dataobj_s6a_all_apn_conf_inc_ind, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "APN-Configuration", - &s6a_cnf.dataobj_s6a_apn_configuration, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-UL", - &s6a_cnf.dataobj_s6a_max_bandwidth_ul, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Max-Requested-Bandwidth-DL", - &s6a_cnf.dataobj_s6a_max_bandwidth_dl, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "PDN-Type", - &s6a_cnf.dataobj_s6a_pdn_type, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Service-Selection", - &s6a_cnf.dataobj_s6a_service_selection, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "EPS-Subscribed-QoS-Profile", - &s6a_cnf.dataobj_s6a_eps_subscribed_qos_profile, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "QoS-Class-Identifier", - &s6a_cnf.dataobj_s6a_qos_class_identifier, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Allocation-Retention-Priority", - &s6a_cnf.dataobj_s6a_allocation_retention_priority, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Priority-Level", - &s6a_cnf.dataobj_s6a_priority_level, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Capability", - &s6a_cnf.dataobj_s6a_pre_emption_capability, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Pre-emption-Vulnerability", - &s6a_cnf.dataobj_s6a_pre_emption_vulnerability, ENOENT)); - CHECK_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Served-Party-IP-Address", - &s6a_cnf.dataobj_s6a_served_party_ip_addr, ENOENT)); - - /* Advertise the support for the test application in the peer */ - CHECK_FCT(fd_disp_app_support(s6a_cnf.dataobj_s6a_app, - s6a_cnf.dataobj_s6a_vendor, 1, 0)); - - return 0; -} - -int s6a_init(hss_config_t *hss_config_p) -{ - int ret = 0; - struct disp_when when; - char why[100]; - - fprintf(stdout, "Initializing s6a layer\n"); - - ret = fd_core_initialize(); - - if (ret != 0) { - strcpy(why, "fd_core_initialize"); - goto err; - } - - /* Parse the external configuration file */ - ret = fd_core_parseconf(hss_config_p->freediameter_config); - - if (ret != 0) { - strcpy(why, "fd_core_parseconf"); - goto err; - } - - - ret = fd_core_start(); - - if (ret != 0) { - strcpy(why, "fd_core_start"); - goto err; - } - - - /* We wait till freediameter has completed loading extensions */ - fd_core_waitstartcomplete(); - - /* Register the peer acceptor/rejector */ - fd_peer_validate_register(s6a_peer_validate); - - /* Initialize useful objects */ - ret = s6a_init_objs(); - - if (ret != 0) { - strcpy(why, "s6a_init_objs"); - goto err; - } - - /* Create handler for sessions */ -#if FREEDIAMETER_VERSION < 120 - CHECK_FCT(fd_sess_handler_create(&s6a_reg, s6a_cli_sess_cleanup, NULL)); -#else - session_state_dump dumper; - CHECK_FCT(fd_sess_handler_create(&s6a_reg, s6a_cli_sess_cleanup, dumper, NULL)); -#endif - - /* Register the callback */ - memset(&when, 0, sizeof(when)); - when.command = s6a_cnf.dataobj_s6a_auth_cmd; - when.app = s6a_cnf.dataobj_s6a_app; - - /* Register the callbacks for S6A Application */ - CHECK_FCT(fd_disp_register(s6a_auth_info_cb, DISP_HOW_CC, &when, NULL, - &handle)); - - if (handle == NULL) { - strcpy(why, "cannot register authentication info req cb"); - goto err; - } - - when.command = s6a_cnf.dataobj_s6a_loc_up; - when.app = s6a_cnf.dataobj_s6a_app; - - /* Register the callbacks for S6A Application */ - CHECK_FCT(fd_disp_register(s6a_up_loc_cb, DISP_HOW_CC, &when, NULL, - &handle)); - - if (handle == NULL) { - strcpy(why, "cannot register update location req cb"); - goto err; - } - - when.command = s6a_cnf.dataobj_s6a_purge_ue; - when.app = s6a_cnf.dataobj_s6a_app; - - /* Register the callbacks for S6A Application */ - CHECK_FCT(fd_disp_register(s6a_purge_ue_cb, DISP_HOW_CC, &when, NULL, - &handle)); - - if (handle == NULL) { - strcpy(why, "cannot register purge ue req cb"); - goto err; - } - - fprintf(stdout, "Initializing s6a layer: DONE\n"); - - return 0; - -err: - fprintf(stdout, "Initializing s6a layer: FAILED (%s)\n", why); - return -1; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_in_addr.c b/openair-cn/OPENAIRHSS/s6a/s6a_in_addr.c deleted file mode 100644 index 8abefce778..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_in_addr.c +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -/* http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml*/ - -/* Perform a conversion between ipv4 in BCD to AVP served-party-ip-address */ -int s6a_add_ipv4_address(struct avp *avp, const char *ipv4_addr) -{ - struct avp *child_avp; - union avp_value value; - - uint8_t ipv4[6]; /* Converted IPv4 address with family */ - in_addr_t sin; - - if (ipv4_addr == NULL) { - return -1; - } - - /* This is an IPv4 family -> ipv4 buffer should start with 0x0001 */ - ipv4[0] = 0x00; - ipv4[1] = 0x01; - - sin = inet_addr(ipv4_addr); - - /* No need to add the address if it is an any address */ - if (sin != INADDR_ANY) { - memcpy(&ipv4[2], &sin, 4); - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_served_party_ip_addr, 0, &child_avp)); - value.os.data = ipv4; - value.os.len = 6; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - return 0; - } - - /* No IP address added to AVP */ - return -1; -} - -/* Perform a conversion between ipv6 in BCD to AVP served-party-ip-address */ -int s6a_add_ipv6_address(struct avp *avp, const char *ipv6_addr) -{ - struct avp *child_avp; - union avp_value value; - - uint8_t ipv6[18]; - struct in6_addr sin6; - - if (ipv6_addr == NULL) { - return -1; - } - - memset(&sin6, 0, sizeof(struct in6_addr)); - - /* This is an IPv6 family -> ipv6 buffer should start with 0x0002 */ - ipv6[0] = 0x00; - ipv6[1] = 0x02; - - if (inet_pton(AF_INET6, ipv6_addr, &sin6) == -1) { - fprintf(stderr, "INET6 address conversion has failed\n"); - return -1; - } - - /* If the IPV6 address is 0:0:0:0:0:0:0:0 then we don't add it to the - * served-party ip address and consider the ip address can be dynamically - * allocated. - */ - if (!IN6_IS_ADDR_UNSPECIFIED(sin6.s6_addr32)) { - memcpy(&ipv6[2], &sin6.s6_addr, 16); - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_served_party_ip_addr, 0, &child_avp)); - value.os.data = ipv6; - value.os.len = 18; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - return 0; - } - - return -1; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_peers.c b/openair-cn/OPENAIRHSS/s6a/s6a_peers.c deleted file mode 100644 index 0c3bcde915..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_peers.c +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_peers.c - * \brief Authenticate a new peer connecting to the HSS by checking the database - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include -#include - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -int s6a_peer_validate(struct peer_info *info, int *auth, int (**cb2)(struct peer_info *)) -{ - mysql_mme_identity_t mme_identity; - - if (info == NULL) { - return EINVAL; - } - - memset(&mme_identity, 0, sizeof(mysql_mme_identity_t)); - - /* We received a new connection. Check the database for allowed equipments - * on EPC - */ - - memcpy(mme_identity.mme_host, info->pi_diamid, info->pi_diamidlen); - - if (hss_mysql_check_epc_equipment(&mme_identity) != 0) { - /* The MME has not been found in list of known peers -> reject it */ - *auth = -1; - fprintf(stdout, "Rejecting %s: either db has no knowledge of this peer " - "or sql query failed\n", info->pi_diamid); - } else { - *auth = 1; - - /* For now we don't use security */ - info->config.pic_flags.sec = PI_SEC_NONE; - info->config.pic_flags.persist = PI_PRST_NONE; - fprintf(stdout, "Accepting %s peer\n", info->pi_diamid); - } - - return 0; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_proto.h b/openair-cn/OPENAIRHSS/s6a/s6a_proto.h deleted file mode 100644 index 2ea9221401..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_proto.h +++ /dev/null @@ -1,238 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "hss_config.h" - -#ifndef S6A_PROTO_H_ -#define S6A_PROTO_H_ - -#define VENDOR_3GPP (10415) -#define APP_S6A (16777251) - -/* Errors that fall within the Permanent Failures category shall be used to - * inform the peer that the request has failed, and should not be attempted - * again. The Result-Code AVP values defined in Diameter Base Protocol RFC 3588 - * shall be applied. When one of the result codes defined here is included in a - * response, it shall be inside an Experimental-Result AVP and the Result-Code - * AVP shall be absent. - */ -#define DIAMETER_ERROR_USER_UNKNOWN (5001) -#define DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004) -#define DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420) -#define DIAMETER_ERROR_RAT_NOT_ALLOWED (5421) -#define DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422) -#define DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423) - -/* Result codes that fall within the transient failures category shall be used - * to inform a peer that the request could not be satisfied at the time it was - * received, but may be able to satisfy the request in the future. The - * Result-Code AVP values defined in Diameter Base Protocol RFC 3588 shall be - * applied. When one of the result codes defined here is included in a response, - * it shall be inside an Experimental-Result AVP and the Result-Code AVP shall - * be absent. - */ -#define DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181) - -#define DIAMETER_ERROR_IS_VENDOR(x) \ - ((x == DIAMETER_ERROR_USER_UNKNOWN) || \ - (x == DIAMETER_ERROR_ROAMING_NOT_ALLOWED) || \ - (x == DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION) || \ - (x == DIAMETER_ERROR_RAT_NOT_ALLOWED) || \ - (x == DIAMETER_ERROR_EQUIPMENT_UNKNOWN) || \ - (x == DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE) || \ - (x == DIAMETER_ERROR_UNKOWN_SERVING_NODE)) - -#define AVP_CODE_IMEI (1402) -#define AVP_CODE_SOFTWARE_VERSION (1403) -#define AVP_CODE_NUMBER_OF_REQ_VECTORS (1410) -#define AVP_CODE_RE_SYNCHRONIZATION_INFO (1411) -#define AVP_CODE_IMMEDIATE_RESP_PREF (1412) -#define AVP_CODE_3GPP2_MEID (1471) -#define AVP_CODE_FEATURE_LIST (629) -#define AVP_CODE_VENDOR_ID (266) - -typedef struct { - struct dict_object *dataobj_s6a_vendor; /* s6a vendor object */ - struct dict_object *dataobj_s6a_app; /* s6a application object */ - /* Commands */ - struct dict_object *dataobj_s6a_auth_cmd; /* s6a authentication command */ - struct dict_object *dataobj_s6a_loc_up; /* s6a update location */ - struct dict_object *dataobj_s6a_purge_ue; /* s6a purge ue req */ - struct dict_object *dataobj_s6a_cancel_loc_req; /* s6a Cancel Location req */ - struct dict_object *dataobj_s6a_cancel_loc_ans; /* s6a Cancel Location ans */ - /* AVPs */ - struct dict_object *dataobj_s6a_origin_host; - struct dict_object *dataobj_s6a_origin_realm; - struct dict_object *dataobj_s6a_imsi; /* s6a imsi avp */ - struct dict_object *dataobj_s6a_imei; - struct dict_object *dataobj_s6a_software_version; - struct dict_object *dataobj_s6a_supported_features; - struct dict_object *dataobj_s6a_req_e_utran_auth_info; - struct dict_object *dataobj_s6a_req_resync_info; - struct dict_object *dataobj_s6a_req_nb_of_req_vectors; - struct dict_object *dataobj_s6a_req_geran_auth_info; - struct dict_object *dataobj_s6a_immediate_response_pref; - struct dict_object *dataobj_s6a_visited_plmn_id; - struct dict_object *dataobj_s6a_result_code; - struct dict_object *dataobj_s6a_experimental_result; - struct dict_object *dataobj_s6a_vendor_id; - struct dict_object *dataobj_s6a_experimental_result_code; - struct dict_object *dataobj_s6a_auth_session_state; - struct dict_object *dataobj_s6a_authentication_info; - struct dict_object *dataobj_s6a_e_utran_vector; - struct dict_object *dataobj_s6a_rand; - struct dict_object *dataobj_s6a_xres; - struct dict_object *dataobj_s6a_autn; - struct dict_object *dataobj_s6a_kasme; - struct dict_object *dataobj_s6a_ulr_flags; - struct dict_object *dataobj_s6a_ula_flags; - struct dict_object *dataobj_s6a_pur_flags; - struct dict_object *dataobj_s6a_pua_flags; - struct dict_object *dataobj_s6a_rat_type; - struct dict_object *dataobj_s6a_terminal_info; - struct dict_object *dataobj_s6a_ue_srvcc_cap; - struct dict_object *dataobj_s6a_gmlc_addr; - struct dict_object *dataobj_s6a_subscription_data; - struct dict_object *dataobj_s6a_subscriber_status; - struct dict_object *dataobj_s6a_msisdn; - struct dict_object *dataobj_s6a_ambr; - struct dict_object *dataobj_s6a_network_access_mode; - struct dict_object *dataobj_s6a_access_restriction_data; - struct dict_object *dataobj_s6a_apn_configuration_profile; - struct dict_object *dataobj_s6a_subscribed_rau_tau_timer; - struct dict_object *dataobj_s6a_context_identifier; - /* All-APN-Configurations-Included-Indicator */ - struct dict_object *dataobj_s6a_all_apn_conf_inc_ind; - struct dict_object *dataobj_s6a_apn_configuration; - /* Max-Requested-Bandwidth-UL */ - struct dict_object *dataobj_s6a_max_bandwidth_ul; - /* Max-Requested-Bandwidth-DL */ - struct dict_object *dataobj_s6a_max_bandwidth_dl; - struct dict_object *dataobj_s6a_pdn_type; - struct dict_object *dataobj_s6a_service_selection; - struct dict_object *dataobj_s6a_eps_subscribed_qos_profile; - struct dict_object *dataobj_s6a_qos_class_identifier; - struct dict_object *dataobj_s6a_allocation_retention_priority; - struct dict_object *dataobj_s6a_priority_level; - struct dict_object *dataobj_s6a_pre_emption_capability; - struct dict_object *dataobj_s6a_pre_emption_vulnerability; - struct dict_object *dataobj_s6a_served_party_ip_addr; -} s6a_cnf_t; - -/* External definition of the S6A decriptor */ -extern s6a_cnf_t s6a_cnf; - -/* Length of IMSI should not exceed 15 digits */ -#define IMSI_LENGTH (15) -#define IMEI_LENGTH (15) -#define SV_LENGTH (2) - -/* ULR-Flags meaning: */ -#define ULR_SINGLE_REGISTRATION_IND (1U) -#define ULR_S6A_S6D_INDICATOR (1U << 1) -#define ULR_SKIP_SUBSCRIBER_DATA (1U << 2) -#define ULR_GPRS_SUBSCRIPTION_DATA_IND (1U << 3) -#define ULR_NODE_TYPE_IND (1U << 4) -#define ULR_INITIAL_ATTACH_IND (1U << 5) -#define ULR_PS_LCS_SUPPORTED_BY_UE (1U << 6) -#define ULR_PAD_VALID(x) ((x & ~0x7f) == 0) - -/* ULA-Flags */ -#define ULA_SEPARATION_IND (1U) - -/* PUR-Flags */ -#define PUR_UE_PURGED_IN_MME (1U) -#define PUR_UE_PURGED_IN_SGSN (1U << 1) -#define PUR_PAD_VALID(x) ((x & ~0x3) == 0) - -/* PUA-FLAGS */ -#define PUA_FREEZE_M_TMSI (1U) -#define PUA_FREEZE_P_TMSI (1U << 1) - -/* Access-restriction-data bits */ -#define UTRAN_NOT_ALLOWED (1U) -#define GERAN_NOT_ALLOWED (1U << 1) -#define GAN_NOT_ALLOWED (1U << 2) -#define I_HSDPA_EVO_NOT_ALLOWED (1U << 3) -#define E_UTRAN_NOT_ALLOWED (1U << 4) -#define HO_TO_NON_3GPP_NOT_ALLOWED (1U << 5) -#define ARD_CHECK_PAD(x) ((x & ~0x3f) == 0) - -#define FLAG_IS_SET(x, flag) ((x) & (flag)) - -#define FLAGS_SET(x, flags) ((x) |= (flags)) - -#define FLAGS_CLEAR(x, flags) ((x) = (x) & ~(flags)) - -/** \brief Initialize the s6a layer using freeDiameter - * \param hss_config_p pointer the global HSS configuration - * @returns 0 if the init was successfull, != 0 in case of failure - */ -int s6a_init(hss_config_t *hss_config_p); - -/** \brief Callback function for new equipements connections to the HSS. See - * libfdproto from freeDiameter for more informations on the peer validate - * callback - * \param info Peer freeDiameter info - * \param auth Result of the peer authentication, possible values: - * * 1 = accept - * * 0 = unknown - * * -1 = reject - * \param cb2 possible second callback to validate the TLS authentication - * @return 0 if the init was successfull, != 0 in case of failure - */ -int s6a_peer_validate(struct peer_info *info, int *auth, int (**cb2)(struct peer_info *)); - -/* Callback called when corresponding request/answer is received */ -int s6a_auth_info_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act); - -int s6a_up_loc_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act); - -int s6a_purge_ue_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act); - -int s6a_add_subscription_data_avp(struct msg *message, mysql_ul_ans_t *msql_ans); - -int s6a_add_result_code(struct msg *ans, struct avp *failed_avp, - int result_code, int experimental); - -int s6a_add_ipv4_address(struct avp *avp, const char *ipv4_addr); -int s6a_add_ipv6_address(struct avp *avp, const char *ipv6_addr); -char *experimental_retcode_2_string(int ret_code); -char *retcode_2_string(int ret_code); - -#endif /* S6A_PROTO_H_ */ diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_purge_ue.c b/openair-cn/OPENAIRHSS/s6a/s6a_purge_ue.c deleted file mode 100644 index c0bc0ee031..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_purge_ue.c +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_purge_ue.c - * \brief Handle a purge UE request and generate the corresponding answer - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include -#include - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -int s6a_purge_ue_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act) -{ - struct msg *ans, *qry; - struct avp *avp, *failed_avp = NULL; - struct avp_hdr *hdr; - - int ret = 0; - int result_code = ER_DIAMETER_SUCCESS; - int experimental = 0; - uint32_t pur_flags = 0; - - /* MySQL requests and asnwer data */ - mysql_pu_req_t pu_req; - mysql_pu_ans_t pu_ans; - - if (msg == NULL) { - return EINVAL; - } - - memset(&pu_req, 0, sizeof(mysql_pu_req_t)); - - qry = *msg; - /* Create the answer */ - CHECK_FCT(fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0)); - ans = *msg; - - /* Retrieving IMSI AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_imsi, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (hdr->avp_value->os.len > IMSI_LENGTH) { - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - - sprintf(pu_req.imsi, "%*s", (int)hdr->avp_value->os.len, hdr->avp_value->os.data); - } else { - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving the PUR-Flags if present */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_pur_flags, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - pur_flags = hdr->avp_value->u32; - - if (FLAG_IS_SET(pur_flags, PUR_UE_PURGED_IN_SGSN)) { - /* This bit shall not be set by a standalone MME. */ - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - } - - if ((ret = hss_mysql_purge_ue(&pu_req, &pu_ans)) != 0) { - /* We failed to find the IMSI in the database. Replying to the request - * with the user unknown cause. - */ - experimental = 1; - result_code = DIAMETER_ERROR_USER_UNKNOWN; - goto out; - } - - /* Retrieving Origin host AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_origin_host, &avp)); - - if (!avp) { - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieve the header from origin host and realm avps */ - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (strncmp(pu_ans.mme_host, (char *)hdr->avp_value->os.data, hdr->avp_value->os.len) != 0) { - result_code = DIAMETER_ERROR_UNKOWN_SERVING_NODE; - experimental = 1; - goto out; - } - - /* Retrieving Origin realm AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_origin_realm, &avp)); - - if (!avp) { - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (strncmp(pu_ans.mme_realm, (char *)hdr->avp_value->os.data, hdr->avp_value->os.len) != 0) { - result_code = DIAMETER_ERROR_UNKOWN_SERVING_NODE; - experimental = 1; - goto out; - } - -out: - /* Append the result code to the answer */ - CHECK_FCT(s6a_add_result_code(ans, failed_avp, result_code, experimental)); - - CHECK_FCT(fd_msg_send(msg, NULL, NULL )); - return 0; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_subscription_data.c b/openair-cn/OPENAIRHSS/s6a/s6a_subscription_data.c deleted file mode 100644 index 5bec27ac6b..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_subscription_data.c +++ /dev/null @@ -1,274 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - -/*! \file s6a_subscription_data.c - * \brief Add the subscription data to a message. Data are retrieved from database - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -int s6a_add_subscription_data_avp(struct msg *message, mysql_ul_ans_t *mysql_ans) -{ - int ret = -1, i = 0; - mysql_pdn_t *pdns = NULL; - uint8_t nb_pdns = 0; - struct avp *avp = NULL, *child_avp = NULL; - union avp_value value; - - if (mysql_ans == NULL) { - return -1; - } - - ret = hss_mysql_query_pdns(mysql_ans->imsi, &pdns, &nb_pdns); - - if (ret != 0) { - /* mysql query failed: - * - maybe no more memory - * - maybe user is not known (should have failed before) - * - maybe imsi has no EPS subscribed - */ - goto out; - } - - if (nb_pdns == 0) { - /* No PDN for this user -> DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION */ - return -1; - } - - /* Create the Subscription-Data AVP */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_subscription_data, 0, &avp)); - - { - uint8_t msisdn_len = strlen(mysql_ans->msisdn); - - /* The MSISDN is known in the HSS, add it to the subscription data */ - if (msisdn_len > 0) { - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_msisdn, 0, &child_avp)); - value.os.data = (uint8_t *)mysql_ans->msisdn; - value.os.len = msisdn_len; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - } - } - - /* We have to include the acess-restriction-data if the value stored in DB - * indicates that at least one restriction is applied to the USER. - */ - if (mysql_ans->access_restriction != 0) { - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_access_restriction_data, 0, &child_avp)); - value.u32 = (uint32_t)mysql_ans->access_restriction; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - } - - /* Add the Subscriber-Status to the list of AVP. - * It shall indicate if the service is barred or granted. - * TODO: normally this parameter comes from DB... - */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_subscriber_status, 0, &child_avp)); - /* SERVICE_GRANTED */ - value.u32 = 0; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - - /* Add the Network-Access-Mode to the list of AVP. - * LTE Standalone HSS/MME: ONLY_PACKET. - */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_network_access_mode, 0, &child_avp)); - /* SERVICE_GRANTED */ - value.u32 = 2; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - - /* Add the AMBR to list of AVPs */ - { - struct avp *bandwidth; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_ambr, 0, &child_avp)); - - /* Uplink bandwidth */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_max_bandwidth_ul, 0, &bandwidth)); - value.u32 = mysql_ans->aggr_ul; - CHECK_FCT(fd_msg_avp_setvalue(bandwidth, &value)); - CHECK_FCT(fd_msg_avp_add(child_avp, MSG_BRW_LAST_CHILD, bandwidth)); - - /* Downlink bandwidth */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_max_bandwidth_dl, 0, &bandwidth)); - value.u32 = mysql_ans->aggr_dl; - CHECK_FCT(fd_msg_avp_setvalue(bandwidth, &value)); - CHECK_FCT(fd_msg_avp_add(child_avp, MSG_BRW_LAST_CHILD, bandwidth)); - - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - } - - /* Add the APN-Configuration-Profile only if at least one APN is subscribed */ - if (nb_pdns > 0) { - struct avp *apn_profile; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_apn_configuration_profile, - 0, &apn_profile)); - - /* Context-Identifier */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_context_identifier, 0, &child_avp)); - value.u32 = 0; - /* TODO: this is the reference to the default APN... */ - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(apn_profile, MSG_BRW_LAST_CHILD, child_avp)); - - /* All-APN-Configurations-Included-Indicator */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_all_apn_conf_inc_ind, 0, &child_avp)); - value.u32 = 0; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(apn_profile, MSG_BRW_LAST_CHILD, child_avp)); - - for (i = 0; i < nb_pdns; i++) { - struct avp *apn_configuration; - mysql_pdn_t *pdn_elm; - - pdn_elm = &pdns[i]; - - /* APN-Configuration */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_apn_configuration, 0, &apn_configuration)); - - /* Context-Identifier */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_context_identifier, 0, &child_avp)); - value.u32 = i; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, child_avp)); - - /* PDN-Type */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_pdn_type, 0, &child_avp)); - value.u32 = pdn_elm->pdn_type; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, child_avp)); - - if ((pdn_elm->pdn_type == IPV4) || - (pdn_elm->pdn_type == IPV4_OR_IPV6) || - (pdn_elm->pdn_type == IPV4V6)) { - s6a_add_ipv4_address(apn_configuration, pdn_elm->pdn_address.ipv4_address); - } - - if ((pdn_elm->pdn_type == IPV6) || - (pdn_elm->pdn_type == IPV4_OR_IPV6) || - (pdn_elm->pdn_type == IPV4V6)) { - s6a_add_ipv6_address(apn_configuration, pdn_elm->pdn_address.ipv6_address); - } - - /* Service-Selection */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_service_selection, 0, &child_avp)); - value.os.data = (uint8_t*)pdn_elm->apn; - value.os.len = strlen(pdn_elm->apn); - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, child_avp)); - - /* Add the eps subscribed qos profile */ - { - struct avp *qos_profile, *allocation_priority; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_eps_subscribed_qos_profile, 0, &qos_profile)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_qos_class_identifier, 0, &child_avp)); - /* For a QCI_1 */ - value.u32 = (uint32_t)pdn_elm->qci; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(qos_profile, MSG_BRW_LAST_CHILD, child_avp)); - - /* Allocation retention priority */ - { - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_allocation_retention_priority, 0, &allocation_priority)); - - /* Priority level */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_priority_level, 0, &child_avp)); - value.u32 = (uint32_t)pdn_elm->priority_level; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(allocation_priority, MSG_BRW_LAST_CHILD, child_avp)); - - /* Pre-emption-capability */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_pre_emption_capability, 0, &child_avp)); - value.u32 = (uint32_t)pdn_elm->pre_emp_cap; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(allocation_priority, MSG_BRW_LAST_CHILD, child_avp)); - - /* Pre-emption-vulnerability */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_pre_emption_vulnerability, 0, &child_avp)); - value.u32 = (uint32_t)pdn_elm->pre_emp_vul; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(allocation_priority, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_add(qos_profile, MSG_BRW_LAST_CHILD, allocation_priority)); - } - CHECK_FCT(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, qos_profile)); - } - - /* Add the AMBR to list of AVPs */ - { - struct avp *bandwidth; - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_ambr, 0, &bandwidth)); - - /* Uplink bandwidth */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_max_bandwidth_ul, 0, &child_avp)); - value.u32 = (uint32_t)pdn_elm->aggr_ul; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(bandwidth, MSG_BRW_LAST_CHILD, child_avp)); - - /* Downlink bandwidth */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_max_bandwidth_dl, 0, &child_avp)); - value.u32 = (uint32_t)pdn_elm->aggr_dl; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(bandwidth, MSG_BRW_LAST_CHILD, child_avp)); - - CHECK_FCT(fd_msg_avp_add(apn_configuration, MSG_BRW_LAST_CHILD, bandwidth)); - } - - CHECK_FCT(fd_msg_avp_add(apn_profile, MSG_BRW_LAST_CHILD, apn_configuration)); - } - - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, apn_profile)); - } - - /* Subscribed-Periodic-RAU-TAU-Timer */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_subscribed_rau_tau_timer, 0, &child_avp)); - /* Request an RAU/TAU update every x seconds */ - value.u32 = (uint32_t)mysql_ans->rau_tau; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - - /* Add the AVP to the message */ - CHECK_FCT(fd_msg_avp_add(message, MSG_BRW_LAST_CHILD, avp)); - -out: - - if (pdns) { - free(pdns); - } - - return ret; -} diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.c b/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.c deleted file mode 100644 index a2d0dd7791..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.c +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_supported_features.c - * \brief - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" - diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.h b/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.h deleted file mode 100644 index 5fc278a732..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_supported_features.h +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "hss_config.h" - -#ifndef S6A_SUPPORTED_FEATURES_H_ -#define S6A_SUPPORTED_FEATURES_H_ - -/* Operator Determined Barring of all Packet Oriented Services. */ -#define ODB_ALL_APN(x) (x & 0x1) - -/* Operator Determined Barring of Packet Oriented Services from access points - * that are within the HPLMN whilst the subscriber is roaming in a VPLMN. - */ -#define ODB_HPLMN_APN(x) ((x & 0x2) >> 1) - -/* Operator Determined Barring of Packet Oriented Services from access points - * that are within the roamed to VPLMN - */ -#define ODB_VPLMN_APN(x) ((x & 0x4) >> 2) - -/* Operator Determined Barring of all outgoing calls */ -#define ODB_ALL_OG(x) ((x & 0x8) >> 3) - -/* Operator Determined Barring of all outgoing international calls */ -#define ODB_ALL_INT_OG ((x & 0x10) >> 4) - -/* Operator Determined Barring of all outgoing international calls except those - * directed to the home PLMN country - */ -#define ODB_ALL_INT_NOT_TO_HPLMN(x) ((x & 0x20) >> 5) - -/* Operator Determined Barring of all outgoing inter-zonal calls */ -#define ODB_ALL_INT_ZONE_OG(x) ((x & 0x40) >> 6) - -/* Operator Determined Barring of all outgoing inter-zonal calls except those - * directed to the home PLMN country - */ -#define ODB_ALL_INT_ZONE_OG_NOT_TO_HPLMN(x) ((x & 0x80) >> 7) - -/* Operator Determined Barring of all outgoing international calls except those - * directed to the home PLMN country and Barring of all outgoing inter-zonal calls - */ -#define ODB_ALL_INT_ZONE_OG_AND_INT_OG_NOT_TO_HPLMN(x) ((x & 0x100) >> 8) - -/* Regional Subscription */ -#define REG_SUB(x) ((x & 0x200) >> 9) - -/* Trace Function */ -#define TRACE(x) ((x & 0x400) >> 10) - -/* All LCS Privacy Exception Classes */ -#define LCS_ALL_PRIV_EXCEP(x) ((x & 0x800) >> 11) - -/* Allow location by any LCS client */ -#define LCS_UNIVERSAL(x) ((x & 0x1000) >> 12) - -/* Allow location by any value added LCS client to which a call/session is - * established from the target UE - */ -#define LCS_CALL_SESS_RELATED(x) ((x & 0x2000) >> 13) - -/* Allow location by designated external value added LCS clients */ -#define LCS_CALL_SESS_UNRELATED(x) ((x & 0x4000) >> 14) - -/* Allow location by designated PLMN operator LCS clients */ -#define LCS_PLMN_OPERATOR(x) ((x & 0x8000) >> 15) - -/* Allow location by LCS clients of a designated LCS service type */ -#define LCS_SERVICE_TYPE(x) ((x & 0x10000) >> 16) - -/* All Mobile Originating Location Request Classes */ -#define LCS_ALL_MOLR_SS(x) ((x & 0x20000) >> 17) - -/* Allow an MS to request its own location */ -#define LCS_BASIC_SELF_LOCATION(x) ((x & 0x40000) >> 18) - -/* Allow an MS to perform self location without interaction with the PLMN */ -#define LCS_AUTO_SELF_LOCATION(x) ((x & 0x80000) >> 19) - -/* Allow an MS to request transfer of its location to another LCS client */ -#define LCS_TRANSFER_TO_THIRD_PARTY(x) ((x & 0x100000) >> 20) - -/* Short Message MO-PP */ -#define SM_MO_PP(x) ((x & 0x200000) >> 21) - -/* Barring of Outgoing Calls */ -#define BARRING_OUTGOING_CALLS(x) ((x & 0x400000) >> 22) - -/* Barring of all outgoing calls */ -#define BAOC(x) ((x & 0x800000) >> 23) - -/* Barring of outgoing international calls */ -#define BOIC(x) ((x & 0x1000000) >> 24) - -/* Barring of outgoing international calls except those directed to the home PLMN - * Country - */ -#define BOIC_EXCEPT_HC(x) ((x & 0x2000000) >> 25) - -/* UE Reachability Notifcation */ -#define UE_REACH_NOTIF(x) ((x & 0x4000000) >> 26) - -/* Terminating Access Domain Selection Data Retrieval */ -#define T_ADS_DATA_RETR(x) ((x & 0x8000000) >> 27) - -/* State/Location Information Retrieval */ -#define STATE_LOCATION_INFO_RETR(x) ((x & 0x10000000) >> 28) - -/* Partial Purge from a Combined MME/SGSN */ -#define PARTIAL_PURGE(x) ((x & 0x20000000) >> 29) - -#define SUPP_FEAT_PAD_VALID(x) ((x & 0xfc000000) == 0) - -#endif /* S6A_SUPPORTED_FEATURES_H_ */ diff --git a/openair-cn/OPENAIRHSS/s6a/s6a_up_loc.c b/openair-cn/OPENAIRHSS/s6a/s6a_up_loc.c deleted file mode 100644 index 3c3b8519a8..0000000000 --- a/openair-cn/OPENAIRHSS/s6a/s6a_up_loc.c +++ /dev/null @@ -1,432 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_up_loc.c - * \brief Handle an update location message and create the answer. - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include -#include -#include "hss_config.h" -#include "db_proto.h" -#include "s6a_proto.h" -#include "access_restriction.h" - -int s6a_up_loc_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act) -{ - struct msg *ans, *qry; - struct avp *avp, *origin_host, *origin_realm; - struct avp *failed_avp = NULL; - - struct avp_hdr *origin_host_hdr, *origin_realm_hdr; - struct avp_hdr *hdr; - - union avp_value value; - - int ret = 0; - int result_code = ER_DIAMETER_SUCCESS; - int experimental = 0; - uint32_t ulr_flags = 0; - - mysql_ul_ans_t mysql_ans; - mysql_ul_push_t mysql_push; - - if (msg == NULL) { - return EINVAL; - } - - memset(&mysql_push, 0, sizeof(mysql_ul_push_t)); - memset(&mysql_ans, 0, sizeof(mysql_ul_ans_t)); - - fprintf(stdout, "Received new update location request\n"); - - qry = *msg; - /* Create the answer */ - CHECK_FCT(fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0)); - ans = *msg; - - /* Retrieving IMSI AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_imsi, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - if (hdr->avp_value->os.len > IMSI_LENGTH) { - fprintf(stdout, "IMSI_LENGTH ER_DIAMETER_INVALID_AVP_VALUE\n"); - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - - // 3GPP TS 29.272-910 / 5.2.1.1.3 Detailed behaviour of the HSS - // When receiving an Update Location request the HSS shall check whether the IMSI is known. - // If it is not known, a Result Code of DIAMETER_ERROR_USER_UNKNOWN shall be returned. - // If it is known, but the subscriber has no EPS subscription, the HSS may (as an operator option) - // return a Result Code of DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION. - // If the Update Location Request is received over the S6a interface, and the subscriber has not - // any APN configuration, the HSS shall return a Result Code of DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION. - // The HSS shall check whether the RAT type the UE is using is allowed. If it is not, - // a Result Code of DIAMETER_ERROR_RAT_NOT_ALLOWED shall be returned. - // ... - sprintf(mysql_push.imsi, "%*s", (int)hdr->avp_value->os.len, - (char*)hdr->avp_value->os.data); - - if ((ret = hss_mysql_update_loc(mysql_push.imsi, &mysql_ans)) != 0) { - /* We failed to find the IMSI in the database. Replying to the request - * with the user unknown cause. - */ - experimental = 1; - fprintf(stdout, "IMSI %s DIAMETER_ERROR_USER_UNKNOWN\n", mysql_push.imsi); - result_code = DIAMETER_ERROR_USER_UNKNOWN; - goto out; - } - } else { - fprintf(stderr, "Cannot get IMSI AVP which is mandatory\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving Origin host AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_origin_host, &origin_host)); - - if (!origin_host) { - fprintf(stderr, "origin_host ER_DIAMETER_MISSING_AVP\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving Origin realm AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_origin_realm, &origin_realm)); - - if (!origin_realm) { - fprintf(stderr, "origin_realm ER_DIAMETER_MISSING_AVP\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieve the header from origin host and realm avps */ - CHECK_FCT(fd_msg_avp_hdr(origin_host, &origin_host_hdr)); - CHECK_FCT(fd_msg_avp_hdr(origin_realm, &origin_realm_hdr)); - - sprintf(mysql_push.mme_identity.mme_host, "%*s", - (int)origin_host_hdr->avp_value->os.len, - (char*)origin_host_hdr->avp_value->os.data); - - sprintf(mysql_push.mme_identity.mme_realm, "%*s", - (int)origin_realm_hdr->avp_value->os.len, - (char*)origin_realm_hdr->avp_value->os.data); - - /* Retrieving RAT type AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_rat_type, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - /* As we are in E-UTRAN stand-alone HSS, we have to reject incoming - * location request with a RAT-Type != than E-UTRAN. - * The user may be disallowed to use the specified RAT, check the access - * restriction bit mask received from DB. - */ - if ((hdr->avp_value->u32 != 1004) || - (FLAG_IS_SET(mysql_ans.access_restriction, E_UTRAN_NOT_ALLOWED))) { - experimental = 1; - fprintf(stderr, "access_restriction DIAMETER_ERROR_RAT_NOT_ALLOWED\n"); - result_code = DIAMETER_ERROR_RAT_NOT_ALLOWED; - goto out; - } - } else { - fprintf(stderr, "rat_type ER_DIAMETER_MISSING_AVP\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving ULR Flags AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_ulr_flags, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - ulr_flags = hdr->avp_value->u32; - - /* Check the flags received */ - if (FLAG_IS_SET(ulr_flags, ULR_SINGLE_REGISTRATION_IND)) { - /* We don't handle cases where we have to inform SGSN */ - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - - fprintf(stderr, "ULR single registration bit set (SGSN to MME): " - "not handled by standalone E-UTRAN HSS\n"); - goto out; - } - - if (!FLAG_IS_SET(ulr_flags, ULR_S6A_S6D_INDICATOR)) { - /* The request is coming from s6d interface (SGSN). */ - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - - fprintf(stderr, "ULR S6D bit set: " - "not handled by standalone E-UTRAN HSS\n"); - goto out; - } - - if (FLAG_IS_SET(ulr_flags, ULR_NODE_TYPE_IND)) { - /* Request coming from combined SGSN/MME. */ - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - fprintf(stderr, "ULR conbined SGSN/MME bit set: " - "not handled by standalone E-UTRAN HSS\n"); - goto out; - } - - if (FLAG_IS_SET(ulr_flags, ULR_INITIAL_ATTACH_IND)) { - /* This bit, when set, indicates that the HSS shall send Cancel - * Location to the MME or SGSN if there is the MME or SGSN - * registration. - */ - // TODO: check if an MME is already registered, serving the UE. - // If so, it should be informed. - - /* The identity of the MME will be added to db */ - mysql_push.mme_identity_present = MME_IDENTITY_PRESENT; - } else { - /* The bit is not set, we are expecting that the mme contained in db - * matches the original MME. - */ - if ((mysql_ans.mme_identity.mme_host != NULL) && - (mysql_ans.mme_identity.mme_realm != NULL)) { - /* Compare if values match expected */ - if (memcmp(mysql_ans.mme_identity.mme_host, origin_host_hdr->avp_value->os.data, - origin_host_hdr->avp_value->os.len > strlen(mysql_ans.mme_identity.mme_host) ? - strlen(mysql_ans.mme_identity.mme_host) : origin_host_hdr->avp_value->os.len) != 0) { - experimental = 1; - fprintf(stderr, "DIAMETER_ERROR_UNKOWN_SERVING_NODE (host)\n"); - result_code = DIAMETER_ERROR_UNKOWN_SERVING_NODE; - goto out; - } - - if (memcmp(mysql_ans.mme_identity.mme_realm, origin_realm_hdr->avp_value->os.data, - origin_realm_hdr->avp_value->os.len > strlen(mysql_ans.mme_identity.mme_realm) ? - strlen(mysql_ans.mme_identity.mme_realm) : origin_realm_hdr->avp_value->os.len) != 0) { - experimental = 1; - fprintf(stderr, "DIAMETER_ERROR_UNKOWN_SERVING_NODE (realm)\n"); - result_code = DIAMETER_ERROR_UNKOWN_SERVING_NODE; - goto out; - } - } else { - /* Failed to retrieve current serving MME and the ULR is not - * marked as an initial attach indication... - */ - experimental = 1; - fprintf(stderr, "DIAMETER_ERROR_UNKOWN_SERVING_NODE\n"); - result_code = DIAMETER_ERROR_UNKOWN_SERVING_NODE; - goto out; - } - } - - if (!ULR_PAD_VALID(ulr_flags)) { - /* Padding is not zero'ed, may be the MME/SGSN supports newer - * release. Inform it. - */ - fprintf(stderr, "ULR flags ER_DIAMETER_INVALID_AVP_VALUE\n"); - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - } else { - fprintf(stderr, "ULR flags ER_DIAMETER_MISSING_AVP\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving Visited-PLMN-Id AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_visited_plmn_id, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - /* Roaming cases are not allowed for now. - * Reject the connectivity if PLMN visited and IMSI PLMN disagree. - */ - /* TODO */ - if (hdr->avp_value->os.len == 3) { - // if (apply_access_restriction(mysql_push.imsi, hdr->avp_value->os.data) != 0) { - // /* We found that user is roaming and has no right to do it -> - // * reject the connection - // */ - // result_code = DIAMETER_ERROR_ROAMING_NOT_ALLOWED; - // experimental = 1; - // goto out; - // } - } else { - fprintf(stderr, "PLMN ID ER_DIAMETER_INVALID_AVP_VALUE\n"); - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - goto out; - } - } else { - fprintf(stderr, "PLMN ID ER_DIAMETER_MISSING_AVP\n"); - result_code = ER_DIAMETER_MISSING_AVP; - goto out; - } - - /* Retrieving Terminal-Information AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_terminal_info, &avp)); - - if (avp) { - struct avp *child_avp; - - /* Walk through childs avp */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_FIRST_CHILD, &child_avp, NULL)); - - while (child_avp) { - /* Retrieve the header of the child avp */ - CHECK_FCT(fd_msg_avp_hdr(child_avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_IMEI: { - /* Check that we do not exceed the maximum size for IMEI */ - if (hdr->avp_value->os.len > IMEI_LENGTH) { - fprintf(stderr, "terminal info ER_DIAMETER_INVALID_AVP_VALUE\n"); - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - failed_avp = child_avp; - goto out; - } - - sprintf(mysql_push.imei, "%*s", (int)hdr->avp_value->os.len, - hdr->avp_value->os.data); - mysql_push.imei_present = IMEI_PRESENT; - } - break; - - case AVP_CODE_SOFTWARE_VERSION: { - /* Check the size for SV */ - if (hdr->avp_value->os.len != SV_LENGTH) { - fprintf(stderr, "software version ER_DIAMETER_INVALID_AVP_VALUE\n"); - result_code = ER_DIAMETER_INVALID_AVP_VALUE; - failed_avp = child_avp; - goto out; - } - - mysql_push.software_version[0] = hdr->avp_value->os.data[0]; - mysql_push.software_version[1] = hdr->avp_value->os.data[1]; - mysql_push.sv_present = SV_PRESENT; - } - break; - - default: /* Fall through */ - case AVP_CODE_3GPP2_MEID: { - /* This AVP is not expected on s6a interface */ - fprintf(stderr, "AVP_CODE_3GPP2_MEID ER_DIAMETER_AVP_UNSUPPORTED\n"); - result_code = ER_DIAMETER_AVP_UNSUPPORTED; - failed_avp = child_avp; - goto out; - } - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(child_avp, MSG_BRW_NEXT, &child_avp, NULL)); - } - } - - /* Retrieving UE-SRVCC AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_ue_srvcc_cap, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - mysql_push.ue_srvcc_present = UE_SRVCC_PRESENT; - mysql_push.ue_srvcc = hdr->avp_value->u32; - } - - /* Retrieving Supported features list AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_supported_features, &avp)); - - if (avp) { - struct avp *child_avp; - - /* Walk through childs avp */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_FIRST_CHILD, &child_avp, NULL)); - - while (child_avp) { - /* Retrieve the header of the child avp */ - CHECK_FCT(fd_msg_avp_hdr(child_avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_VENDOR_ID: { - if (hdr->avp_value->u32 != VENDOR_3GPP) { - /* features from a vendor other than 3GPP is not supported */ - fprintf(stderr, "Cannot interpret features list with vendor id " - "different than 3GPP(%d)\n", VENDOR_3GPP); - continue; - } - } - break; - - case AVP_CODE_FEATURE_LIST: { - mysql_push.mme_supported_features_present = MME_SUPPORTED_FEATURES_PRESENT; - mysql_push.mme_supported_features = hdr->avp_value->u32; - } - break; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(child_avp, MSG_BRW_NEXT, &child_avp, NULL)); - } - } - - mysql_push_up_loc(&mysql_push); - - /* ULA flags */ - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_ula_flags, 0, &avp)); - value.u32 = 1; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp)); - - /* Only add the subscriber data if not marked as skipped by MME */ - if (!FLAG_IS_SET(ulr_flags, ULR_SKIP_SUBSCRIBER_DATA)) { - if (s6a_add_subscription_data_avp(ans, &mysql_ans) != 0) { - fprintf(stderr, "ULR_SKIP_SUBSCRIBER_DATA DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION\n"); - result_code = DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION; - experimental = 1; - goto out; - } - } - -out: - /* Add the Auth-Session-State AVP */ - CHECK_FCT(fd_msg_search_avp(qry, s6a_cnf.dataobj_s6a_auth_session_state, &avp)); - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - CHECK_FCT(fd_msg_avp_new(s6a_cnf.dataobj_s6a_auth_session_state, 0, &avp)); - CHECK_FCT(fd_msg_avp_setvalue(avp, hdr->avp_value)); - CHECK_FCT(fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp)); - - /* Append the result code to the answer */ - CHECK_FCT(s6a_add_result_code(ans, failed_avp, result_code, experimental)); - - CHECK_FCT(fd_msg_send(msg, NULL, NULL )); - return 0; -} diff --git a/openair-cn/OPENAIRHSS/scripts/COPYING b/openair-cn/OPENAIRHSS/scripts/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/scripts/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/scripts/install_hss.sh b/openair-cn/OPENAIRHSS/scripts/install_hss.sh deleted file mode 100644 index c1b02c6315..0000000000 --- a/openair-cn/OPENAIRHSS/scripts/install_hss.sh +++ /dev/null @@ -1,145 +0,0 @@ -# !/bin/sh -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ - -CURRENT_PATH=`pwd` - -sudo apt-get install autoconf automake gawk cmake make gcc flex bison libsctp1 libsctp-dev libidn2-0-dev \ -libidn11-dev libmysqlclient-dev libxml2-dev swig python-dev cmake-curses-gui \ -valgrind guile-2.0-dev libgmp-dev libgcrypt11-dev gdb unzip libtasn1-3-dev g++ \ -linux-headers-`uname -r` build-essential -y - - -if [ -f install_log.txt ] - then - rm -f install_log.txt -fi - -if [ ! -d /usr/local/src/ ] - then - echo "/usr/local/src/ doesn't exist please create one" - exit -1 -fi - -if [ ! -w /usr/local/src/ ] - then - echo "You don't have permissions to write to /usr/local/src/" - exit -1 -fi - -cd /usr/local/src/ -echo "Downloading nettle archive" - -if [ -f nettle-2.5.tar.gz ] - then - rm -f nettle-2.5.tar.gz -fi -if [ -f nettle-2.5.tar ] - then - rm -f nettle-2.5.tar -fi -if [ -d nettle-2.5 ] - then - rm -rf nettle-2.5/ -fi - -wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz > install_log.txt -gunzip nettle-2.5.tar.gz > install_log.txt -echo "Uncompressing nettle archive" -tar -xf nettle-2.5.tar -cd nettle-2.5/ -./configure --disable-openssl --enable-shared --prefix=/usr > install_log.txt -if [ $? -ne 0 ] -then - exit -1 -fi -echo "Compiling nettle" -make -j2 > install_log.txt 2>&1 -make check > install_log.txt -sudo make install > install_log.txt -cd ../ - -echo "Downloading gnutls archive" - -if [ -f gnutls-3.1.0.tar.xz ] - then - rm -f gnutls-3.1.0.tar.xz -fi -if [ -d gnutls-3.1.0/ ] - then - rm -rf gnutls-3.1.0/ -fi - -wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.0.tar.xz > install_log.txt -tar -xf gnutls-3.1.0.tar.xz -echo "Uncompressing gnutls archive" -cd gnutls-3.1.0/ -./configure --prefix=/usr -if [ $? -ne 0 ] -then - exit -1 -fi -echo "Compiling gnutls" -make -j2 > install_log.txt 2>&1 -sudo make install > install_log.txt -cd ../ - -echo "Downloading freeDiameter archive" - -if [ -f 1.1.5.tar.gz ] - then - rm -f 1.1.5.tar.gz -fi -if [ -d freeDiameter-1.1.5/ ] - then - rm -rf freeDiameter-1.1.5/ -fi - -wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz > install_log.txt -tar -xzf 1.1.5.tar.gz > install_log.txt -echo "Uncompressing freeDiameter archive" -cd freeDiameter-1.1.5 -echo "Patching freeDiameter" -patch -p1 < $OPENAIRCN_DIR/S6A/freediameter/freediameter-1.1.5.patch > install_log.txt -mkdir build -cd build -# optionaly if needed add -DCMAKE_BUILD_TYPE=debug -cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ > install_log.txt -if [ $? -ne 0 ] -then - exit -1 -fi -echo "Compiling freeDiameter" -make -j2 > install_log.txt 2>&1 -#make help -make test > install_log.txt -sudo make install > install_log.txt - -cd $OPENAIRCN_DIR/OPENAIRHSS/conf -./make_certs.sh diff --git a/openair-cn/OPENAIRHSS/tests/COPYING b/openair-cn/OPENAIRHSS/tests/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/tests/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/tests/Makefile.am b/openair-cn/OPENAIRHSS/tests/Makefile.am deleted file mode 100644 index b149c8058c..0000000000 --- a/openair-cn/OPENAIRHSS/tests/Makefile.am +++ /dev/null @@ -1,88 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# if HAVE_CHECK -# TESTS = up_loc_test -# else -# TESTS = -# endif -AM_CFLAGS = @CHECK_CFLAGS@ \ - -I$(top_srcdir)/auc - -if HAVE_CHECK -TESTS = up_loc_test test_security_f1 \ - test_security_f2_f3_f5 \ - test_security_f4_f5star \ - test_kdf \ - test_security_kasme -else -TESTS = -endif - -test_common = \ - $(top_builddir)/auc/libauc.la \ - libtest_utils.la \ - @CHECK_LIBS@ - -up_loc_test_LDADD = \ - libtest_utils.la \ - @CHECK_LIBS@ - -test_security_f1_LDADD = \ - $(test_common) - -test_security_f2_f3_f5_LDADD = \ - $(test_common) - -test_security_f4_f5star_LDADD = \ - $(test_common) - -test_security_kasme_LDADD = \ - $(test_common) - -test_kdf_LDADD = \ - $(test_common) - -noinst_LTLIBRARIES = libtest_utils.la -libtest_utils_la_SOURCES = \ - test_utils.h test_utils.c \ - test_fd.h test_fd.c - -check_PROGRAMS = \ - up_loc_test test_security_f1 \ - test_security_f2_f3_f5 \ - test_security_f4_f5star \ - test_security_kasme \ - test_kdf - -up_loc_test_SOURCES = up_loc_test.c -test_security_f1_SOURCE = test_security_f1.c -test_security_f2_f3_f5_SOURCE = test_security_f2_f3_f5.c -test_security_f4_f5star_SOURCE = test_security_f4_f5star.c -test_security_kasme_SOURCE = test_security_kasme.c -test_kdf_SOURCE = test_kdf.c \ No newline at end of file diff --git a/openair-cn/OPENAIRHSS/tests/test_fd.c b/openair-cn/OPENAIRHSS/tests/test_fd.c deleted file mode 100644 index e4961d6aa9..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_fd.c +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include "config.h" - -#include -#include - -#include "test_utils.h" -#include "test_fd.h" - -extern int fd_ext_add( char * filename, char * conffile ); - -void s6a_fd_init(void) -{ - struct peer_info peer; - - fd_g_debug_lvl = NONE; - - memset(&peer, 0, sizeof(struct peer_info)); - - peer.pi_diamid = "hss.test.fr"; - peer.pi_diamidlen = strlen(peer.pi_diamid); - - /* Only SCTP */ - peer.config.pic_flags.pro4 = PI_P4_SCTP; - peer.config.pic_flags.sec = PI_SEC_NONE; - peer.config.pic_flags.exp = PI_EXP_NONE; - - peer.config.pic_port = 18678; - - if (fd_core_initialize() != 0) { - fail("fd_core_initialize failed"); - } - - if (fd_core_start() != 0) { - fail("fd_core_start failed"); - } - - if (fd_core_parseconf("../../conf/hss_fd.conf") != 0) { - fail("fd_core_waitstartcomplete failed"); - } - - if (fd_core_waitstartcomplete() != 0) { - fail("fd_core_waitstartcomplete failed"); - } - - // if (fd_peer_add(&peer, NULL, NULL, NULL) != 0) { - // fail("fd_peer_add failed"); - // } -} - -void s6a_fd_stop(void) -{ - if (fd_core_shutdown() != 0) { - fail("fd_core_shutdown failed"); - } - - if (fd_core_wait_shutdown_complete() != 0) { - fail("fd_core_shutdown failed"); - } -} diff --git a/openair-cn/OPENAIRHSS/tests/test_fd.h b/openair-cn/OPENAIRHSS/tests/test_fd.h deleted file mode 100644 index fd38767995..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_fd.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef TEST_FD_H_ -#define TEST_FD_H_ - -void s6a_fd_init(void); - -void s6a_fd_stop(void); - -#endif /* TEST_FD_H_ */ diff --git a/openair-cn/OPENAIRHSS/tests/test_kdf.c b/openair-cn/OPENAIRHSS/tests/test_kdf.c deleted file mode 100644 index fbaa536431..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_kdf.c +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -static -void do_kdf(uint8_t *key, unsigned key_length, uint8_t *data, unsigned data_length, - uint8_t *exp, unsigned exp_length) -{ - uint8_t result[32]; - - kdf(key, key_length, data, data_length, result, 32); - - if (compare_buffer(result, exp_length, exp, exp_length) != 0) { - fail("Fail: kdf\n"); - } -} - -void -doit (void) -{ - /* RFC 4231 */ - - /* Test case 1 #4.2 */ - do_kdf(HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" - "0b0b0b0b"), - HL("4869205468657265"), - HL("b0344c61d8db38535ca8afceaf0bf12b" - "881dc200c9833da726e9376c2e32cff7")); - /* Test case 2 #4.3 */ - do_kdf(HL("4a656665"), - HL("7768617420646f2079612077616e7420" - "666f72206e6f7468696e673f"), - HL("5bdcc146bf60754e6a042426089575c7" - "5a003f089d2739839dec58b964ec3843")); - /* Test case 3 #4.4 */ - do_kdf(HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaa"), - HL("dddddddddddddddddddddddddddddddd" - "dddddddddddddddddddddddddddddddd" - "dddddddddddddddddddddddddddddddd" - "dddd"), - HL("773ea91e36800e46854db8ebd09181a7" - "2959098b3ef8c122d9635514ced565fe")); - /* Test case 4 #4.5 */ - do_kdf(HL("0102030405060708090a0b0c0d0e0f10" - "111213141516171819"), - HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" - "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" - "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" - "cdcd"), - HL("82558a389a443c0ea4cc819899f2083a" - "85f0faa3e578f8077a2e3ff46729665b")); - /* Test case 5 #4.6 */ - do_kdf(HL("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c" - "0c0c0c0c"), - HL("546573742057697468205472756e6361" - "74696f6e"), - HL("a3b6167473100ee06e0c796c2955552b")); - /* Test case 6 #4.7 */ - do_kdf(HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaa"), - HL("54657374205573696e67204c61726765" - "72205468616e20426c6f636b2d53697a" - "65204b6579202d2048617368204b6579" - "204669727374"), - HL("60e431591ee0b67f0d8a26aacbf5b77f" - "8e0bc6213728c5140546040f0ee37f54")); - /* Test case 6 #4.7 */ - do_kdf(HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaa"), - HL("54686973206973206120746573742075" - "73696e672061206c6172676572207468" - "616e20626c6f636b2d73697a65206b65" - "7920616e642061206c61726765722074" - "68616e20626c6f636b2d73697a652064" - "6174612e20546865206b6579206e6565" - "647320746f2062652068617368656420" - "6265666f7265206265696e6720757365" - "642062792074686520484d414320616c" - "676f726974686d2e"), - HL("9b09ffa71b942fcb27635fbcd5b0e944" - "bfdc63644f0713938a7f51535c3a35e2")); -} diff --git a/openair-cn/OPENAIRHSS/tests/test_security.c b/openair-cn/OPENAIRHSS/tests/test_security.c deleted file mode 100644 index f319ae1f73..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_security.c +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -typedef struct { - uint8_t key[16]; - uint8_t rand[16]; - uint8_t sqn[6]; - uint8_t amf[2]; - uint8_t op[16]; - uint8_t f1_exp[8]; - uint8_t f1_star_exp[8]; -} test_set_t; - -test_set_t test_set[] = { - /* 35.207 #4.3 */ - { - .key = { - 0x46, 0x5b, 0x5c, 0xe8, 0xb1, 0x99, 0xb4, 0x9f, 0xaa, 0x5f, 0x0a, - 0x2e, 0xe2, 0x38, 0xa6, 0xbc - }, - .rand = { - 0x23, 0x55, 0x3c, 0xbe, 0x96, 0x37, 0xa8, 0x9d, 0x21, 0x8a, 0xe6, - 0x4d, 0xae, 0x47, 0xbf, 0x35 - }, - .sqn = { 0xff, 0x9b, 0xb4, 0xd0, 0xb6, 0x07 }, - .amf = { 0xb9, 0xb9 }, - .op = { - 0xcd, 0xc2, 0x02, 0xd5, 0x12, 0x3e, 0x20, 0xf6, 0x2b, 0x6d, 0x67, - 0x6a, 0xc7, 0x2c, 0xb3, 0x18 - }, - .f1_exp = { 0x4a, 0x9f, 0xfa, 0xc3, 0x54, 0xdf, 0xaf, 0xb3 }, - .f1_star_exp = { 0x01, 0xcf, 0xaf, 0x9e, 0xc4, 0xe8, 0x71, 0xe9 }, - }, - { - .key = { - 0x03, 0x96, 0xeb, 0x31, 0x7b, 0x6d, 0x1c, 0x36, 0xf1, 0x9c, 0x1c, - 0x84, 0xcd, 0x6f, 0xfd, 0x16 - }, - .rand = { - 0xc0, 0x0d, 0x60, 0x31, 0x03, 0xdc, 0xee, 0x52, 0xc4, 0x47, 0x81, - 0x19, 0x49, 0x42, 0x02, 0xe8, - }, - .sqn = { 0xfd, 0x8e, 0xef, 0x40, 0xdf, 0x7d }, - .amf = { 0xaf, 0x17 }, - .op = { - 0xff, 0x53, 0xba, 0xde, 0x17, 0xdf, 0x5d, 0x4e, 0x79, 0x30, 0x73, - 0xce, 0x9d, 0x75, 0x79, 0xfa - }, - .f1_exp = { 0x5d, 0xf5, 0xb3, 0x18, 0x07, 0xe2, 0x58, 0xb0 }, - .f1_star_exp = { 0xa8, 0xc0, 0x16, 0xe5, 0x1e, 0xf4, 0xa3, 0x43 } - }, -}; - -void -doit (void) -{ - int i; - - for (i = 0; i < sizeof(test_set) / sizeof(test_set_t); i++) { - uint8_t res[8]; - - SetOPc(test_set[i].op); - f1(test_set[i].key, test_set[i].rand, test_set[i].sqn, test_set[i].amf, res); - - // printf("%02x%02x%02x%02x%02x%02x%02x%02x\n", res[0], res[1], res[2], - // res[3], res[4], res[5], res[6], res[7]); - if (memcmp(res, test_set[i].f1_exp, 8) != 0) { - fail("Test set %d (f1) : failed\n", i); - } else { - success("Test set %d (f1) : success\n", i); - } - - f1star(test_set[i].key, test_set[i].rand, test_set[i].sqn, test_set[i].amf, res); - - // printf("%02x%02x%02x%02x%02x%02x%02x%02x\n", res[0], res[1], res[2], - // res[3], res[4], res[5], res[6], res[7]); - if (memcmp(res, test_set[i].f1_star_exp, 8) != 0) { - fail("Test set %d (f1*): failed\n", i); - } else { - success("Test set %d (f1*): success\n", i); - } - } -} diff --git a/openair-cn/OPENAIRHSS/tests/test_security_f1.c b/openair-cn/OPENAIRHSS/tests/test_security_f1.c deleted file mode 100644 index 96527da7cf..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_security_f1.c +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -static -void do_f1_f1star(uint8_t *key, uint8_t *rand, uint8_t *sqn, - uint8_t *amf, uint8_t *op, uint8_t *f1_exp, - uint8_t *f1star_exp) -{ - uint8_t res[8]; - - SetOPc(op); - - f1(key, rand, sqn, amf, res); - - if (compare_buffer(res, 8, f1_exp, 8) != 0) { - fail("Fail: f1"); - } - - f1star(key, rand, sqn, amf, res); - - if (compare_buffer(res, 8, f1star_exp, 8) != 0) { - fail("Fail: f1*"); - } -} - -void -doit (void) -{ - /* Test suite taken from 3GPP TS 35.207 */ - - /* Test set 1 #4.3 */ - do_f1_f1star( - H("465b5ce8 b199b49f aa5f0a2e e238a6bc"), - H("23553cbe 9637a89d 218ae64d ae47bf35"), - H("ff9bb4d0 b607"), - H("b9b9"), - H("cdc202d5 123e20f6 2b6d676a c72cb318"), - H("4a9ffac3 54dfafb3"), - H("01cfaf9e c4e871e9")); - /* Test set 2 #4.4 */ - do_f1_f1star( - H("0396eb31 7b6d1c36 f19c1c84 cd6ffd16"), - H("c00d6031 03dcee52 c4478119 494202e8"), - H("fd8eef40 df7d"), - H("af17"), - H("ff53bade 17df5d4e 793073ce 9d7579fa"), - H("5df5b318 07e258b0"), - H("a8c016e5 1ef4a343")); - /* Test set 3 #4.5 */ - do_f1_f1star( - H("fec86ba6 eb707ed0 8905757b 1bb44b8f"), - H("9f7c8d02 1accf4db 213ccff0 c7f71a6a"), - H("9d027759 5ffc"), - H("725c"), - H("dbc59adc b6f9a0ef 735477b7 fadf8374"), - H("9cabc3e9 9baf7281"), - H("95814ba2 b3044324")); - /* Test set 4 #4.5 */ - do_f1_f1star( - H("9e5944ae a94b8116 5c82fbf9 f32db751"), - H("ce83dbc5 4ac0274a 157c17f8 0d017bd6"), - H("0b604a81 eca8"), - H("9e09"), - H("223014c5 806694c0 07ca1eee f57f004f"), - H("74a58220 cba84c49"), - H("ac2cc74a 96871837")); - /* Test set 5 #4.6 */ - do_f1_f1star( - H("4ab1deb0 5ca6ceb0 51fc98e7 7d026a84"), - H("74b0cd60 31a1c833 9b2b6ce2 b8c4a186"), - H("e880a1b5 80b6"), - H("9f07"), - H("2d16c5cd 1fdf6b22 383584e3 bef2a8d8"), - H("49e785dd 12626ef2"), - H("9e857903 36bb3fa2")); - /* Test set 6 #4.7 */ - do_f1_f1star( - H("6c38a116 ac280c45 4f59332e e35c8c4f"), - H("ee6466bc 96202c5a 557abbef f8babf63"), - H("414b9822 2181"), - H("4464"), - H("1ba00a1a 7c6700ac 8c3ff3e9 6ad08725"), - H("078adfb4 88241a57"), - H("80246b8d 0186bcf1")); -} diff --git a/openair-cn/OPENAIRHSS/tests/test_security_f2_f3_f5.c b/openair-cn/OPENAIRHSS/tests/test_security_f2_f3_f5.c deleted file mode 100644 index 339e5602c4..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_security_f2_f3_f5.c +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -static -void do_f2f3f5(uint8_t *key, uint8_t *rand, uint8_t *op, uint8_t *f2_exp, - uint8_t *f5_exp, uint8_t *f3_exp) -{ - uint8_t res_f2[8]; - uint8_t res_f5[6]; - uint8_t res_f3[16]; - uint8_t res_f4[16]; - - SetOPc(op); - - f2345(key, rand, res_f2, res_f3, res_f4, res_f5); - - if (compare_buffer(res_f2, 8, f2_exp, 8) != 0) { - fail("Fail: f2"); - } - - if (compare_buffer(res_f5, 6, f5_exp, 6) != 0) { - fail("Fail: f5"); - } - - if (compare_buffer(res_f3, 16, f3_exp, 16) != 0) { - fail("Fail: f3"); - } -} - -void -doit (void) -{ - /* Test set 1 #5.3 */ - do_f2f3f5(H("465b5ce8 b199b49f aa5f0a2e e238a6bc"), - H("23553cbe 9637a89d 218ae64d ae47bf35"), - H("cdc202d5 123e20f6 2b6d676a c72cb318"), - H("a54211d5 e3ba50bf"), H("aa689c64 8370"), - H("b40ba9a3 c58b2a05 bbf0d987 b21bf8cb")); - - /* Test set 2 #5.4 */ - do_f2f3f5(H("0396eb31 7b6d1c36 f19c1c84 cd6ffd16"), - H("c00d6031 03dcee52 c4478119 494202e8"), - H("ff53bade 17df5d4e 793073ce 9d7579fa"), - H("d3a628ed 988620f0"), H("c4778399 5f72"), - H("58c433ff 7a7082ac d424220f 2b67c556")); - - /* Test set 3 #5.5 */ - do_f2f3f5(H("fec86ba6 eb707ed0 8905757b 1bb44b8f"), - H("9f7c8d02 1accf4db 213ccff0 c7f71a6a"), - H("dbc59adc b6f9a0ef 735477b7 fadf8374"), - H("8011c48c 0c214ed2"), H("33484dc2 136b"), - H("5dbdbb29 54e8f3cd e665b046 179a5098")); - - /* Test set 4 #5.6 */ - do_f2f3f5(H("9e5944ae a94b8116 5c82fbf9 f32db751"), - H("ce83dbc5 4ac0274a 157c17f8 0d017bd6"), - H("223014c5 806694c0 07ca1eee f57f004f"), - H("f365cd68 3cd92e96"), H("f0b9c08a d02e"), - H("e203edb3 971574f5 a94b0d61 b816345d")); - - /* Test set 5 #5.7 */ - do_f2f3f5(H("4ab1deb0 5ca6ceb0 51fc98e7 7d026a84"), - H("74b0cd60 31a1c833 9b2b6ce2 b8c4a186"), - H("2d16c5cd 1fdf6b22 383584e3 bef2a8d8"), - H("5860fc1b ce351e7e"), H("31e11a60 9118"), - H("7657766b 373d1c21 38f307e3 de9242f9")); - - /* Test set 6 #5.8 */ - do_f2f3f5(H("6c38a116 ac280c45 4f59332e e35c8c4f"), - H("ee6466bc 96202c5a 557abbef f8babf63"), - H("1ba00a1a 7c6700ac 8c3ff3e9 6ad08725"), - H("16c8233f 05a0ac28"), H("45b0f69a b06c"), - H("3f8c7587 fe8e4b23 3af676ae de30ba3b")); -} diff --git a/openair-cn/OPENAIRHSS/tests/test_security_f4_f5star.c b/openair-cn/OPENAIRHSS/tests/test_security_f4_f5star.c deleted file mode 100644 index 26b43d7ffe..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_security_f4_f5star.c +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -static -void do_f4f5star(uint8_t *key, uint8_t *rand, uint8_t *op, uint8_t *f4_exp, - uint8_t *f5star_exp) -{ - uint8_t res_f2[8]; - uint8_t res_f5[6]; - uint8_t res_f3[16]; - uint8_t res_f4[16]; - uint8_t res_f5star[6]; - - SetOPc(op); - - f2345(key, rand, res_f2, res_f3, res_f4, res_f5); - - if (compare_buffer(res_f4, 16, f4_exp, 16) != 0) { - fail("Fail: f4"); - } - - f5star(key, rand, res_f5star); - - if (compare_buffer(res_f5star, 6, f5star_exp, 6) != 0) { - fail("Fail: f5star"); - } -} - -void -doit (void) -{ - /* Test set 1 #6.3 */ - do_f4f5star(H("465b5ce8 b199b49f aa5f0a2e e238a6bc"), - H("23553cbe 9637a89d 218ae64d ae47bf35"), - H("cdc202d5 123e20f6 2b6d676a c72cb318"), - H("f769bcd7 51044604 12767271 1c6d3441"), - H("451e8bec a43b")); - /* Test set 2 #6.4 */ - do_f4f5star(H("0396eb31 7b6d1c36 f19c1c84 cd6ffd16"), - H("c00d6031 03dcee52 c4478119 494202e8"), - H("ff53bade 17df5d4e 793073ce 9d7579fa"), - H("21a8c1f9 29702adb 3e738488 b9f5c5da"), - H("30f11970 61c1")); - /* Test set 3 #6.5 */ - do_f4f5star(H("fec86ba6 eb707ed0 8905757b 1bb44b8f"), - H("9f7c8d02 1accf4db 213ccff0 c7f71a6a"), - H("dbc59adc b6f9a0ef 735477b7 fadf8374"), - H("59a92d3b 476a0443 487055cf 88b2307b"), - H("deacdd84 8cc6")); - /* Test set 4 #6.5 */ - do_f4f5star(H("9e5944ae a94b8116 5c82fbf9 f32db751"), - H("ce83dbc5 4ac0274a 157c17f8 0d017bd6"), - H("223014c5 806694c0 07ca1eee f57f004f"), - H("0c4524ad eac041c4 dd830d20 854fc46b"), - H("6085a86c 6f63")); - /* Test set 5 #6.6 */ - do_f4f5star(H("4ab1deb0 5ca6ceb0 51fc98e7 7d026a84"), - H("74b0cd60 31a1c833 9b2b6ce2 b8c4a186"), - H("2d16c5cd 1fdf6b22 383584e3 bef2a8d8"), - H("1c42e960 d89b8fa9 9f2744e0 708ccb53"), - H("fe2555e5 4aa9")); - /* Test set 6 #6.7 */ - do_f4f5star(H("6c38a116 ac280c45 4f59332e e35c8c4f"), - H("ee6466bc 96202c5a 557abbef f8babf63"), - H("1ba00a1a 7c6700ac 8c3ff3e9 6ad08725"), - H("a7466cc1 e6b2a133 7d49d3b6 6e95d7b4"), - H("1f53cd2b 1113")); -} diff --git a/openair-cn/OPENAIRHSS/tests/test_security_kasme.c b/openair-cn/OPENAIRHSS/tests/test_security_kasme.c deleted file mode 100644 index 7ab68b67a0..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_security_kasme.c +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -#include "auc.h" - -static -void do_derive_kasme(uint8_t *sn_id, uint8_t *sqn, uint8_t *ak, - uint8_t *ck, uint8_t *ik, uint8_t *kasme_exp) -{ - uint8_t kasme[32]; - derive_kasme(ck, ik, sn_id, sqn, ak, kasme); - - if (compare_buffer(kasme, 32, kasme_exp, 32) != 0) { - fail("Fail: derive_kasme\n"); - } -} - -void -doit (void) -{ - /* 20834 -> 024830 SNid */ - do_derive_kasme(H("024830"), H("FD8EEF40DF7D"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("238E457E0F758BADBCA8D34BB2612C10" - "428D426757CB5553B2B184FA64BFC549")); - do_derive_kasme(H("02F843"), H("FD8EEF40DF7D"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("BD7A0903A7D0F68767EE2F5C90CB7D7D" - "835998D940AFDBF73173E63567C5B894")); - do_derive_kasme(H("21F354"), H("FD8EEF40DF7D"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("546A79BC6D1613A72A4D631EE0351D66" - "036B2A0C44A3831BE6D365E24F023013")); - do_derive_kasme(H("024830"), H("FF9BB4D0B607"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("564CB4D2007E4F293B67D9B29392A64A" - "DD4C776B133D895AF6499AA6882AAB62")); - do_derive_kasme(H("02F843"), H("FF9BB4D0B607"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("34865EB0DC9A6D788A905C0514529BF5" - "88485DA817FFBE92E9A9B4D033B8CC6F")); - do_derive_kasme(H("21F354"), H("FF9BB4D0B607"), H("AA689C648370"), - H("B40BA9A3C58B2A05BBF0D987B21BF8CB"), - H("F769BCD751044604127672711C6D3441"), - H("9EA141DA4B24CDEBC8F5FB3F61A05112" - "16681F121199B23EBCFACC75B358BE43")); -} diff --git a/openair-cn/OPENAIRHSS/tests/test_utils.c b/openair-cn/OPENAIRHSS/tests/test_utils.c deleted file mode 100644 index a44aeb5c69..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_utils.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (C) 2004-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#include "test_utils.h" - -int debug = 0; -int error_count = 0; -int break_on_error = 0; - -/* -1 means invalid */ -static const signed char hex_digits[0x100] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -unsigned -decode_hex_length(const char *h) -{ - const unsigned char *hex = (const unsigned char *) h; - unsigned count; - unsigned i; - - for (count = i = 0; hex[i]; i++) { - if (isspace(hex[i])) - continue; - - if (hex_digits[hex[i]] < 0) - abort(); - - count++; - } - - if (count % 2) - abort(); - - return count / 2; -} - -int -decode_hex(uint8_t *dst, const char *h) -{ - const unsigned char *hex = (const unsigned char *) h; - unsigned i = 0; - - for (;;) { - int high, low; - - while (*hex && isspace(*hex)) - hex++; - - if (!*hex) - return 1; - - high = hex_digits[*hex++]; - - if (high < 0) - return 0; - - while (*hex && isspace(*hex)) - hex++; - - if (!*hex) - return 0; - - low = hex_digits[*hex++]; - - if (low < 0) - return 0; - - dst[i++] = (high << 4) | low; - } -} - -uint8_t * -decode_hex_dup(const char *hex) -{ - uint8_t *p; - unsigned length = decode_hex_length(hex); - - p = malloc(length * sizeof(uint8_t)); - - if (decode_hex(p, hex)) - return p; - else { - free(p); - return NULL; - } -} - -void -fail (const char *format, ...) -{ - char str[1024]; - va_list arg_ptr; - - va_start (arg_ptr, format); - vsnprintf ( str, sizeof(str), format, arg_ptr); - va_end (arg_ptr); - fputs(str, stderr); - error_count++; - - if (break_on_error) - exit (1); -} - -void -success (const char *format, ...) -{ - char str[1024]; - va_list arg_ptr; - - va_start (arg_ptr, format); - vsnprintf ( str, sizeof(str), format, arg_ptr); - va_end (arg_ptr); - fputs(str, stderr); -} - -void -escapeprint (const char *str, size_t len) -{ - size_t i; - - printf (" (length %d bytes):\n\t", (int) len); - - for (i = 0; i < len; i++) { - if (((str[i] & 0xFF) >= 'A' && (str[i] & 0xFF) <= 'Z') || - ((str[i] & 0xFF) >= 'a' && (str[i] & 0xFF) <= 'z') || - ((str[i] & 0xFF) >= '0' && (str[i] & 0xFF) <= '9') - || (str[i] & 0xFF) == ' ' || (str[i] & 0xFF) == '.') - printf ("%c", (str[i] & 0xFF)); - else - printf ("\\x%02X", (str[i] & 0xFF)); - - if ((i + 1) % 16 == 0 && (i + 1) < len) - printf ("'\n\t'"); - } - - printf ("\n"); -} - -void -hexprint (const void *_str, size_t len) -{ - size_t i; - const char* str = _str; - - printf ("\t;; "); - - for (i = 0; i < len; i++) { - printf ("%02x ", (str[i] & 0xFF)); - - if ((i + 1) % 8 == 0) - printf (" "); - - if ((i + 1) % 16 == 0 && i + 1 < len) - printf ("\n\t;; "); - } - - printf ("\n"); -} - -void -binprint (const void *_str, size_t len) -{ - size_t i; - const char* str = _str; - - printf ("\t;; "); - - for (i = 0; i < len; i++) { - printf ("%d%d%d%d%d%d%d%d ", - (str[i] & 0xFF) & 0x80 ? 1 : 0, - (str[i] & 0xFF) & 0x40 ? 1 : 0, - (str[i] & 0xFF) & 0x20 ? 1 : 0, - (str[i] & 0xFF) & 0x10 ? 1 : 0, - (str[i] & 0xFF) & 0x08 ? 1 : 0, - (str[i] & 0xFF) & 0x04 ? 1 : 0, - (str[i] & 0xFF) & 0x02 ? 1 : 0, (str[i] & 0xFF) & 0x01 ? 1 : 0); - - if ((i + 1) % 3 == 0) - printf (" "); - - if ((i + 1) % 6 == 0 && i + 1 < len) - printf ("\n\t;; "); - } - - printf ("\n"); -} - -int -compare_buffer(uint8_t *buffer, uint32_t length_buffer, - uint8_t *pattern, uint32_t length_pattern) -{ - int i; - - if (length_buffer != length_pattern) { - printf("Length mismatch, expecting %d bytes, got %d bytes\n", length_pattern, - length_buffer); - hexprint(buffer, length_buffer); - return -1; - } - - for (i = 0; i < length_buffer; i++) { - if (pattern[i] != buffer[i]) { - printf("Expecting:\n"); - hexprint(pattern, length_pattern); - printf("Received:\n"); - hexprint(buffer, length_buffer); - printf("Mismatch fount in byte %d\nExpecting 0x%02x, got 0x%02x\n", - i, pattern[i], buffer[i]); - return -1; - } - } - - return 0; -} - -int -main (int argc, char *argv[]) -{ - do - if (strcmp (argv[argc - 1], "-v") == 0 || - strcmp (argv[argc - 1], "--verbose") == 0) - debug = 1; - else if (strcmp (argv[argc - 1], "-b") == 0 || - strcmp (argv[argc - 1], "--break-on-error") == 0) - break_on_error = 1; - else if (strcmp (argv[argc - 1], "-h") == 0 || - strcmp (argv[argc - 1], "-?") == 0 || - strcmp (argv[argc - 1], "--help") == 0) { - printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", - argv[0]); - return 1; - } - - while (argc-- > 1); - - doit (); - - if (debug || error_count > 0) - printf ("Self test `%s' finished with %d errors\n", argv[0], error_count); - - return error_count ? 1 : 0; -} diff --git a/openair-cn/OPENAIRHSS/tests/test_utils.h b/openair-cn/OPENAIRHSS/tests/test_utils.h deleted file mode 100644 index 19e6caab66..0000000000 --- a/openair-cn/OPENAIRHSS/tests/test_utils.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2004-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef UTILS_H -#define UTILS_H - -#include -#include - -#ifndef __attribute__ -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) -#define __attribute__(Spec) /* empty */ -#endif -#endif - -extern int debug; -extern int error_count; -extern int break_on_error; - -extern uint8_t * decode_hex_dup(const char *hex); -extern int decode_hex(uint8_t *dst, const char *h); -extern unsigned decode_hex_length(const char *h); - -#define H(x) decode_hex_dup(x) -#define HL(x) decode_hex_dup(x), decode_hex_length(x) - -extern void fail (const char *format, ...) -__attribute__ ((format (printf, 1, 2))); -extern void success (const char *format, ...) -__attribute__ ((format (printf, 1, 2))); - -extern void escapeprint (const char *str, size_t len); -extern void hexprint (const void *str, size_t len); -extern void binprint (const void *str, size_t len); - -extern int -compare_buffer(uint8_t *buffer, uint32_t length_buffer, - uint8_t *pattern, uint32_t length_pattern); - -/* This must be implemented elsewhere. */ -extern void doit (void); - -#endif /* UTILS_H */ diff --git a/openair-cn/OPENAIRHSS/tests/up_loc_test.c b/openair-cn/OPENAIRHSS/tests/up_loc_test.c deleted file mode 100644 index 83a56db738..0000000000 --- a/openair-cn/OPENAIRHSS/tests/up_loc_test.c +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "config.h" -#include "test_utils.h" -#include "test_fd.h" - -void -doit (void) -{ - s6a_fd_init(); - - sleep(1); - - s6a_fd_stop(); - - success ("freediameter start/stop ok\n"); -} diff --git a/openair-cn/OPENAIRHSS/utils/COPYING b/openair-cn/OPENAIRHSS/utils/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/OPENAIRHSS/utils/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/OPENAIRHSS/utils/Makefile.am b/openair-cn/OPENAIRHSS/utils/Makefile.am deleted file mode 100644 index 42c9a412ef..0000000000 --- a/openair-cn/OPENAIRHSS/utils/Makefile.am +++ /dev/null @@ -1,40 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ -AM_YFLAGS = -d -AM_LFLAGS = -o$(LEX_OUTPUT_ROOT).c - -BUILT_SOURCE = hss_parser.h - -noinst_LTLIBRARIES = libutils.la -libutils_la_LDFLAGS = -all-static -libutils_la_SOURCES = \ - hss_parser.y hss_scanner.l \ - hss_config.h hss_config.c \ - conversion.h conversion.c diff --git a/openair-cn/OPENAIRHSS/utils/conversion.c b/openair-cn/OPENAIRHSS/utils/conversion.c deleted file mode 100644 index 19347fc117..0000000000 --- a/openair-cn/OPENAIRHSS/utils/conversion.c +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "conversion.h" - -static const char hex_to_ascii_table[16] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', -}; - -static const signed char ascii_to_hex_table[0x100] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -static const signed char ascii_to_dec_table[0x100] = { - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; - -void hexa_to_ascii(uint8_t *from, char *to, size_t length) -{ - int i; - - for(i = 0; i < length; i++) { - uint8_t upper = (from[i] & 0xf0) >> 4; - uint8_t lower = from[i] & 0x0f; - to[2 * i] = hex_to_ascii_table[upper]; - to[2 * i + 1] = hex_to_ascii_table[lower]; - } -} - -int ascii_to_hex(uint8_t *dst, const char *h) -{ - const unsigned char *hex = (const unsigned char *) h; - unsigned i = 0; - - for (;;) { - int high, low; - - while (*hex && isspace(*hex)) { - hex++; - } - - if (!*hex) { - return 1; - } - - high = ascii_to_hex_table[*hex++]; - - if (high < 0) { - return 0; - } - - while (*hex && isspace(*hex)) { - hex++; - } - - if (!*hex) { - return 0; - } - - low = ascii_to_hex_table[*hex++]; - - if (low < 0) { - return 0; - } - - dst[i++] = (high << 4) | low; - } -} - -int bcd_to_hex(uint8_t *dst, const char *h, int h_length) -{ - const unsigned char *hex = (const unsigned char *) h; - unsigned i = 0; - - for (i = 0; i < h_length; i++) { - int value = ascii_to_dec_table[*hex++]; - - if (value < 0) - return -1; - - dst[i] = value; - } - - return 0; -} diff --git a/openair-cn/OPENAIRHSS/utils/conversion.h b/openair-cn/OPENAIRHSS/utils/conversion.h deleted file mode 100644 index c587020c98..0000000000 --- a/openair-cn/OPENAIRHSS/utils/conversion.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef CONVERSION_H_ -#define CONVERSION_H_ - -void hexa_to_ascii(uint8_t *from, char *to, size_t length); -int ascii_to_hex(uint8_t *dst, const char *h); -int bcd_to_hex(uint8_t *dst, const char *h, int h_length); - -#endif /* CONVERSION_H_ */ diff --git a/openair-cn/OPENAIRHSS/utils/hss_config.c b/openair-cn/OPENAIRHSS/utils/hss_config.c deleted file mode 100644 index 415504fc75..0000000000 --- a/openair-cn/OPENAIRHSS/utils/hss_config.c +++ /dev/null @@ -1,260 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file hss_config.c - * \brief Base configuration for the HSS. Parse command line and configuration file - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "hss_config.h" -#include "hss_parser.h" - - -#ifndef PACKAGE_NAME -#define PACKAGE_NAME "OPENAIR-HSS" -#endif -#ifndef PACKAGE_VERSION -#define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL" -#endif -#ifndef PACKAGE_BUGREPORT -#define PACKAGE_BUGREPORT "openair4G-devel@eurecom.fr" -#endif - -// LG TODO fd_g_debug_lvl -int fd_g_debug_lvl = 1; - -/* YACC forward declarations */ -extern int yyparse (struct hss_config_s *hss_config_p); -static int config_parse_command_line(int argc, char *argv[], - hss_config_t *hss_config_p); -static int config_parse_file(hss_config_t *hss_config_p); -static void display_banner(void); -static void config_display(hss_config_t *hss_config_p); - -static struct option long_options[] = { - { "config", 1, 0, 'c' }, - { "help", 0, 0, 'h' }, - { "version", 0, 0, 'v' }, - { 0, 0, 0, 0 }, -}; - -static const char option_string[] = "c:vh"; - -int config_init(int argc, char *argv[], hss_config_t *hss_config_p) -{ - int ret = 0; - - if (hss_config_p == NULL) { - return EINVAL; - } - - hss_config_p->valid_op = 0; - - if ((ret = config_parse_command_line(argc, argv, hss_config_p)) != 0) { - return ret; - } - - display_banner(); - - if ((ret = config_parse_file(hss_config_p)) != 0) { - /* Parsing of the file failed. -> abort */ - abort(); - } - if (hss_config_p->random) { - if (strcasecmp(hss_config_p->random, "false") == 0) { - hss_config_p->random_bool = 0; - } else if (strcasecmp(hss_config_p->random, "true") == 0) { - hss_config_p->random_bool = 1; - } else { - fprintf(stderr, - "Error in configuration file: random: %s (allowed values {true,false})\n", - hss_config_p->random); - abort(); - } - } else { - hss_config_p->random = "true"; - hss_config_p->random_bool = 1; - fprintf(stderr, - "Default values for random: %s (allowed values {true,false})\n", - hss_config_p->random); - } - - // post processing for op key - if (hss_config_p->operator_key) { - if (strlen(hss_config_p->operator_key) == 32) { - ret = sscanf(hss_config_p->operator_key, - "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - (unsigned int*)&hss_config_p->operator_key_bin[0],(unsigned int*)&hss_config_p->operator_key_bin[1], - (unsigned int*)&hss_config_p->operator_key_bin[2],(unsigned int*)&hss_config_p->operator_key_bin[3], - (unsigned int*)&hss_config_p->operator_key_bin[4],(unsigned int*)&hss_config_p->operator_key_bin[5], - (unsigned int*)&hss_config_p->operator_key_bin[6],(unsigned int*)&hss_config_p->operator_key_bin[7], - (unsigned int*)&hss_config_p->operator_key_bin[8],(unsigned int*)&hss_config_p->operator_key_bin[9], - (unsigned int*)&hss_config_p->operator_key_bin[10],(unsigned int*)&hss_config_p->operator_key_bin[11], - (unsigned int*)&hss_config_p->operator_key_bin[12],(unsigned int*)&hss_config_p->operator_key_bin[13], - (unsigned int*)&hss_config_p->operator_key_bin[14],(unsigned int*)&hss_config_p->operator_key_bin[15]); - - if (ret != 16) { - fprintf(stderr, - "Error in configuration file: operator key: %s\n", - hss_config_p->operator_key); - abort(); - } - hss_config_p->valid_op = 1; - } - } - config_display(hss_config_p); - - - return 0; -} - -static void display_banner(void) -{ - fprintf(stdout, "==== EURECOM %s v%s ====\n", PACKAGE_NAME, PACKAGE_VERSION); - fprintf(stdout, "Please report any bug to: %s\n\n", PACKAGE_BUGREPORT); -} - -static void usage(void) -{ - display_banner(); - fprintf(stdout, "Usage: openair_hss [options]\n\n"); - fprintf(stdout, "Available options:\n"); - fprintf(stdout, "\t--help\n\t-h\n"); - fprintf(stdout, "\t\tPrint this help and return\n\n"); - fprintf(stdout, "\t--config=\n\t-c\n"); - fprintf(stdout, "\t\tSet the configuration file for hss\n"); - fprintf(stdout, "\t\tSee template in conf dir\n\n"); - fprintf(stdout, "\t--version\n\t-v\n"); - fprintf(stdout, "\t\tPrint %s version and return\n", PACKAGE_NAME); -} - -static void config_display(hss_config_t *hss_config_p) -{ - fprintf(stdout, "Configuration\n"); - fprintf(stdout, "* Global:\n"); - fprintf(stdout, "\t- File .............: %s\n", hss_config_p->config); - fprintf(stdout, "* MYSQL:\n"); - fprintf(stdout, "\t- Server ...........: %s\n", hss_config_p->mysql_server); - fprintf(stdout, "\t- Database .........: %s\n", hss_config_p->mysql_database); - fprintf(stdout, "\t- User .............: %s\n", hss_config_p->mysql_user); - fprintf(stdout, "\t- Password .........: %s\n", - (hss_config_p->mysql_password == NULL) ? "None" : "*****"); - fprintf(stdout, "* FreeDiameter:\n"); - fprintf(stdout, "\t- Conf file ........: %s\n", - hss_config_p->freediameter_config); - fprintf(stdout, "* Security:\n"); - fprintf(stdout, "\t- Operator key......: %s\n", - hss_config_p->operator_key); - fprintf(stdout, "\t- Random ......: %s\n", - hss_config_p->random); -} - -static int config_parse_command_line(int argc, char *argv[], - hss_config_t *hss_config_p) -{ - int c; - int option_index = 0; - - while ((c = getopt_long (argc, argv, option_string, long_options, - &option_index)) != -1) { - switch(c) { - case 'c': { - hss_config_p->config = strdup(optarg); - } - break; - - case 'v': { - /* We display version and return immediately */ - display_banner(); - exit(0); - } - break; - - default: - case 'h': { - usage(); - exit(0); - } - break; - } - } - - return 0; -} - -static int config_parse_file(hss_config_t *hss_config_p) -{ - extern FILE *yyin; - int ret = -1; - - if (hss_config_p == NULL) { - return ret; - } - - if (hss_config_p->config == NULL) { - return ret; - } - - printf("Parsing configuration file: %s\n", hss_config_p->config); - - yyin = fopen(hss_config_p->config, "r"); - - if (!yyin) { - /* We failed to open the file */ - fprintf(stderr, "Unable to open the configuration file: %s (%d:%s)\n", - hss_config_p->config, errno, strerror(errno)); - return errno; - } - - /* Call the yacc parser */ - ret = yyparse(hss_config_p); - - /* Close the file descriptor */ - if (fclose(yyin) != 0) { - fprintf(stderr, "Unable to close the configuration file: %s (%d:%s)\n", - hss_config_p->config, errno, strerror(errno)); - return errno; - } - - return ret; -} diff --git a/openair-cn/OPENAIRHSS/utils/hss_config.h b/openair-cn/OPENAIRHSS/utils/hss_config.h deleted file mode 100644 index 6f3425c6d0..0000000000 --- a/openair-cn/OPENAIRHSS/utils/hss_config.h +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef HSS_CONFIG_H_ -#define HSS_CONFIG_H_ - -typedef struct hss_config_s { - char *mysql_server; - char *mysql_user; - char *mysql_password; - char *mysql_database; - - - char *operator_key; - unsigned char operator_key_bin[16]; - int valid_op; - - /* The freediameter configuration file */ - char *freediameter_config; - - /* THe HSS global configuration file */ - char *config; - - char *random; - char random_bool; -} hss_config_t; - -int config_init(int argc, char *argv[], hss_config_t *hss_config_p); - -#endif /* HSS_CONFIG_H_ */ diff --git a/openair-cn/OPENAIRHSS/utils/hss_parser.y b/openair-cn/OPENAIRHSS/utils/hss_parser.y deleted file mode 100644 index 5fb532dcdf..0000000000 --- a/openair-cn/OPENAIRHSS/utils/hss_parser.y +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/* For development only : */ -%debug -%error-verbose - -%parse-param {struct hss_config_s *hss_config_p} - -/* Keep track of location */ -%locations -%defines -%pure-parser - -%{ -#include -#include - -#include "hss_config.h" -#include "hss_parser.h" - -void yyerror (YYLTYPE *llocp, struct hss_config_s *hss_config_p, const char *s); - -extern int yywrap(); -extern int yylex(); - -/* The Lex parser prototype */ -int fddlex(YYSTYPE *lvalp, YYLTYPE *llocp); -%} - -/* Values returned by lex for token */ -%union { - char *string; /* The string is allocated by strdup in lex.*/ - int integer; /* Store integer values */ -} - -%token QSTRING -%token INTEGER - -%token LEX_ERROR -%token FDCONF -%token MYSQL_USER -%token MYSQL_SERVER -%token MYSQL_PASS -%token MYSQL_DB -%token OPERATOR_KEY -%token RANDOM - -%% -conffile: /* Empty is OK -- for simplicity here, we reject in daemon later */ - | conffile mysql_db - | conffile mysql_server - | conffile mysql_user - | conffile mysql_pass - | conffile operator_key - | conffile random - | conffile fdconf - | conffile errors - { - yyerror(&yylloc, hss_config_p, "An error occurred while parsing the configuration file"); - return EINVAL; - } - ; - -mysql_db: MYSQL_DB '=' QSTRING ';' - { - hss_config_p->mysql_database = $3; - } - ; - -mysql_pass: MYSQL_PASS '=' QSTRING ';' - { - hss_config_p->mysql_password = $3; - } - ; - -mysql_user: MYSQL_USER '=' QSTRING ';' - { - hss_config_p->mysql_user = $3; - } - ; - -mysql_server: MYSQL_SERVER '=' QSTRING ';' - { - hss_config_p->mysql_server = $3; - } - ; - -operator_key: OPERATOR_KEY '=' QSTRING ';' - { - hss_config_p->operator_key = $3; - } - ; - -random: RANDOM '=' QSTRING ';' - { - hss_config_p->random = $3; - } - ; - -fdconf: FDCONF '=' QSTRING ';' - { - hss_config_p->freediameter_config = $3; - } - ; - - /* Lexical or syntax error */ -errors: LEX_ERROR - | error - ; -%% - -void yyerror(YYLTYPE *llocp, struct hss_config_s *hss_config_p, const char *str) -{ - fprintf(stderr, "Error in %s ( on line %i column %i -> line %i column %i) : %s\n", - hss_config_p->freediameter_config, llocp->first_line, llocp->first_column, - llocp->last_line, llocp->last_column, str); -} diff --git a/openair-cn/OPENAIRHSS/utils/hss_scanner.l b/openair-cn/OPENAIRHSS/utils/hss_scanner.l deleted file mode 100644 index e9c43c9a2b..0000000000 --- a/openair-cn/OPENAIRHSS/utils/hss_scanner.l +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/* Lex configuration parser. - * - * This file defines the token for parsing the configuration file - * - * Note : This module is NOT thread-safe. All processing must be done from one thread only. - */ -%{ -#include - -#include "hss_config.h" -/* Include yacc tokens definitions */ -#include "hss_parser.h" - -/* Update the column information */ -#ifdef DEBUG_LEX -#define YY_USER_ACTION { \ - yylloc->first_column = yylloc->last_column + 1; \ - yylloc->last_column = yylloc->first_column + yyleng - 1; \ - TRACE_DEBUG(FULL, \ - "(%d:%d-%d:%d) matched rule %d, length=%d, txt='%s'\n", \ - yylloc->first_line, yylloc->first_column, \ - yylloc->last_line, yylloc->last_column, \ - yy_act, yyleng, yytext); \ -} -#else /* DEBUG_LEX */ -#define YY_USER_ACTION { \ - yylloc->first_column = yylloc->last_column + 1; \ - yylloc->last_column = yylloc->first_column + yyleng - 1; \ -} -#endif - -#define YY_NO_INPUT -%} - -%option bison-bridge -%option bison-locations -%option noyywrap -%option nounput - -/* Quoted string. Multilines do not match. */ -qstring \"[^\"\n]*\" - -%% - - /* List of patterns and actions */ - -<*>\n { - /* Update the line count */ - yylloc->first_line++; - yylloc->last_line++; - yylloc->last_column=0; -} - -<*>([[:space:]]{-}[\n])+ ; /* Eat all spaces, not new lines */ -<*>#.*$ ; /* Eat all comments */ - -{qstring} { - /* First copy the string without the quotes for use in the yacc parser */ - if ((yylval->string = strdup(yytext+1)) == NULL) { /* This allocates one useless tail char but... it's easier :D */ - return LEX_ERROR;/* on error, trig an error in yacc parser */ - } - yylval->string[yyleng-2] = '\0'; - - /* the yacc parser will check the string is valid */ - return QSTRING; -} - -[[:digit:]]+ { - /* Convert this to an integer value */ - int ret = sscanf(yytext, "%i", &yylval->integer); - if (ret != 1) { - /* No matching: an error occurred */ - fprintf(stderr, "Unable to convert the value '%s' to a valid number: %s\n", - yytext, strerror(errno)); - return LEX_ERROR; /* trig an error in yacc parser */ - /* Maybe we could REJECT instead of failing here? */ - } - return INTEGER; -} - - /* Full words tokens (keywords) */ -(?i:"FD_conf") { return FDCONF; } -(?i:"MYSQL_server") { return MYSQL_SERVER; } -(?i:"MYSQL_user") { return MYSQL_USER; } -(?i:"MYSQL_pass") { return MYSQL_PASS; } -(?i:"MYSQL_db") { return MYSQL_DB; } -(?i:"OPERATOR_key") { return OPERATOR_KEY; } -(?i:"RANDOM") { return RANDOM; } - - /* Valid single characters for yyparse */ -<*>[=,:;{}] { return yytext[0]; } - -<*>[[:alnum:]]+ | /* This rule is only useful to print a complete token in error messages */ - /* Unrecognized character */ -<*>. { - fprintf(stderr, "Unrecognized text on line %d col %d: '%s'.\n", - yylloc->first_line, yylloc->first_column, yytext); - return LEX_ERROR; -} - -%% diff --git a/openair-cn/OPENAIRHSS/utils/queue.h b/openair-cn/OPENAIRHSS/utils/queue.h deleted file mode 100644 index 47f638b57c..0000000000 --- a/openair-cn/OPENAIRHSS/utils/queue.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name of the University 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 BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. - * - * @(#)queue.h 8.5 (Berkeley) 8/20/94 - */ - -#ifndef _SYS_QUEUE_H_ -#define _SYS_QUEUE_H_ - -/* - * This file defines five types of data structures: singly-linked lists, - * lists, simple queues, tail queues, and circular queues. - * - * A singly-linked list is headed by a single forward pointer. The - * elements are singly linked for minimum space and pointer manipulation - * overhead at the expense of O(n) removal for arbitrary elements. New - * elements can be added to the list after an existing element or at the - * head of the list. Elements being removed from the head of the list - * should use the explicit macro for this purpose for optimum - * efficiency. A singly-linked list may only be traversed in the forward - * direction. Singly-linked lists are ideal for applications with large - * datasets and few or no removals or for implementing a LIFO queue. - * - * A list is headed by a single forward pointer (or an array of forward - * pointers for a hash table header). The elements are doubly linked - * so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before - * or after an existing element or at the head of the list. A list - * may only be traversed in the forward direction. - * - * A simple queue is headed by a pair of pointers, one the head of the - * list and the other to the tail of the list. The elements are singly - * linked to save space, so elements can only be removed from the - * head of the list. New elements can be added to the list after - * an existing element, at the head of the list, or at the end of the - * list. A simple queue may only be traversed in the forward direction. - * - * A tail queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or - * after an existing element, at the head of the list, or at the end of - * the list. A tail queue may be traversed in either direction. - * - * A circle queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or after - * an existing element, at the head of the list, or at the end of the list. - * A circle queue may be traversed in either direction, but has a more - * complex end of list detection. - * - * For details on the use of these macros, see the queue(3) manual page. - * SLIST LIST STAILQ TAILQ CIRCLEQ - * _HEAD + + + + + - * _HEAD_INITIALIZER + + + + + - * _ENTRY + + + + + - * _INIT + + + + + - * _EMPTY + + + + + - * _FIRST + + + + + - * _NEXT + + + + + - * _PREV - - - + + - * _LAST - - + + + - * _FOREACH + + + + + - * _FOREACH_REVERSE - - - + + - * _INSERT_HEAD + + + + + - * _INSERT_BEFORE - + - + + - * _INSERT_AFTER + + + + + - * _INSERT_TAIL - - + + + - * _REMOVE_HEAD + - + - - - * _REMOVE + + + + + - */ - -/* - * List definitions. - */ -#define LIST_HEAD(name, type) \ - struct name { \ - struct type *lh_first; /* first element */ \ - } - -#define LIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define LIST_ENTRY(type) \ - struct { \ - struct type *le_next; /* next element */ \ - struct type **le_prev; /* address of previous next element */ \ - } - -/* - * List functions. - */ -#define LIST_INIT(head) do { \ - (head)->lh_first = NULL; \ - } while (/*CONSTCOND*/0) - -#define LIST_INSERT_AFTER(listelm, elm, field) do { \ - if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ - (listelm)->field.le_next->field.le_prev = \ - &(elm)->field.le_next; \ - (listelm)->field.le_next = (elm); \ - (elm)->field.le_prev = &(listelm)->field.le_next; \ - } while (/*CONSTCOND*/0) - -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.le_prev = (listelm)->field.le_prev; \ - (elm)->field.le_next = (listelm); \ - *(listelm)->field.le_prev = (elm); \ - (listelm)->field.le_prev = &(elm)->field.le_next; \ - } while (/*CONSTCOND*/0) - -#define LIST_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.le_next = (head)->lh_first) != NULL) \ - (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ - (head)->lh_first = (elm); \ - (elm)->field.le_prev = &(head)->lh_first; \ - } while (/*CONSTCOND*/0) - -#define LIST_REMOVE(elm, field) do { \ - if ((elm)->field.le_next != NULL) \ - (elm)->field.le_next->field.le_prev = \ - (elm)->field.le_prev; \ - *(elm)->field.le_prev = (elm)->field.le_next; \ - } while (/*CONSTCOND*/0) - -#define LIST_FOREACH(var, head, field) \ - for ((var) = ((head)->lh_first); \ - (var); \ - (var) = ((var)->field.le_next)) - -/* - * List access methods. - */ -#define LIST_EMPTY(head) ((head)->lh_first == NULL) -#define LIST_FIRST(head) ((head)->lh_first) -#define LIST_NEXT(elm, field) ((elm)->field.le_next) - - -/* - * Singly-linked List definitions. - */ -#define SLIST_HEAD(name, type) \ - struct name { \ - struct type *slh_first; /* first element */ \ - } - -#define SLIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define SLIST_ENTRY(type) \ - struct { \ - struct type *sle_next; /* next element */ \ - } - -/* - * Singly-linked List functions. - */ -#define SLIST_INIT(head) do { \ - (head)->slh_first = NULL; \ - } while (/*CONSTCOND*/0) - -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ - (elm)->field.sle_next = (slistelm)->field.sle_next; \ - (slistelm)->field.sle_next = (elm); \ - } while (/*CONSTCOND*/0) - -#define SLIST_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.sle_next = (head)->slh_first; \ - (head)->slh_first = (elm); \ - } while (/*CONSTCOND*/0) - -#define SLIST_REMOVE_HEAD(head, field) do { \ - (head)->slh_first = (head)->slh_first->field.sle_next; \ - } while (/*CONSTCOND*/0) - -#define SLIST_REMOVE(head, elm, type, field) do { \ - if ((head)->slh_first == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ - } \ - else { \ - struct type *curelm = (head)->slh_first; \ - while(curelm->field.sle_next != (elm)) \ - curelm = curelm->field.sle_next; \ - curelm->field.sle_next = \ - curelm->field.sle_next->field.sle_next; \ - } \ - } while (/*CONSTCOND*/0) - -#define SLIST_FOREACH(var, head, field) \ - for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next) - -/* - * Singly-linked List access methods. - */ -#define SLIST_EMPTY(head) ((head)->slh_first == NULL) -#define SLIST_FIRST(head) ((head)->slh_first) -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) - - -/* - * Singly-linked Tail queue declarations. - */ -#define STAILQ_HEAD(name, type) \ - struct name { \ - struct type *stqh_first; /* first element */ \ - struct type **stqh_last; /* addr of last next element */ \ - } - -#define STAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).stqh_first } - -#define STAILQ_ENTRY(type) \ - struct { \ - struct type *stqe_next; /* next element */ \ - } - -/* - * Singly-linked Tail queue functions. - */ -#define STAILQ_INIT(head) do { \ - (head)->stqh_first = NULL; \ - (head)->stqh_last = &(head)->stqh_first; \ - } while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (head)->stqh_first = (elm); \ - } while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.stqe_next = NULL; \ - *(head)->stqh_last = (elm); \ - (head)->stqh_last = &(elm)->field.stqe_next; \ - } while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (listelm)->field.stqe_next = (elm); \ - } while (/*CONSTCOND*/0) - -#define STAILQ_REMOVE_HEAD(head, field) do { \ - if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \ - (head)->stqh_last = &(head)->stqh_first; \ - } while (/*CONSTCOND*/0) - -#define STAILQ_REMOVE(head, elm, type, field) do { \ - if ((head)->stqh_first == (elm)) { \ - STAILQ_REMOVE_HEAD((head), field); \ - } else { \ - struct type *curelm = (head)->stqh_first; \ - while (curelm->field.stqe_next != (elm)) \ - curelm = curelm->field.stqe_next; \ - if ((curelm->field.stqe_next = \ - curelm->field.stqe_next->field.stqe_next) == NULL) \ - (head)->stqh_last = &(curelm)->field.stqe_next; \ - } \ - } while (/*CONSTCOND*/0) - -#define STAILQ_FOREACH(var, head, field) \ - for ((var) = ((head)->stqh_first); \ - (var); \ - (var) = ((var)->field.stqe_next)) - -#define STAILQ_CONCAT(head1, head2) do { \ - if (!STAILQ_EMPTY((head2))) { \ - *(head1)->stqh_last = (head2)->stqh_first; \ - (head1)->stqh_last = (head2)->stqh_last; \ - STAILQ_INIT((head2)); \ - } \ - } while (/*CONSTCOND*/0) - -/* - * Singly-linked Tail queue access methods. - */ -#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) -#define STAILQ_FIRST(head) ((head)->stqh_first) -#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) - - -/* - * Simple queue definitions. - */ -#define SIMPLEQ_HEAD(name, type) \ - struct name { \ - struct type *sqh_first; /* first element */ \ - struct type **sqh_last; /* addr of last next element */ \ - } - -#define SIMPLEQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).sqh_first } - -#define SIMPLEQ_ENTRY(type) \ - struct { \ - struct type *sqe_next; /* next element */ \ - } - -/* - * Simple queue functions. - */ -#define SIMPLEQ_INIT(head) do { \ - (head)->sqh_first = NULL; \ - (head)->sqh_last = &(head)->sqh_first; \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (head)->sqh_first = (elm); \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.sqe_next = NULL; \ - *(head)->sqh_last = (elm); \ - (head)->sqh_last = &(elm)->field.sqe_next; \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (listelm)->field.sqe_next = (elm); \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ - if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ - (head)->sqh_last = &(head)->sqh_first; \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_REMOVE(head, elm, type, field) do { \ - if ((head)->sqh_first == (elm)) { \ - SIMPLEQ_REMOVE_HEAD((head), field); \ - } else { \ - struct type *curelm = (head)->sqh_first; \ - while (curelm->field.sqe_next != (elm)) \ - curelm = curelm->field.sqe_next; \ - if ((curelm->field.sqe_next = \ - curelm->field.sqe_next->field.sqe_next) == NULL) \ - (head)->sqh_last = &(curelm)->field.sqe_next; \ - } \ - } while (/*CONSTCOND*/0) - -#define SIMPLEQ_FOREACH(var, head, field) \ - for ((var) = ((head)->sqh_first); \ - (var); \ - (var) = ((var)->field.sqe_next)) - -/* - * Simple queue access methods. - */ -#define SIMPLEQ_EMPTY(head) ((head)->sqh_first == NULL) -#define SIMPLEQ_FIRST(head) ((head)->sqh_first) -#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) - - -/* - * Tail queue definitions. - */ -#define _TAILQ_HEAD(name, type, qual) \ - struct name { \ - qual type *tqh_first; /* first element */ \ - qual type *qual *tqh_last; /* addr of last next element */ \ - } -#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,) - -#define TAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).tqh_first } - -#define _TAILQ_ENTRY(type, qual) \ - struct { \ - qual type *tqe_next; /* next element */ \ - qual type *qual *tqe_prev; /* address of previous next element */\ - } -#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,) - -/* - * Tail queue functions. - */ -#define TAILQ_INIT(head) do { \ - (head)->tqh_first = NULL; \ - (head)->tqh_last = &(head)->tqh_first; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ - (head)->tqh_first->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (head)->tqh_first = (elm); \ - (elm)->field.tqe_prev = &(head)->tqh_first; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.tqe_next = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ - (elm)->field.tqe_next->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (listelm)->field.tqe_next = (elm); \ - (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - (elm)->field.tqe_next = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_REMOVE(head, elm, field) do { \ - if (((elm)->field.tqe_next) != NULL) \ - (elm)->field.tqe_next->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ - } while (/*CONSTCOND*/0) - -#define TAILQ_FOREACH(var, head, field) \ - for ((var) = ((head)->tqh_first); \ - (var); \ - (var) = ((var)->field.tqe_next)) - -#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ - (var); \ - (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) - -#define TAILQ_CONCAT(head1, head2, field) do { \ - if (!TAILQ_EMPTY(head2)) { \ - *(head1)->tqh_last = (head2)->tqh_first; \ - (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ - (head1)->tqh_last = (head2)->tqh_last; \ - TAILQ_INIT((head2)); \ - } \ - } while (/*CONSTCOND*/0) - -/* - * Tail queue access methods. - */ -#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) -#define TAILQ_FIRST(head) ((head)->tqh_first) -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) - -#define TAILQ_LAST(head, headname) \ - (*(((struct headname *)((head)->tqh_last))->tqh_last)) -#define TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) - - -/* - * Circular queue definitions. - */ -#define CIRCLEQ_HEAD(name, type) \ - struct name { \ - struct type *cqh_first; /* first element */ \ - struct type *cqh_last; /* last element */ \ - } - -#define CIRCLEQ_HEAD_INITIALIZER(head) \ - { (void *)&head, (void *)&head } - -#define CIRCLEQ_ENTRY(type) \ - struct { \ - struct type *cqe_next; /* next element */ \ - struct type *cqe_prev; /* previous element */ \ - } - -/* - * Circular queue functions. - */ -#define CIRCLEQ_INIT(head) do { \ - (head)->cqh_first = (void *)(head); \ - (head)->cqh_last = (void *)(head); \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm)->field.cqe_next; \ - (elm)->field.cqe_prev = (listelm); \ - if ((listelm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (listelm)->field.cqe_next->field.cqe_prev = (elm); \ - (listelm)->field.cqe_next = (elm); \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm); \ - (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ - if ((listelm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (listelm)->field.cqe_prev->field.cqe_next = (elm); \ - (listelm)->field.cqe_prev = (elm); \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = (void *)(head); \ - if ((head)->cqh_last == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (head)->cqh_first->field.cqe_prev = (elm); \ - (head)->cqh_first = (elm); \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.cqe_next = (void *)(head); \ - (elm)->field.cqe_prev = (head)->cqh_last; \ - if ((head)->cqh_first == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (head)->cqh_last->field.cqe_next = (elm); \ - (head)->cqh_last = (elm); \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_REMOVE(head, elm, field) do { \ - if ((elm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm)->field.cqe_prev; \ - else \ - (elm)->field.cqe_next->field.cqe_prev = \ - (elm)->field.cqe_prev; \ - if ((elm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm)->field.cqe_next; \ - else \ - (elm)->field.cqe_prev->field.cqe_next = \ - (elm)->field.cqe_next; \ - } while (/*CONSTCOND*/0) - -#define CIRCLEQ_FOREACH(var, head, field) \ - for ((var) = ((head)->cqh_first); \ - (var) != (const void *)(head); \ - (var) = ((var)->field.cqe_next)) - -#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ - for ((var) = ((head)->cqh_last); \ - (var) != (const void *)(head); \ - (var) = ((var)->field.cqe_prev)) - -/* - * Circular queue access methods. - */ -#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) -#define CIRCLEQ_FIRST(head) ((head)->cqh_first) -#define CIRCLEQ_LAST(head) ((head)->cqh_last) -#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) -#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) - -#define CIRCLEQ_LOOP_NEXT(head, elm, field) \ - (((elm)->field.cqe_next == (void *)(head)) \ - ? ((head)->cqh_first) \ - : (elm->field.cqe_next)) -#define CIRCLEQ_LOOP_PREV(head, elm, field) \ - (((elm)->field.cqe_prev == (void *)(head)) \ - ? ((head)->cqh_last) \ - : (elm->field.cqe_prev)) - -#endif /* sys/queue.h */ diff --git a/openair-cn/README b/openair-cn/README deleted file mode 100644 index 11ae2e631e..0000000000 --- a/openair-cn/README +++ /dev/null @@ -1,128 +0,0 @@ -=============================================================================== -***************************** OAISIM_MME v0.3 ********************************* -=============================================================================== - -MME + P-GW + S-GW implementation of 3GPP standard. - -|-----| |------| -| MME | ----- | eNBs | -|-----| |------| - -Controle plane: - - eNB MME HSS - - |----------------------------| - | MME Application layer | - |----------------------------| - |------------| |-------------| |-------------| |--------------| - | NAS | | AUC |--| Mysql | --- | Database | - |------------| |-------------| |-------------| |--------------| -|------------| |------------| |------------| |--------------| |------------------------------| -| RRC | - | S1AP layer | ------ | S1AP layer | | S6A/Diameter | ------ | S6A/Diameter | -|------------| |------------| |------------| |--------------| |------------------------------| - |------------| |------------------------------| |------------------------------| - | SCTP layer | ------ | SCTP layer | ------ | SCTP layer | - |------------| |------------------------------| |------------------------------| - - -Non-UE associated control plane goes directly from S1AP to MME application layer. - -User plane: - - eNB MME - -|------------| |------------| -| PDCP | | MAL | -|------------| |------------| -|------------| |------------| -| S1-U | ------ | S1-U | -|------------| |------------| -|------------| |------------| -| GTPV1-U | ------ | GTPV1-U | -|------------| |------------| -|------------| |------------| -| UDP layer | ------ | UDP layer | -|------------| |------------| - -Current development: - -- NAS layer: under development -- S1AP layer: compliant with 3GPP TS36.413-8a0 and TS36.413-980 and TS35.413-a50 -- SCTP layer: SEQ_PACKET socket types - -For now the MME is able to register new eNBs on SCTP layer, -and handles S1 Setup request, Initial UE message, UplinkNASTransport on -S1AP layer. - -The MME needs some libraries and tools: -- libsctp-dev (SCTP support) -- libpthread-dev -- asn1c utility (patched with Aligned PER support, see README in -S1AP/MESSAGES/ASN1) -- flex -- bison -To install the dependencies: -sudo apt-get install libsctp-dev libpthread-dev flex bison g++ gcc make -y - -A script is present in S6A/freediameter to install required packages for -S6A interface over diameter. Run it as a sudoer. - -install_openvswitch1.9.0.bash -cd S6A/freediameter/README - -Compilations steps for use with oaisim 4G emulation environment: -./autogen.sh or autoreconf -i --force --install -mkdir objs && cd objs -../configure [options] -make - -Compilations steps for oaisim_mme use alone: -./autogen.sh -./configure [options] -make - -Current options supported for configure: ---enable-r8: disable R9 and R10 S1AP messages updates ---enable-r9: disable R10 updates -code build switch: UPDATE_RELEASE_9 and UPDATE_RELEASE_10 -NOTE: Release 10 is enabled by default ---enable-standalone-epc: all-in-one package, MME, S-GW and P-GW are compiled in a single -executable and S11 interface is not used; messages are exchanged internally, -linking MME applicative layer to S+P-GW applicative layer - -How to run EPC environnement ? - -If you avec enabled the standalone option -the package is called oai_epc in the OAI_EPC directory. - -If you have decided to use the S11 interface, -two executables should be run on different machines - -* oai_sgw in OAI_SGW -* oaisim_mme in OAISIM_MME - -For example to rum mme: -./OAISIM_MME/oaisim_mme [options] -Avalaible options: --h: print help --v: enable verbosity level [1-2] --V: print current executable version and return - -Before any commit: -make maintainer-clean - -MME SCTP port for S1AP messages is 36412 -SGW and eNB GTP-u port is 2152 -SGW and MME GTP-c port is 2123 - --------- Adding new files to build system -------- -1) When adding a new file to compile, edit the Makefile.am of the corresponding - directory. -2) Execute ./autogen.sh -3) make -WARNING: do not edit directly Makefiles and Makefile.in, they are re-generated by - autoconf/automake. - -Bugs: -report any bug to openair_admin@eurecom.fr diff --git a/openair-cn/S11/COPYING b/openair-cn/S11/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/S11/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/S11/Makefile.am b/openair-cn/S11/Makefile.am deleted file mode 100644 index 7878e76f6a..0000000000 --- a/openair-cn/S11/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -noinst_LTLIBRARIES = libs11.la - -libs11_la_LDFLAGS = -all-static - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/GTPV2-C/nwgtpv2c-0.11/shared \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/UTILS - -libs11_la_SOURCES = \ - s11_common.c s11_common.h \ - s11_ie_formatter.c s11_ie_formatter.h \ - s11_mme_task.c s11_mme.h \ - s11_sgw.c s11_sgw.h \ - s11_mme_session_manager.c s11_mme_session_manager.h \ - s11_sgw_session_manager.c s11_sgw_session_manager.h \ - s11_sgw_bearer_manager.c s11_sgw_bearer_manager.h \ No newline at end of file diff --git a/openair-cn/S11/s11_common.c b/openair-cn/S11/s11_common.c deleted file mode 100644 index b24e82b586..0000000000 --- a/openair-cn/S11/s11_common.c +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "NwGtpv2c.h" - -#include "s11_common.h" - -NwRcT s11_ie_indication_generic(uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t *ieValue, - void *arg) -{ - S11_DEBUG("Received IE Parse Indication for of type %u, length %u, " - "instance %u!\n", ieType, ieLength, ieInstance); - return NW_OK; -} diff --git a/openair-cn/S11/s11_common.h b/openair-cn/S11/s11_common.h deleted file mode 100644 index a1f59006b2..0000000000 --- a/openair-cn/S11/s11_common.h +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_COMMON_H_ -#define S11_COMMON_H_ - -#define S11_DEBUG(x, args...) fprintf(stdout, "[S11] [D]"x, ##args) -#define S11_INFO(x, args...) fprintf(stdout, "[S11] [I]"x, ##args) -#define S11_WARN(x, args...) fprintf(stdout, "[S11] [W]"x, ##args) -#define S11_ERROR(x, args...) fprintf(stderr, "[S11] [E]"x, ##args) - -NwRcT s11_ie_indication_generic(uint8_t ieType, - uint8_t ieLength, - uint8_t ieInstance, - uint8_t *ieValue, - void *arg); - -#endif /* S11_COMMON_H_ */ diff --git a/openair-cn/S11/s11_ie_formatter.c b/openair-cn/S11/s11_ie_formatter.c deleted file mode 100644 index 1b3f85acf4..0000000000 --- a/openair-cn/S11/s11_ie_formatter.c +++ /dev/null @@ -1,1164 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include - -#include "assertions.h" -#include "conversions.h" - -#include "sgw_lite_messages_types.h" - -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" - -#include "s11_common.h" -#include "s11_ie_formatter.h" - -NwRcT s11_imsi_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - Imsi_t *imsi; - uint8_t i; - uint8_t mask = 0x0F; - uint8_t imsi_length = 2 * ieLength; - - DevAssert(arg != NULL); - imsi = (Imsi_t *)arg; - - for (i = 0; i < ieLength * 2; i++) { - if (mask == 0x0F) { - imsi->digit[i] = (ieValue[i / 2] & (mask)); - } else { - imsi->digit[i] = (ieValue[i / 2] & (mask)) >> 4; - } - - imsi->digit[i] += '0'; - mask = ~mask; - } - - if (imsi->digit[imsi_length - 1] == (0x0f + '0')) { - imsi->digit[imsi_length - 1] = 0; - imsi_length--; - } - - imsi->length = imsi_length; - - S11_DEBUG("\t- IMSI length %d\n", imsi->length); - S11_DEBUG("\t- value %*s\n", imsi->length, imsi->digit); - - return NW_OK; -} - -int s11_imsi_ie_set(NwGtpv2cMsgHandleT *msg, const Imsi_t *imsi) -{ - uint8_t *temp = NULL; - uint8_t imsi_length, i; - NwRcT rc; - - DevAssert(msg != NULL); - DevAssert(imsi != NULL); - - /* In case of odd/even imsi */ - imsi_length = imsi->length % 2 == 0 ? imsi->length / 2 : imsi->length / 2 + 1; - - temp = calloc(imsi_length, sizeof(uint8_t)); - - DevAssert(temp != NULL); - - for (i = 0; i < imsi->length; i++) { - temp[i / 2] |= ((imsi->digit[i] - '0') & 0x0F) << (i % 2 ? 4 : 0); - } - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_IMSI, imsi_length, 0, temp); - DevAssert(NW_OK == rc); - - free(temp); - - return 0; -} - -NwRcT s11_msisdn_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - Msisdn_t *msisdn; - uint8_t i; - uint8_t mask = 0x0F; - uint8_t msisdn_length = 2 * ieLength; - - DevAssert(arg != NULL); - msisdn = (Msisdn_t *)arg; - - for (i = 0; i < ieLength * 2; i++) { - if (mask == 0x0F) { - msisdn->digit[i] = (ieValue[i / 2] & (mask)); - } else { - msisdn->digit[i] = (ieValue[i / 2] & (mask)) >> 4; - } - - msisdn->digit[i] += '0'; - mask = ~mask; - } - - if (msisdn->digit[msisdn_length - 1] == (0x0f + '0')) { - msisdn->digit[msisdn_length - 1] = 0; - msisdn_length--; - } - - msisdn->length = msisdn_length; - - S11_DEBUG("\t- MSISDN length %d\n", msisdn->length); - S11_DEBUG("\t- value %*s\n", msisdn->length, (char *)msisdn->digit); - - return NW_OK; -} - -NwRcT s11_mei_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - Mei_t *mei = (Mei_t *)arg; - - DevAssert(mei != NULL); - - - - return NW_OK; -} - -NwRcT s11_pdn_type_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - pdn_type_t *pdn_type = (pdn_type_t *)arg; - - DevAssert(pdn_type != NULL); - - if (*ieValue == 1) { - /* Only IPv4 */ - *pdn_type = IPv4; - } else if (*ieValue == 2) { - /* Only IPv6 */ - *pdn_type = IPv6; - } else if (*ieValue == 3) { - /* IPv4 and/or IPv6 */ - *pdn_type = IPv4_AND_v6; - } else { - S11_ERROR("Received unknown value for PDN Type: %u\n", *ieValue); - return NW_GTPV2C_IE_INCORRECT; - } - - S11_DEBUG("\t- PDN type %u\n", *pdn_type); - - return NW_OK; -} - -int s11_pdn_type_ie_set(NwGtpv2cMsgHandleT *msg, const pdn_type_t *pdn_type) -{ - NwRcT rc; - uint8_t value; - - DevAssert(pdn_type != NULL); - DevAssert(msg != NULL); - - switch (*pdn_type) { - case IPv4: - value = 1; - break; - - case IPv6: - value = 2; - break; - - case IPv4_AND_v6: - case IPv4_OR_v6: - value = 3; - break; - - default: - S11_ERROR("Invalid PDN type received: %d\n", *pdn_type); - return -1; - } - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_PDN_TYPE, 1, 0, (uint8_t*)&value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_rat_type_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - rat_type_t *rat_type = (rat_type_t *)arg; - - DevAssert(rat_type != NULL); - - switch (*ieValue) { - case 1: - *rat_type = RAT_UTRAN; - break; - - case 2: - *rat_type = RAT_GERAN; - break; - - case 3: - *rat_type = RAT_WLAN; - break; - - case 4: - *rat_type = RAT_GAN; - break; - - case 5: - *rat_type = RAT_HSPA_EVOLUTION; - break; - - case 6: - *rat_type = RAT_EUTRAN; - break; - - default: - S11_ERROR("Can't map GTP RAT type %u to EPC definition\n" - "\tCheck TS.29.274 #8.17 for possible values\n", *ieValue); - return NW_GTPV2C_IE_INCORRECT; - } - - S11_DEBUG("\t- RAT type (%d): %d\n", *ieValue, *rat_type); - - return NW_OK; -} - -int s11_rat_type_ie_set(NwGtpv2cMsgHandleT *msg, const rat_type_t *rat_type) -{ - NwRcT rc; - uint8_t value; - - DevAssert(rat_type != NULL); - DevAssert(msg != NULL); - - switch (*rat_type) { - case RAT_UTRAN: - value = 1; - break; - - case RAT_GERAN: - value = 2; - break; - - case RAT_WLAN: - value = 3; - break; - - case RAT_GAN: - value = 4; - break; - - case RAT_HSPA_EVOLUTION: - value = 5; - break; - - case RAT_EUTRAN: - value = 6; - break; - - default: - S11_ERROR("Can't map RAT type %d to GTP RAT type\n" - "\tCheck TS.29.274 #8.17 for possible values\n", *rat_type); - return -1; - } - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_RAT_TYPE, 1, 0, (uint8_t*)&value); - DevAssert(NW_OK == rc); - - return 0; -} - -int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi) -{ - NwRcT rc; - uint8_t value = 0; - - value = ebi & 0x0F; - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_EBI, 1, 0, - &value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_ebi_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - uint8_t *ebi = (uint8_t *)arg; - - DevAssert(ebi != NULL); - - *ebi = ieValue[0] & 0x0F; - - S11_DEBUG("\t- EBI %u\n", *ebi); - - return NW_OK; -} - -NwRcT s11_cause_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - SGWCause_t *cause = (SGWCause_t *)arg; - - DevAssert(cause != NULL); - - *cause = ieValue[0]; - - S11_DEBUG("\t- Cause %u\n", *cause); - - return NW_OK; -} - -int s11_cause_ie_set(NwGtpv2cMsgHandleT *msg, - const gtp_cause_t *cause) -{ - NwRcT rc; - uint8_t value[6]; - - DevAssert(msg != NULL); - DevAssert(cause != NULL); - - value[0] = cause->cause_value; - value[1] = ((cause->pce & 0x1) << 2) | ((cause->bce & 0x1) << 1) | (cause->cs & 0x1); - - if (cause->offending_ie_type != 0) { - value[2] = cause->offending_ie_type; - value[3] = (cause->offending_ie_length & 0xFF00) >> 8; - value[4] = cause->offending_ie_length & 0x00FF; - value[5] = cause->offending_ie_instance & 0x0F; - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_CAUSE, 6, 0, value); - } else { - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_CAUSE, 2, 0, value); - } - - DevAssert(NW_OK == rc); - - return rc == NW_OK ? 0 : -1; -} - -NwRcT s11_bearer_context_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - bearer_to_create_t *bearer_to_create = (bearer_to_create_t *)arg; - uint8_t read = 0; - NwRcT rc; - - DevAssert(bearer_to_create != NULL); - - while (ieLength > read) { - NwGtpv2cIeTlvT *ie_p; - - ie_p = (NwGtpv2cIeTlvT*)&ieValue[read]; - - switch (ie_p->t) { - case NW_GTPV2C_IE_EBI: - rc = s11_ebi_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_to_create->eps_bearer_id); - DevAssert(NW_OK == rc); - break; - - case NW_GTPV2C_IE_BEARER_LEVEL_QOS: - break; - - default: - S11_ERROR("Received unexpected IE %u\n", ie_p->t); - return NW_GTPV2C_IE_INCORRECT; - } - - read += (ntohs(ie_p->l) + sizeof(NwGtpv2cIeTlvT)); - } - - return NW_OK; -} - -int s11_bearer_context_to_create_ie_set( - NwGtpv2cMsgHandleT *msg, const bearer_to_create_t *bearer_to_create) -{ - NwRcT rc; - - DevAssert(msg != NULL); - DevAssert(bearer_to_create != NULL); - - /* Start section for grouped IE: bearer context to create */ - rc = nwGtpv2cMsgGroupedIeStart(*msg, NW_GTPV2C_IE_BEARER_CONTEXT, - NW_GTPV2C_IE_INSTANCE_ZERO); - DevAssert(NW_OK == rc); - - s11_ebi_ie_set(msg, bearer_to_create->eps_bearer_id); - - /* End section for grouped IE: bearer context to create */ - rc = nwGtpv2cMsgGroupedIeEnd(*msg); - DevAssert(NW_OK == rc); - return 0; -} - -NwRcT s11_bearer_context_to_modifiy_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - bearer_context_to_modify_t *bearer_to_modify = (bearer_context_to_modify_t *)arg; - uint8_t read = 0; - NwRcT rc; - - DevAssert(bearer_to_modify != NULL); - - while (ieLength > read) { - NwGtpv2cIeTlvT *ie_p; - - ie_p = (NwGtpv2cIeTlvT*)&ieValue[read]; - - switch (ie_p->t) { - case NW_GTPV2C_IE_EBI: - rc = s11_ebi_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_to_modify->eps_bearer_id); - DevAssert(NW_OK == rc); - break; - - case NW_GTPV2C_IE_FTEID: - rc = s11_fteid_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_to_modify->s1_eNB_fteid); - break; - - default: - S11_ERROR("Received unexpected IE %u\n", ie_p->t); - return NW_GTPV2C_IE_INCORRECT; - } - - read += (ntohs(ie_p->l) + sizeof(NwGtpv2cIeTlvT)); - } - - return NW_OK; -} - -NwRcT s11_bearer_context_created_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - bearer_context_created_t *bearer_created = (bearer_context_created_t *)arg; - uint8_t read = 0; - NwRcT rc; - - DevAssert(bearer_created != NULL); - - while (ieLength > read) { - NwGtpv2cIeTlvT *ie_p; - - ie_p = (NwGtpv2cIeTlvT*)&ieValue[read]; - - switch (ie_p->t) { - case NW_GTPV2C_IE_EBI: - rc = s11_ebi_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_created->eps_bearer_id); - DevAssert(NW_OK == rc); - break; - - case NW_GTPV2C_IE_FTEID: - rc = s11_fteid_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_created->s1u_sgw_fteid); - break; - - case NW_GTPV2C_IE_CAUSE: - rc = s11_cause_ie_get(ie_p->t, ie_p->l, ie_p->i, - &ieValue[read + sizeof(NwGtpv2cIeTlvT)], - &bearer_created->cause); - break; - - default: - S11_ERROR("Received unexpected IE %u\n", ie_p->t); - return NW_GTPV2C_IE_INCORRECT; - } - - read += (ntohs(ie_p->l) + sizeof(NwGtpv2cIeTlvT)); - } - - return NW_OK; -} - -int s11_bearer_context_created_ie_set( - NwGtpv2cMsgHandleT *msg, const bearer_context_created_t *bearer) -{ - NwRcT rc; - - DevAssert(msg != NULL); - DevAssert(bearer != NULL); - - /* Start section for grouped IE: bearer context created */ - rc = nwGtpv2cMsgGroupedIeStart(*msg, NW_GTPV2C_IE_BEARER_CONTEXT, - NW_GTPV2C_IE_INSTANCE_ZERO); - DevAssert(NW_OK == rc); - - s11_ebi_ie_set(msg, bearer->eps_bearer_id); - - rc = nwGtpv2cMsgAddIeCause(*msg, NW_GTPV2C_IE_INSTANCE_ZERO, bearer->cause, - 0, 0, 0); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgAddIeFteid(*msg, NW_GTPV2C_IE_INSTANCE_ZERO, - bearer->s1u_sgw_fteid.interface_type, - bearer->s1u_sgw_fteid.teid, - bearer->s1u_sgw_fteid.ipv4 ? htonl(bearer->s1u_sgw_fteid.ipv4_address) : 0, - bearer->s1u_sgw_fteid.ipv6 ? (uint8_t*)bearer->s1u_sgw_fteid.ipv6_address : NULL); - DevAssert(NW_OK == rc); - - /* End section for grouped IE: bearer context created */ - rc = nwGtpv2cMsgGroupedIeEnd(*msg); - DevAssert(NW_OK == rc); - - return 0; -} - -/* This IE shall be included in the E-UTRAN initial attach, - * PDP Context Activation and UE Requested PDN connectivity procedures. - * This IE denotes the most stringent restriction as required - * by any already active bearer context. If there are no already active bearer - * contexts, this value is set to the least restrictive type. - */ -int s11_apn_restriction_ie_set( - NwGtpv2cMsgHandleT *msg, const uint8_t apn_restriction) -{ - NwRcT rc; - - DevAssert(msg != NULL); - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_APN_RESTRICTION, 1, 0, - (uint8_t *)&apn_restriction); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_serving_network_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - ServingNetwork_t *serving_net = (ServingNetwork_t *)arg; - - DevAssert(serving_net != NULL); - - serving_net->mcc[1] = (ieValue[0] & 0xF0) >> 4; - serving_net->mcc[0] = (ieValue[0] & 0x0F); - serving_net->mcc[2] = (ieValue[1] & 0x0F); - - if ((ieValue[1] & 0xF0) == 0xF0) { - /* Two digits MNC */ - serving_net->mnc[0] = 0; - serving_net->mnc[2] = (ieValue[2] & 0xF0) >> 4; - serving_net->mnc[1] = (ieValue[2] & 0x0F); - } else { - serving_net->mnc[0] = (ieValue[1] & 0xF0) >> 4; - serving_net->mnc[2] = (ieValue[2] & 0xF0) >> 4; - serving_net->mnc[1] = (ieValue[2] & 0x0F); - } - - S11_DEBUG("\t- Serving network %d.%d\n", - serving_net->mcc[0] * 100 + serving_net->mcc[1] * 10 - + serving_net->mcc[2], - serving_net->mnc[0] * 100 + serving_net->mnc[1] * 10 - + serving_net->mnc[2]); - - return NW_OK; -} - -int s11_serving_network_ie_set( - NwGtpv2cMsgHandleT *msg, - const ServingNetwork_t *serving_network) -{ - NwRcT rc; - uint8_t value[3]; - - DevAssert(msg != NULL); - DevAssert(serving_network != NULL); - - /* MCC Decimal | MCC Hundreds */ - value[0] = ((serving_network->mcc[1] & 0x0F) << 4) | - (serving_network->mcc[2] & 0x0F); - value[1] = serving_network->mcc[0] & 0x0F; - - if ((serving_network->mnc[0] & 0xF) == 0xF) { - /* Only two digits */ - value[1] |= 0xF0; - value[2] = ((serving_network->mnc[2] & 0x0F) << 4) | - (serving_network->mnc[1] & 0x0F); - } else { - value[1] |= (serving_network->mnc[2] & 0x0F) << 4; - value[2] = ((serving_network->mnc[1] & 0x0F) << 4) | - (serving_network->mnc[0] & 0x0F); - } - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_SERVING_NETWORK, 3, 0, value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_fteid_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - uint8_t offset = 0; - FTeid_t *fteid = (FTeid_t *)arg; - - DevAssert(fteid != NULL); - - fteid->ipv4 = (ieValue[0] & 0x80) >> 7; - fteid->ipv6 = (ieValue[0] & 0x40) >> 6; - - fteid->interface_type = ieValue[0] & 0x1F; - S11_DEBUG("\t- F-TEID type %d\n", fteid->interface_type); - - /* Copy the TEID or GRE key */ - fteid->teid = ntoh_int32_buf(&ieValue[1]); - - S11_DEBUG("\t- TEID/GRE %08x\n", fteid->teid); - - if (fteid->ipv4 == 1) { - /* IPv4 present: copy the 4 bytes */ - memcpy(&fteid->ipv4_address, &ieValue[5], 4); - offset = 4; - - S11_DEBUG("\t- IPv4 addr "IPV4_ADDR"\n", - IPV4_ADDR_FORMAT(fteid->ipv4_address)); - } - - if (fteid->ipv6 == 1) { - char ipv6_ascii[40]; - /* IPv6 present: copy the 16 bytes - * WARNING: if Ipv4 is present, 4 bytes of offset should be applied - */ - memcpy(fteid->ipv6_address, &ieValue[5 + offset], 16); - - inet_ntop(AF_INET6, fteid->ipv6_address, ipv6_ascii, 40); - S11_DEBUG("\t- IPv6 addr %s\n", ipv6_ascii); - } - - return NW_OK; -} - -NwRcT s11_paa_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - uint8_t offset = 0; - PAA_t *paa = (PAA_t *)arg; - - DevAssert(paa != NULL); - - paa->pdn_type = ieValue[0] & 0x07; - S11_DEBUG("\t- PAA type %d\n", paa->pdn_type); - - if (paa->pdn_type & 0x2) { - char ipv6_ascii[40]; - /* IPv6 present: copy the 16 bytes - * WARNING: if both ipv4 and ipv6 are present, - * 17 bytes of offset should be applied for ipv4 - * NOTE: an ipv6 prefix length is prepend - * NOTE: in Rel.8 the prefix length has a default value of /64 - */ - paa->ipv6_prefix_length = ieValue[1]; - memcpy(paa->ipv6_address, &ieValue[2], 16); - - inet_ntop(AF_INET6, paa->ipv6_address, ipv6_ascii, 40); - S11_DEBUG("\t- IPv6 addr %s/%u\n", ipv6_ascii, paa->ipv6_prefix_length); - } - - if (paa->pdn_type == 3) { - offset = 17; - } - - if (paa->pdn_type & 0x1) { - memcpy(paa->ipv4_address, &ieValue[1 + offset], 4); - - S11_DEBUG("\t- IPv4 addr "IPV4_ADDR"\n", - paa->ipv4_address[0], paa->ipv4_address[1], - paa->ipv4_address[2], paa->ipv4_address[3]); - } - - paa->pdn_type -= 1; - return NW_OK; -} - -int s11_paa_ie_set(NwGtpv2cMsgHandleT *msg, const PAA_t *paa) -{ - /* ipv4 address = 4 + ipv6 address = 16 + ipv6 prefix length = 1 - * + pdn_type = 1 - * = maximum of 22 bytes - */ - uint8_t temp[22]; - uint8_t pdn_type; - uint8_t offset = 0; - NwRcT rc; - - DevAssert(paa != NULL); - - pdn_type = paa->pdn_type + 1; - - temp[offset] = pdn_type; - offset++; - - if (pdn_type & 0x2) { - /* If ipv6 or ipv4v6 present */ - temp[1] = paa->ipv6_prefix_length; - memcpy(&temp[2], paa->ipv6_address, 16); - offset += 17; - } - - if (pdn_type & 0x1) { - memcpy(&temp[offset], paa->ipv4_address, 4); - offset += 4; - } - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_PAA, offset, 0, - temp); - DevAssert(NW_OK == rc); - - return 0; -} - -/* The encoding of the APN shall follow the Name Syntax defined in RFC 2181, - * RFC 1035 and RFC 1123. The APN consists of one or more labels. Each label - * is coded as a one octet length field followed by that number of octets - * coded as 8 bit ASCII characters. Following RFC 1035 the labels shall consist - * only of the alphabetic characters (A-Z and a-z), digits (0-9) - * and the hyphen (-). - */ -NwRcT s11_apn_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - uint8_t read = 1; - uint8_t word_length; - char *apn = (char *)arg; - - DevAssert(apn != NULL); - - DevCheck(ieLength <= APN_MAX_LENGTH, ieLength, APN_MAX_LENGTH, 0); - - word_length = ieValue[0]; - - while (read < ieLength) { - if (word_length > 0) { - apn[read - 1] = ieValue[read]; - word_length--; - } else { - /* This is not an alphanumeric character */ - word_length = ieValue[read]; - /* Replace the length attribute by '.' */ - apn[read - 1] = '.'; - } - - read ++; - } - - apn[read - 1] = '\0'; - - S11_DEBUG("\t- APN %s\n", apn); - - return NW_OK; -} - -int s11_apn_ie_set(NwGtpv2cMsgHandleT *msg, const char *apn) -{ - NwRcT rc; - uint8_t *value; - uint8_t apn_length; - uint8_t offset = 0; - uint8_t *last_size; - uint8_t word_length = 0; - - DevAssert(apn != NULL); - DevAssert(msg != NULL); - - apn_length = strlen(apn); - - value = calloc(apn_length + 1, sizeof(uint8_t)); - last_size = &value[0]; - - while (apn[offset]) { - /* We replace the . by the length of the word */ - if (apn[offset] == '.') { - *last_size = word_length; - word_length = 0; - last_size = &value[offset + 1]; - } else { - word_length++; - value[offset + 1] = apn[offset]; - } - - offset++; - } - - *last_size = word_length; - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_APN, apn_length + 1, 0, value); - DevAssert(NW_OK == rc); - - free(value); - - return 0; -} - -NwRcT s11_ambr_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - ambr_t *ambr = (ambr_t *)arg; - - DevAssert(ambr != NULL); - - ambr->br_ul = ntoh_int32_buf(&ieValue[0]); - ambr->br_dl = ntoh_int32_buf(&ieValue[4]); - - S11_DEBUG("\t- AMBR UL %"PRIu64"\n", ambr->br_ul); - S11_DEBUG("\t- AMBR DL %"PRIu64"\n", ambr->br_dl); - - return NW_OK; -} - -NwRcT s11_uli_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - Uli_t *uli = (Uli_t *)arg; - - DevAssert(uli != NULL); - - uli->present = ieValue[0]; - - if (uli->present & ULI_CGI) { - - } - - return NW_OK; -} - -int s11_bearer_qos_ie_set(NwGtpv2cMsgHandleT *msg, const BearerQOS_t *bearer_qos) -{ - NwRcT rc; - uint8_t value[18]; - - DevAssert(msg != NULL); - DevAssert(bearer_qos != NULL); - - value[0] = (bearer_qos->pci << 6) | (bearer_qos->pl << 2) | (bearer_qos->pvi); - value[1] = bearer_qos->qci; - - /* TODO: check endianness */ - memcpy(&value[2], &bearer_qos->mbr.br_ul, 4); - memcpy(&value[6], &bearer_qos->mbr.br_dl, 4); - memcpy(&value[10], &bearer_qos->gbr.br_ul, 4); - memcpy(&value[14], &bearer_qos->gbr.br_dl, 4); - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_BEARER_LEVEL_QOS, 18, 0, value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_ip_address_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - gtp_ip_address_t *ip_address = (gtp_ip_address_t *)arg; - - DevAssert(ip_address != NULL); - - if (ieLength == 4) { - /* This is an IPv4 Address */ - ip_address->present = GTP_IP_ADDR_v4; - memcpy(ip_address->address.v4, ieValue, 4); - } else if (ieLength == 16) { - /* This is an IPv6 Address */ - ip_address->present = GTP_IP_ADDR_v6; - memcpy(ip_address->address.v6, ieValue, 16); - } else { - /* Length doesn't lie in possible values */ - return NW_GTPV2C_IE_INCORRECT; - } - - return NW_OK; -} - -int s11_ip_address_ie_set(NwGtpv2cMsgHandleT *msg, - const gtp_ip_address_t *ip_address) -{ - return 0; -} - -NwRcT s11_delay_value_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - DelayValue_t *delay_value = (DelayValue_t *)arg; - - DevAssert(arg != NULL); - - if (ieLength != 1) { - return NW_GTPV2C_IE_INCORRECT; - } - - *delay_value = ieValue[0]; - - S11_DEBUG("\t - Delay Value %u\n", *delay_value); - - return NW_OK; -} - -int s11_delay_value_ie_set(NwGtpv2cMsgHandleT *msg, - const DelayValue_t *delay_value) -{ - uint8_t value; - NwRcT rc; - - DevAssert(msg != NULL); - DevAssert(delay_value != NULL); - - value = *delay_value; - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_DELAY_VALUE, 1, 0, (uint8_t*)&value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_ue_time_zone_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - UETimeZone_t *ue_time_zone = (UETimeZone_t *)arg; - - DevAssert(ue_time_zone != NULL); - - if (ieLength != 2) { - return NW_GTPV2C_IE_INCORRECT; - } - - ue_time_zone->time_zone = ieValue[0]; - ue_time_zone->daylight_saving_time = ieValue[1] & 0x03; - - S11_DEBUG("\t - Time Zone %u\n", ue_time_zone->time_zone); - S11_DEBUG("\t - Daylight SVT %u\n", ue_time_zone->daylight_saving_time); - - return NW_OK; -} - -int s11_ue_time_zone_ie_set(NwGtpv2cMsgHandleT *msg, - const UETimeZone_t *ue_time_zone) -{ - uint8_t value[2]; - NwRcT rc; - - DevAssert(msg != NULL); - DevAssert(ue_time_zone != NULL); - - value[0] = ue_time_zone->time_zone; - value[1] = ue_time_zone->daylight_saving_time; - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_UE_TIME_ZONE, 2, 0, value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_target_identification_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - target_identification_t *target_identification = (target_identification_t *)arg; - - DevAssert(target_identification != NULL); - - target_identification->target_type = ieValue[0]; - - switch (target_identification->target_type) { - case TARGET_ID_RNC_ID: { - target_identification->target_id.rnc_id.lac = (ieValue[4] << 8) | - ieValue[5]; - target_identification->target_id.rnc_id.rac = ieValue[6]; - - if (ieLength == 11) { - /* Extended RNC id */ - target_identification->target_id.rnc_id.rnc_id = (ieValue[7] << 24) | - (ieValue[8] << 16) | (ieValue[9] << 8) | (ieValue[10]); - } else if (ieLength == 9) { - /* Normal RNC id */ - target_identification->target_id.rnc_id.rnc_id = (ieValue[7] << 8) | - ieValue[8]; - } else { - /* This case is not possible */ - return NW_GTPV2C_IE_INCORRECT; - } - - S11_DEBUG("\t\t- LAC 0x%04x\n", target_identification->target_id.rnc_id.lac); - S11_DEBUG("\t\t- RAC 0x%02x\n", target_identification->target_id.rnc_id.rac); - S11_DEBUG("\t\t- RNC 0x%08x\n", target_identification->target_id.rnc_id.rnc_id); - } - break; - - case TARGET_ID_MACRO_ENB_ID: { - if (ieLength != 9) { - return NW_GTPV2C_IE_INCORRECT; - } - - target_identification->target_id.macro_enb_id.enb_id = ((ieValue[4] & 0x0F) << 16) | - (ieValue[5] << 8) | ieValue[6]; - target_identification->target_id.macro_enb_id.tac = (ieValue[7] << 8) | ieValue[8]; - S11_DEBUG("\t\t- ENB Id 0x%06x\n", target_identification->target_id.macro_enb_id.enb_id); - S11_DEBUG("\t\t- TAC 0x%04x\n", target_identification->target_id.macro_enb_id.tac); - } - break; - - case TARGET_ID_HOME_ENB_ID: { - if (ieLength != 10) { - return NW_GTPV2C_IE_INCORRECT; - } - - target_identification->target_id.home_enb_id.enb_id = ((ieValue[4] & 0x0F) << 14) | - (ieValue[5] << 16) | (ieValue[6] << 8) | ieValue[7]; - target_identification->target_id.home_enb_id.tac = (ieValue[8] << 8) | ieValue[9]; - S11_DEBUG("\t\t- ENB Id 0x%07x\n", target_identification->target_id.home_enb_id.enb_id); - S11_DEBUG("\t\t- TAC 0x%04x\n", target_identification->target_id.home_enb_id.tac); - } - break; - - default: - return NW_GTPV2C_IE_INCORRECT; - } - - return NW_OK; -} - -NwRcT s11_bearer_flags_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - bearer_flags_t *bearer_flags = (bearer_flags_t *)arg; - - DevAssert(arg != NULL); - - if (ieLength != 1) { - return NW_GTPV2C_IE_INCORRECT; - } - - bearer_flags->ppc = ieValue[0] & 0x01; - bearer_flags->vb = ieValue[0] & 0x02; - - return NW_OK; -} - -int s11_bearer_flags_ie_set(NwGtpv2cMsgHandleT *msg, - const bearer_flags_t *bearer_flags) -{ - NwRcT rc; - uint8_t value; - - DevAssert(msg != NULL); - DevAssert(bearer_flags != NULL); - - value = (bearer_flags->vb << 1) | bearer_flags->ppc; - - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_BEARER_FLAGS, 1, 0, (uint8_t*)&value); - DevAssert(NW_OK == rc); - - return 0; -} - -NwRcT s11_indication_flags_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - indication_flags_t *indication_flags = (indication_flags_t*)arg; - - DevAssert(indication_flags != NULL); - - if (ieLength < 3) { - return NW_GTPV2C_IE_INCORRECT; - } - - *indication_flags = ieValue[0] | (ieValue[1] << 8) | (ieValue[2] << 16); - - S11_DEBUG("\t- Indication Flags %06x\n", *indication_flags); - - return NW_OK; -} - -NwRcT s11_fqcsid_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) -{ - FQ_CSID_t *fq_csid = (FQ_CSID_t *)arg; - - DevAssert(fq_csid != NULL); - - fq_csid->node_id_type = (ieValue[0] & 0xF0) >> 4; - S11_DEBUG("\t- FQ-CSID type %u\n", fq_csid->node_id_type); - - /* NOTE: Values of Number of CSID other than 1 are only employed in the - * Delete PDN Connection Set Request and Response. - */ - if ((ieValue[0] & 0x0F) != 1) { - return NW_GTPV2C_IE_INCORRECT; - } - - switch (fq_csid->node_id_type) { - case GLOBAL_UNICAST_IPv4: { - if (ieLength != 7) { - return NW_GTPV2C_IE_INCORRECT; - } - - fq_csid->node_id.unicast_ipv4 = (ieValue[1] << 24) | - (ieValue[2] << 16) | (ieValue[3] << 8) | (ieValue[4]); - fq_csid->csid = (ieValue[5] << 8) | ieValue[6]; - - S11_DEBUG("\t- v4 address ["IPV4_ADDR"]\n", - IPV4_ADDR_FORMAT(fq_csid->node_id.unicast_ipv4)); - } - break; - - case GLOBAL_UNICAST_IPv6: { - char ipv6[40]; - - if (ieLength != 19) { - return NW_GTPV2C_IE_INCORRECT; - } - - memcpy(fq_csid->node_id.unicast_ipv6, &ieValue[1], 16); - fq_csid->csid = (ieValue[17] << 8) | ieValue[18]; - - /* Convert the ipv6 to printable string */ - inet_ntop(AF_INET6, fq_csid->node_id.unicast_ipv6, ipv6, 40); - - S11_DEBUG("\t- v6 address [%s]\n", fq_csid->node_id.unicast_ipv6); - } - break; - - default: - return NW_GTPV2C_IE_INCORRECT; - } - - S11_DEBUG("\t- CSID 0x%04x\n", fq_csid->csid); - return NW_OK; -} diff --git a/openair-cn/S11/s11_ie_formatter.h b/openair-cn/S11/s11_ie_formatter.h deleted file mode 100644 index 0d820b3462..0000000000 --- a/openair-cn/S11/s11_ie_formatter.h +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#ifndef S11_IE_FORMATTER_H_ -#define S11_IE_FORMATTER_H_ - -/* Imsi Information Element - * 3GPP TS.29.274 #8.3 - * NOTE: Imsi is TBCD coded - * octet 5 | Number digit 2 | Number digit 1 | - * octet n+4 | Number digit m | Number digit m-1 | - */ -NwRcT s11_imsi_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_imsi_ie_set(NwGtpv2cMsgHandleT *msg, const Imsi_t *imsi); - -NwRcT s11_msisdn_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* PDN Type Information Element - * 3GPP TS 29.274 #8.34 - * PDN type: - * * 1 = IPv4 - * * 2 = IPv6 - * * 3 = IPv4v6 - */ -NwRcT s11_pdn_type_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_pdn_type_ie_set(NwGtpv2cMsgHandleT *msg, const pdn_type_t *pdn_type); - -/* RAT type Information Element - * WARNING: the RAT type used in MME and S/P-GW is not the same as the one - * for S11 interface defined in 3GPP TS 29.274 #8.17. - */ -NwRcT s11_rat_type_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_rat_type_ie_set(NwGtpv2cMsgHandleT *msg, const rat_type_t *rat_type); - -/* EPS Bearer Id Information Element - * 3GPP TS 29.274 #8.8 - */ -NwRcT s11_ebi_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi); - -/* Bearer Contexts to Create Information Element as part of Create Session Request - * 3GPP TS 29.274 Table 7.2.1-2. - */ -NwRcT s11_bearer_context_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_bearer_context_to_create_ie_set( - NwGtpv2cMsgHandleT *msg, const bearer_to_create_t *bearer_to_create); - -NwRcT s11_bearer_context_to_modifiy_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* EPS Bearer Id Information Element - * 3GPP TS 29.274 #8.8 - * ebi is 4 bits long - */ -int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi); - -/* Cause Information Element */ -NwRcT s11_cause_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_cause_ie_set(NwGtpv2cMsgHandleT *msg, - const gtp_cause_t *cause); - -/* Bearer Context Created grouped Information Element */ -NwRcT s11_bearer_context_created_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_bearer_context_created_ie_set( - NwGtpv2cMsgHandleT *msg, const bearer_context_created_t *bearer); - -/* Serving Network Information Element - * 3GPP TS 29.274 #8.18 - */ -NwRcT s11_serving_network_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_serving_network_ie_set( - NwGtpv2cMsgHandleT *msg, - const ServingNetwork_t *serving_network); - -NwRcT s11_fteid_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* PDN Address Allocation Information Element */ -NwRcT s11_paa_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_paa_ie_set(NwGtpv2cMsgHandleT *msg, const PAA_t *paa); - -/* Access Point Name Information Element - * 3GPP TS 29.274 #8.6 - * NOTE: The APN field is not encoded as a dotted string as commonly used in - * documentation. - * The encoding of the APN field follows 3GPP TS 23.003 subclause 9.1 - */ -NwRcT s11_apn_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_apn_ie_set(NwGtpv2cMsgHandleT *msg, const char *apn); - -NwRcT s11_ambr_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -NwRcT s11_mei_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -NwRcT s11_uli_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* APN restrtiction Information Element */ -int s11_apn_restriction_ie_set( - NwGtpv2cMsgHandleT *msg, const uint8_t apn_restriction); - -/* Bearer level Qos Information Element - * 3GPP TS 29.274 #8.15 - */ -int s11_bearer_qos_ie_set(NwGtpv2cMsgHandleT *msg, const BearerQOS_t *bearer_qos); - -/* IP address Information Element - * 3GPP TS 29.274 #8.9 - */ -NwRcT s11_ip_address_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_ip_address_ie_set(NwGtpv2cMsgHandleT *msg, - const gtp_ip_address_t *ip_address); - -/* Delay Value Information Element - * 3GPP TS 29.274 #8.27 - */ -NwRcT s11_delay_value_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_delay_value_ie_set(NwGtpv2cMsgHandleT *msg, - const DelayValue_t *delay_value); - -/* UE Time Zone Information Element - * 3GPP TS 29.274 #8.44 - */ -NwRcT s11_ue_time_zone_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_ue_time_zone_ie_set(NwGtpv2cMsgHandleT *msg, - const UETimeZone_t *ue_time_zone); - -/* Target Identification Information Element - * 3GPP TS 29.274 #8.51 - */ -NwRcT s11_target_identification_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* Bearer Flags Information Element - * 3GPP TS 29.274 #8.32 - */ -NwRcT s11_bearer_flags_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -int s11_bearer_flags_ie_set(NwGtpv2cMsgHandleT *msg, - const bearer_flags_t *bearer_flags); - -NwRcT s11_indication_flags_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -/* FQ-CSID Information Element - * 3GPP TS 29.274 #8.62 - */ - -NwRcT s11_fqcsid_ie_get( - uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); - -#endif /* S11_IE_FORMATTER_H_ */ diff --git a/openair-cn/S11/s11_mme.h b/openair-cn/S11/s11_mme.h deleted file mode 100644 index 0d5f817fae..0000000000 --- a/openair-cn/S11/s11_mme.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_MME_H_ -#define S11_MME_H_ - -int s11_mme_init(const mme_config_t *mme_config); - -#endif /* S11_MME_H_ */ diff --git a/openair-cn/S11/s11_mme_peer_manager.c b/openair-cn/S11/s11_mme_peer_manager.c deleted file mode 100644 index 5355a8adbf..0000000000 --- a/openair-cn/S11/s11_mme_peer_manager.c +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include - - diff --git a/openair-cn/S11/s11_mme_session_manager.c b/openair-cn/S11/s11_mme_session_manager.c deleted file mode 100644 index 5adf2c492b..0000000000 --- a/openair-cn/S11/s11_mme_session_manager.c +++ /dev/null @@ -1,223 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "assertions.h" -#include "intertask_interface.h" - -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" - -#include "s11_common.h" -#include "s11_mme_session_manager.h" -#include "s11_ie_formatter.h" - -int s11_mme_create_session_request(NwGtpv2cStackHandleT *stack_p, - SgwCreateSessionRequest *create_session_p) -{ - NwGtpv2cUlpApiT ulp_req; - - NwRcT rc; - uint8_t restart_counter = 0; - - DevAssert(stack_p != NULL); - DevAssert(create_session_p != NULL); - - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - - ulp_req.apiType = NW_GTPV2C_ULP_API_INITIAL_REQ; - - /* Prepare a new Create Session Request msg */ - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_CREATE_SESSION_REQ, - create_session_p->teid, - 0, - &(ulp_req.hMsg)); - - ulp_req.apiInfo.initialReqInfo.peerIp = create_session_p->peer_ip; - ulp_req.apiInfo.initialReqInfo.teidLocal = create_session_p->sender_fteid_for_cp.teid; - - /* Add recovery if contacting the peer for the first time */ - rc = nwGtpv2cMsgAddIe((ulp_req.hMsg), NW_GTPV2C_IE_RECOVERY, 1, 0, - (uint8_t*)&restart_counter); - DevAssert(NW_OK == rc); - - /* Putting the information Elements */ - s11_imsi_ie_set(&(ulp_req.hMsg), &create_session_p->imsi); - s11_rat_type_ie_set(&(ulp_req.hMsg), &create_session_p->rat_type); - s11_pdn_type_ie_set(&(ulp_req.hMsg), &create_session_p->pdn_type); - - /* Sender F-TEID for Control Plane (MME S11) */ - rc = nwGtpv2cMsgAddIeFteid((ulp_req.hMsg), NW_GTPV2C_IE_INSTANCE_ZERO, - S11_MME_GTP_C, - create_session_p->sender_fteid_for_cp.teid, - create_session_p->sender_fteid_for_cp.ipv4 ? - create_session_p->sender_fteid_for_cp.ipv4_address : 0, - create_session_p->sender_fteid_for_cp.ipv6 ? - create_session_p->sender_fteid_for_cp.ipv6_address : NULL); - /* The P-GW TEID should be present on the S11 interface. - * In case of an initial attach it should be set to 0... - */ - rc = nwGtpv2cMsgAddIeFteid((ulp_req.hMsg), NW_GTPV2C_IE_INSTANCE_ONE, - S5_S8_PGW_GTP_C, - create_session_p->pgw_address_for_cp.teid, - create_session_p->pgw_address_for_cp.ipv4 ? - create_session_p->pgw_address_for_cp.ipv4_address : 0, - create_session_p->pgw_address_for_cp.ipv6 ? - create_session_p->pgw_address_for_cp.ipv6_address : NULL); - - s11_apn_ie_set(&(ulp_req.hMsg), create_session_p->apn); - - s11_serving_network_ie_set(&(ulp_req.hMsg), &create_session_p->serving_network); - - s11_bearer_context_to_create_ie_set( - &(ulp_req.hMsg), &create_session_p->bearer_to_create); - - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - return 0; -} - -int s11_mme_handle_create_session_response(NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc = NW_OK; - uint8_t offendingIeType, offendingIeInstance; - uint16_t offendingIeLength; - - SgwCreateSessionResponse *create_session_resp_p; - MessageDef *message_p; - - NwGtpv2cMsgParserT *pMsgParser; - - DevAssert(stack_p != NULL); - - message_p = itti_alloc_new_message(TASK_S11, SGW_CREATE_SESSION_RESPONSE); - - create_session_resp_p = &message_p->ittiMsg.sgwCreateSessionResponse; - - /* Create a new message parser */ - rc = nwGtpv2cMsgParserNew(*stack_p, NW_GTP_CREATE_SESSION_RSP, - s11_ie_indication_generic, - NULL, &pMsgParser); - DevAssert(NW_OK == rc); - - /* Cause IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_CAUSE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_cause_ie_get, - &create_session_resp_p->cause); - DevAssert(NW_OK == rc); - - /* Sender FTEID for CP IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_FTEID, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_fteid_ie_get, - &create_session_resp_p->s11_sgw_teid); - DevAssert(NW_OK == rc); - - /* Sender FTEID for PGW S5/S8 IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_FTEID, - NW_GTPV2C_IE_INSTANCE_ONE, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_fteid_ie_get, - &create_session_resp_p->s5_s8_pgw_teid); - DevAssert(NW_OK == rc); - - /* PAA IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_PAA, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_paa_ie_get, - &create_session_resp_p->paa); - DevAssert(NW_OK == rc); - - /* Bearer Contexts Created IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_BEARER_CONTEXT, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_bearer_context_created_ie_get, - &create_session_resp_p->bearer_context_created); - DevAssert(NW_OK == rc); - - /* Run the parser */ - rc = nwGtpv2cMsgParserRun(pMsgParser, - (pUlpApi->hMsg), - &offendingIeType, - &offendingIeInstance, - &offendingIeLength); - - if (rc != NW_OK) { - /* TODO: handle this case */ - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return -1; - } - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - - -int s11_mme_release_access_bearers_request(NwGtpv2cStackHandleT *stack_p, - SgwReleaseAccessBearersRequest *release_access_bearers_p) -{ - NwGtpv2cUlpApiT ulp_req; - - NwRcT rc; - uint8_t restart_counter = 0; - - DevAssert(stack_p != NULL); - DevAssert(release_access_bearers_p != NULL); - - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - - AssertFatal(0 == 1, "TODO s11_mme_release_access_bearers_request()"); -} diff --git a/openair-cn/S11/s11_mme_session_manager.h b/openair-cn/S11/s11_mme_session_manager.h deleted file mode 100644 index dd11f859bc..0000000000 --- a/openair-cn/S11/s11_mme_session_manager.h +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#ifndef S11_MME_SESSION_MANAGER_H_ -#define S11_MME_SESSION_MANAGER_H_ - -/* @brief Create a new Create Session Request and send it to provided S-GW. - */ -int s11_mme_create_session_request(NwGtpv2cStackHandleT *stack_p, - SgwCreateSessionRequest *create_session_p); - - -/* @brief Create a new Release Access Bearers Request and send it to provided S-GW. - */ -int s11_mme_release_access_bearers_request(NwGtpv2cStackHandleT *stack_p, - SgwReleaseAccessBearersRequest *release_access_bearers_p); - -/* @brief Handle a Create Session Response received from S-GW. - */ -int s11_mme_handle_create_session_response(NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi); - -#endif /* S11_MME_SESSION_MANAGER_H_ */ diff --git a/openair-cn/S11/s11_mme_task.c b/openair-cn/S11/s11_mme_task.c deleted file mode 100644 index d2a52aff96..0000000000 --- a/openair-cn/S11/s11_mme_task.c +++ /dev/null @@ -1,322 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include -#include -#include - -#include "assertions.h" - -#include "mme_config.h" -#include "intertask_interface.h" - -#include "timer.h" - -#include "NwLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cMsg.h" - -#include "s11_mme.h" -#include "s11_mme_session_manager.h" - -#define S11_DEBUG(x, args...) fprintf(stdout, "[S11] [D]"x, ##args) -#define S11_INFO(x, args...) fprintf(stdout, "[S11] [I]"x, ##args) -#define S11_WARN(x, args...) fprintf(stdout, "[S11] [W]"x, ##args) -#define S11_ERROR(x, args...) fprintf(stderr, "[S11] [E]"x, ##args) - -static NwGtpv2cStackHandleT s11_mme_stack_handle; - -static -NwRcT s11_mme_log_wrapper(NwGtpv2cLogMgrHandleT hLogMgr, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr) -{ - S11_DEBUG("%s\n", logStr); - return NW_OK; -} - -static -NwRcT s11_mme_ulp_process_stack_req_cb( - NwGtpv2cUlpHandleT hUlp, NwGtpv2cUlpApiT *pUlpApi) -{ - // NwRcT rc = NW_OK; - int ret = 0; - - DevAssert(pUlpApi != NULL); - - switch(pUlpApi->apiType) { - case NW_GTPV2C_ULP_API_TRIGGERED_RSP_IND: - S11_DEBUG("Received triggered response indication\n"); - - switch (pUlpApi->apiInfo.triggeredRspIndInfo.msgType) { - case NW_GTP_CREATE_SESSION_RSP: - ret = s11_mme_handle_create_session_response( - &s11_mme_stack_handle, pUlpApi); - break; - - default: - S11_WARN("Received unhandled message type %d\n", - pUlpApi->apiInfo.triggeredRspIndInfo.msgType); - break; - } - - break; - - default: - break; - } - - return ret == 0 ? NW_OK : NW_FAILURE; -} - -static -NwRcT s11_mme_send_udp_msg( - NwGtpv2cUdpHandleT udpHandle, - uint8_t *buffer, - uint32_t buffer_len, - uint32_t peerIpAddr, - uint32_t peerPort) -{ - // Create and alloc new message - MessageDef *message_p; - udp_data_req_t *udp_data_req_p; - int ret = 0; - - message_p = itti_alloc_new_message(TASK_S11, UDP_DATA_REQ); - - udp_data_req_p = &message_p->ittiMsg.udp_data_req; - - udp_data_req_p->peer_address = peerIpAddr; - udp_data_req_p->peer_port = peerPort; - udp_data_req_p->buffer = buffer; - udp_data_req_p->buffer_length = buffer_len; - - ret = itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); - - return ((ret == 0) ? NW_OK : NW_FAILURE); -} - -static -NwRcT s11_mme_start_timer_wrapper( - NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void *timeoutArg, - NwGtpv2cTimerHandleT *hTmr) -{ - long timer_id; - int ret = 0; - - if (tmrType == NW_GTPV2C_TMR_TYPE_REPETITIVE) { - ret = timer_setup(timeoutSec, - timeoutUsec, - TASK_S11, - INSTANCE_DEFAULT, - TIMER_PERIODIC, - timeoutArg, - &timer_id); - } else { - ret = timer_setup(timeoutSec, - timeoutUsec, - TASK_S11, - INSTANCE_DEFAULT, - TIMER_ONE_SHOT, - timeoutArg, - &timer_id); - } - - *hTmr = (NwGtpv2cTimerHandleT)timer_id; - - return ((ret == 0) ? NW_OK : NW_FAILURE); -} - -static -NwRcT s11_mme_stop_timer_wrapper( - NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT tmrHandle) -{ - long timer_id; - - timer_id = (long)tmrHandle; - - return ((timer_remove(timer_id) == 0) ? NW_OK : NW_FAILURE); -} - -static void *s11_mme_thread(void *args) -{ - itti_mark_task_ready(TASK_S11); - - while(1) { - MessageDef *received_message_p = NULL; - itti_receive_msg(TASK_S11, &received_message_p); - assert(received_message_p != NULL); - - switch (ITTI_MSG_ID(received_message_p)) { - case SGW_CREATE_SESSION_REQUEST: { - s11_mme_create_session_request( - &s11_mme_stack_handle, - &received_message_p->ittiMsg.sgwCreateSessionRequest); - } - break; - - case SGW_RELEASE_ACCESS_BEARERS_REQUEST: { - s11_mme_release_access_bearers_request( - &s11_mme_stack_handle, - &received_message_p->ittiMsg.sgwReleaseAccessBearersRequest); - } - break; - - case UDP_DATA_IND: { - /* We received new data to handle from the UDP layer */ - NwRcT rc; - udp_data_ind_t *udp_data_ind; - - udp_data_ind = &received_message_p->ittiMsg.udp_data_ind; - - rc = nwGtpv2cProcessUdpReq(s11_mme_stack_handle, - udp_data_ind->buffer, - udp_data_ind->buffer_length, - udp_data_ind->peer_port, - udp_data_ind->peer_address); - - DevAssert(rc == NW_OK); - } - break; - - case TIMER_HAS_EXPIRED: { - S11_DEBUG("Processing timeout for timer_id 0x%lx and arg %p\n", - received_message_p->ittiMsg.timer_has_expired.timer_id, - received_message_p->ittiMsg.timer_has_expired.arg); - DevAssert(nwGtpv2cProcessTimeout( - received_message_p->ittiMsg.timer_has_expired.arg) == NW_OK); - } - break; - - default: { - S11_ERROR("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), - ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -static int s11_send_init_udp(char *address, uint16_t port_number) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S11, UDP_INIT); - - if (message_p == NULL) { - return -1; - } - - message_p->ittiMsg.udp_init.port = port_number; - //LG message_p->ittiMsg.udpInit.address = "0.0.0.0"; //ANY address - message_p->ittiMsg.udp_init.address = address; - - S11_DEBUG("Tx UDP_INIT IP addr %s\n", message_p->ittiMsg.udp_init.address); - - return itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); -} - -int s11_mme_init(const mme_config_t *mme_config_p) -{ - int ret = 0; - NwGtpv2cUlpEntityT ulp; - NwGtpv2cUdpEntityT udp; - NwGtpv2cTimerMgrEntityT tmrMgr; - NwGtpv2cLogMgrEntityT logMgr; - - struct in_addr addr; - char *s11_address_str = NULL; - - S11_DEBUG("Initializing S11 interface\n"); - - if (nwGtpv2cInitialize(&s11_mme_stack_handle) != NW_OK) { - S11_ERROR("Failed to initialize gtpv2-c stack\n"); - goto fail; - } - - /* Set ULP entity */ - ulp.hUlp = (NwGtpv2cUlpHandleT)NULL; - ulp.ulpReqCallback = s11_mme_ulp_process_stack_req_cb; - DevAssert(NW_OK == nwGtpv2cSetUlpEntity(s11_mme_stack_handle, &ulp)); - - /* Set UDP entity */ - udp.hUdp = (NwGtpv2cUdpHandleT)NULL; - udp.udpDataReqCallback = s11_mme_send_udp_msg; - DevAssert(NW_OK == nwGtpv2cSetUdpEntity(s11_mme_stack_handle, &udp)); - - /* Set Timer entity */ - tmrMgr.tmrMgrHandle = (NwGtpv2cTimerMgrHandleT)NULL; - tmrMgr.tmrStartCallback = s11_mme_start_timer_wrapper; - tmrMgr.tmrStopCallback = s11_mme_stop_timer_wrapper; - DevAssert(NW_OK == nwGtpv2cSetTimerMgrEntity(s11_mme_stack_handle, &tmrMgr)); - - logMgr.logMgrHandle = 0; - logMgr.logReqCallback = s11_mme_log_wrapper; - DevAssert(NW_OK == nwGtpv2cSetLogMgrEntity(s11_mme_stack_handle, &logMgr)); - - if (itti_create_task(TASK_S11, &s11_mme_thread, NULL) < 0) { - S11_ERROR("gtpv1u phtread_create: %s\n", strerror(errno)); - goto fail; - } - - DevAssert(NW_OK == nwGtpv2cSetLogLevel(s11_mme_stack_handle, - NW_LOG_LEVEL_DEBG)); - - config_read_lock(&mme_config); - addr.s_addr = mme_config.ipv4.mme_ip_address_for_S11; - config_unlock(&mme_config); - - s11_address_str = inet_ntoa(addr); - - DevAssert(s11_address_str != NULL); - - s11_send_init_udp(s11_address_str, 2123); - - S11_DEBUG("Initializing S11 interface: DONE\n"); - - return ret; - -fail: - S11_DEBUG("Initializing S11 interface: FAILURE\n"); - return -1; -} diff --git a/openair-cn/S11/s11_sgw.c b/openair-cn/S11/s11_sgw.c deleted file mode 100644 index ae62a1334a..0000000000 --- a/openair-cn/S11/s11_sgw.c +++ /dev/null @@ -1,347 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include -#include - -#include "assertions.h" -#include "queue.h" - -#include "mme_config.h" -#include "intertask_interface.h" - -#include "timer.h" - -#include "NwLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" - -#include "sgw_lite_ie_defs.h" - -#include "s11_common.h" -#include "s11_sgw.h" -#include "s11_sgw_bearer_manager.h" -#include "s11_sgw_session_manager.h" - -static NwGtpv2cStackHandleT s11_sgw_stack_handle; - -/* ULP callback for the GTPv2-C stack */ -static -NwRcT s11_sgw_ulp_process_stack_req_cb( - NwGtpv2cUlpHandleT hUlp, NwGtpv2cUlpApiT *pUlpApi) -{ - int ret = 0; - - DevAssert(pUlpApi != NULL); - - switch (pUlpApi->apiType) { - case NW_GTPV2C_ULP_API_INITIAL_REQ_IND: - S11_DEBUG("Received initial req indication\n"); - - switch (pUlpApi->apiInfo.initialReqIndInfo.msgType) { - case NW_GTP_CREATE_SESSION_REQ: - ret = s11_sgw_handle_create_session_request( - &s11_sgw_stack_handle, pUlpApi); - break; - - case NW_GTP_MODIFY_BEARER_REQ: - ret = s11_sgw_handle_modify_bearer_request( - &s11_sgw_stack_handle, pUlpApi); - break; - - case NW_GTP_DELETE_SESSION_REQ: - ret = s11_sgw_handle_delete_session_request( - &s11_sgw_stack_handle, pUlpApi); - break; - - default: - S11_WARN("Received unhandled message type %d\n", - pUlpApi->apiInfo.initialReqIndInfo.msgType); - break; - } - - break; - - default: - S11_ERROR("Received unknown stack req message %d\n", - pUlpApi->apiType); - break; - } - - return ret == -1 ? NW_FAILURE : NW_OK; -} - -static -NwRcT s11_sgw_send_udp_msg( - NwGtpv2cUdpHandleT udpHandle, - uint8_t *buffer, - uint32_t buffer_len, - uint32_t peerIpAddr, - uint32_t peerPort) -{ - // Create and alloc new message - MessageDef *message_p; - udp_data_req_t *udp_data_req_p; - int ret = 0; - - message_p = itti_alloc_new_message(TASK_S11, UDP_DATA_REQ); - - udp_data_req_p = &message_p->ittiMsg.udp_data_req; - - udp_data_req_p->peer_address = peerIpAddr; - udp_data_req_p->peer_port = peerPort; - udp_data_req_p->buffer = buffer; - udp_data_req_p->buffer_length = buffer_len; - - ret = itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); - - return ret == 0 ? NW_OK : NW_FAILURE; -} - -static -NwRcT s11_sgw_log_wrapper(NwGtpv2cLogMgrHandleT hLogMgr, - uint32_t logLevel, - NwCharT* file, - uint32_t line, - NwCharT* logStr) -{ - S11_DEBUG("%s\n", logStr); - return NW_OK; -} - -static -NwRcT s11_sgw_start_timer_wrapper( - NwGtpv2cTimerMgrHandleT tmrMgrHandle, - uint32_t timeoutSec, - uint32_t timeoutUsec, - uint32_t tmrType, - void *timeoutArg, - NwGtpv2cTimerHandleT *hTmr) -{ - long timer_id; - int ret = 0; - - if (tmrType == NW_GTPV2C_TMR_TYPE_REPETITIVE) { - ret = timer_setup(timeoutSec, - timeoutUsec, - TASK_S11, - INSTANCE_DEFAULT, - TIMER_PERIODIC, - timeoutArg, - &timer_id); - } else { - ret = timer_setup(timeoutSec, - timeoutUsec, - TASK_S11, - INSTANCE_DEFAULT, - TIMER_ONE_SHOT, - timeoutArg, - &timer_id); - } - - return ret == 0 ? NW_OK : NW_FAILURE; -} - -static -NwRcT s11_sgw_stop_timer_wrapper( - NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwGtpv2cTimerHandleT tmrHandle) -{ - int ret; - long timer_id; - - timer_id = (long)tmrHandle; - - ret = timer_remove(timer_id); //TODO - - return ret == 0 ? NW_OK : NW_FAILURE; -} - -static void *s11_sgw_thread(void *args) -{ - itti_mark_task_ready(TASK_S11); - - while(1) { - MessageDef *received_message_p = NULL; - itti_receive_msg(TASK_S11, &received_message_p); - assert(received_message_p != NULL); - - switch (ITTI_MSG_ID(received_message_p)) { - case UDP_DATA_IND: { - /* We received new data to handle from the UDP layer */ - NwRcT rc; - udp_data_ind_t *udp_data_ind; - - udp_data_ind = &received_message_p->ittiMsg.udp_data_ind; - - S11_DEBUG("Processing new data indication from UDP\n"); - - rc = nwGtpv2cProcessUdpReq(s11_sgw_stack_handle, - udp_data_ind->buffer, - udp_data_ind->buffer_length, - udp_data_ind->peer_port, - udp_data_ind->peer_address); - - DevAssert(rc == NW_OK); - } - break; - - case SGW_CREATE_SESSION_RESPONSE: { - S11_DEBUG("Received create session response from S-PGW APP\n"); - s11_sgw_handle_create_session_response( - &s11_sgw_stack_handle, - &received_message_p->ittiMsg.sgwCreateSessionResponse); - } - break; - - case SGW_MODIFY_BEARER_RESPONSE: { - S11_DEBUG("Received modify bearer response from S-PGW APP\n"); - s11_sgw_handle_modify_bearer_response( - &s11_sgw_stack_handle, - &received_message_p->ittiMsg.sgwModifyBearerResponse); - } - break; - - case SGW_DELETE_SESSION_RESPONSE: { - S11_DEBUG("Received delete session response from S-PGW APP\n"); - s11_sgw_handle_delete_session_response( - &s11_sgw_stack_handle, - &received_message_p->ittiMsg.sgwDeleteSessionResponse); - } - break; - - case TIMER_HAS_EXPIRED: { - S11_DEBUG("Processing timeout for timer_id 0x%lx and arg %p\n", - received_message_p->ittiMsg.timer_has_expired.timer_id, - received_message_p->ittiMsg.timer_has_expired.arg); - DevAssert(nwGtpv2cProcessTimeout(received_message_p->ittiMsg.timer_has_expired.arg) == NW_OK); - } - break; - - default: { - S11_ERROR("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -static int s11_send_init_udp(char *address, uint16_t port_number) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S11, UDP_INIT); - - if (message_p == NULL) { - return -1; - } - - message_p->ittiMsg.udp_init.port = port_number; - //LG message_p->ittiMsg.udpInit.address = "0.0.0.0"; //ANY address - message_p->ittiMsg.udp_init.address = address; - - S11_DEBUG("Tx UDP_INIT IP addr %s\n", message_p->ittiMsg.udp_init.address); - - return itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); -} - -int s11_sgw_init(const mme_config_t *mme_config_p) -{ - int ret = 0; - NwGtpv2cUlpEntityT ulp; - NwGtpv2cUdpEntityT udp; - NwGtpv2cTimerMgrEntityT tmrMgr; - NwGtpv2cLogMgrEntityT logMgr; - struct in_addr addr; - char *s11_address_str = NULL; - - S11_DEBUG("Initializing S11 interface\n"); - - if (nwGtpv2cInitialize(&s11_sgw_stack_handle) != NW_OK) { - S11_ERROR("Failed to initialize gtpv2-c stack\n"); - goto fail; - } - - /* Set ULP entity */ - ulp.hUlp = (NwGtpv2cUlpHandleT)NULL; - ulp.ulpReqCallback = s11_sgw_ulp_process_stack_req_cb; - DevAssert(NW_OK == nwGtpv2cSetUlpEntity(s11_sgw_stack_handle, &ulp)); - - /* Set UDP entity */ - udp.hUdp = (NwGtpv2cUdpHandleT)NULL; - udp.udpDataReqCallback = s11_sgw_send_udp_msg; - DevAssert(NW_OK == nwGtpv2cSetUdpEntity(s11_sgw_stack_handle, &udp)); - - /* Set Timer entity */ - tmrMgr.tmrMgrHandle = (NwGtpv2cTimerMgrHandleT)NULL; - tmrMgr.tmrStartCallback = s11_sgw_start_timer_wrapper; - tmrMgr.tmrStopCallback = s11_sgw_stop_timer_wrapper; - DevAssert(NW_OK == nwGtpv2cSetTimerMgrEntity(s11_sgw_stack_handle, &tmrMgr)); - - logMgr.logMgrHandle = 0; - logMgr.logReqCallback = s11_sgw_log_wrapper; - - DevAssert(NW_OK == nwGtpv2cSetLogMgrEntity(s11_sgw_stack_handle, &logMgr)); - - if (itti_create_task(TASK_S11, &s11_sgw_thread, NULL) < 0) { - S11_ERROR("gtpv1u phtread_create: %s\n", strerror(errno)); - goto fail; - } - - DevAssert(NW_OK == nwGtpv2cSetLogLevel(s11_sgw_stack_handle, - NW_LOG_LEVEL_DEBG)); - - config_read_lock(&mme_config); - addr.s_addr = mme_config.ipv4.sgw_ip_address_for_S11; - config_unlock(&mme_config); - - s11_address_str = inet_ntoa(addr); - - DevAssert(s11_address_str != NULL); - - s11_send_init_udp(s11_address_str, 2123); - - S11_DEBUG("Initializing S11 interface: DONE\n"); - - return ret; - -fail: - S11_DEBUG("Initializing S11 interface: FAILURE\n"); - return -1; -} diff --git a/openair-cn/S11/s11_sgw.h b/openair-cn/S11/s11_sgw.h deleted file mode 100644 index ed98169f8b..0000000000 --- a/openair-cn/S11/s11_sgw.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_SGW_H_ -#define S11_SGW_H_ - -int s11_sgw_init(const mme_config_t *mme_config); - -#endif /* S11_SGW_H_ */ diff --git a/openair-cn/S11/s11_sgw_bearer_manager.c b/openair-cn/S11/s11_sgw_bearer_manager.c deleted file mode 100644 index 27337a25f3..0000000000 --- a/openair-cn/S11/s11_sgw_bearer_manager.c +++ /dev/null @@ -1,237 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "assertions.h" -#include "intertask_interface.h" -#include "queue.h" - -#include "NwLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" - -#include "sgw_lite_ie_defs.h" - -#include "s11_common.h" -#include "s11_sgw_bearer_manager.h" -#include "s11_ie_formatter.h" - -int s11_sgw_handle_modify_bearer_request(NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc = NW_OK; - uint8_t offendingIeType, offendingIeInstance; - uint16_t offendingIeLength; - - SgwModifyBearerRequest *modify_bearer_request_p; - MessageDef *message_p; - - NwGtpv2cMsgParserT *pMsgParser; - - DevAssert(stack_p != NULL); - - message_p = itti_alloc_new_message(TASK_S11, SGW_MODIFY_BEARER_REQUEST); - - modify_bearer_request_p = &message_p->ittiMsg.sgwModifyBearerRequest; - - modify_bearer_request_p->trxn = (void *)pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - modify_bearer_request_p->teid = nwGtpv2cMsgGetTeid(pUlpApi->hMsg); - - /* Create a new message parser */ - rc = nwGtpv2cMsgParserNew(*stack_p, - NW_GTP_MODIFY_BEARER_REQ, - s11_ie_indication_generic, - NULL, - &pMsgParser); - DevAssert(NW_OK == rc); - - /* Indication Flags IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_INDICATION, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_indication_flags_ie_get, - &modify_bearer_request_p->indication_flags); - DevAssert(NW_OK == rc); - - /* MME-FQ-CSID IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_FQ_CSID, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_fqcsid_ie_get, - &modify_bearer_request_p->mme_fq_csid); - DevAssert(NW_OK == rc); - - /* RAT Type IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_RAT_TYPE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_rat_type_ie_get, - &modify_bearer_request_p->rat_type); - DevAssert(NW_OK == rc); - - /* Delay Value IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_DELAY_VALUE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_delay_value_ie_get, - &modify_bearer_request_p->delay_dl_packet_notif_req); - DevAssert(NW_OK == rc); - - /* Bearer Context to be modified IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, - NW_GTPV2C_IE_BEARER_CONTEXT, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_bearer_context_to_modifiy_ie_get, - &modify_bearer_request_p->bearer_context_to_modify); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgParserRun(pMsgParser, - pUlpApi->hMsg, - &offendingIeType, - &offendingIeInstance, - &offendingIeLength); - - if (rc != NW_OK) { - gtp_cause_t cause; - NwGtpv2cUlpApiT ulp_req; - - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause , 0, sizeof(gtp_cause_t)); - - cause.offending_ie_type = offendingIeType; - cause.offending_ie_length = offendingIeLength; - cause.offending_ie_instance = offendingIeInstance; - - switch (rc) { - case NW_GTPV2C_MANDATORY_IE_MISSING: - S11_DEBUG("Mandatory IE type '%u' of instance '%u' missing!\n", - offendingIeType, offendingIeLength); - cause.cause_value = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - break; - - default: - S11_DEBUG("Unknown message parse error!\n"); - cause.cause_value = 0; - break; - } - - /* - * Send Create session response with failure to Gtpv2c Stack Instance - */ - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_CREATE_SESSION_RSP, - 0, - nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg), - &(ulp_req.hMsg)); - - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - S11_DEBUG("Received NW_GTP_CREATE_SESSION_REQ, Sending NW_GTP_CREATE_SESSION_RSP!\n"); - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return 0; - } - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return itti_send_msg_to_task(TASK_SPGW_APP, INSTANCE_DEFAULT, message_p); -} - -int s11_sgw_handle_modify_bearer_response( - NwGtpv2cStackHandleT *stack_p, - SgwModifyBearerResponse *modify_bearer_response_p) -{ - gtp_cause_t cause; - NwRcT rc; - NwGtpv2cUlpApiT ulp_req; - NwGtpv2cTrxnHandleT trxn; - - DevAssert(stack_p != NULL); - DevAssert(modify_bearer_response_p != NULL); - - trxn = (NwGtpv2cTrxnHandleT)modify_bearer_response_p->trxn; - - /* Prepare a modify bearer response to send to MME. - */ - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause , 0, sizeof(gtp_cause_t)); - - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = trxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_MODIFY_BEARER_RSP, - 0, - 0, - &(ulp_req.hMsg)); - DevAssert(NW_OK == rc); - - /* Set the remote TEID */ - rc = nwGtpv2cMsgSetTeid(ulp_req.hMsg, modify_bearer_response_p->teid); - DevAssert(NW_OK == rc); - - cause.cause_value = (uint8_t)modify_bearer_response_p->cause; - - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - return 0; -} diff --git a/openair-cn/S11/s11_sgw_bearer_manager.h b/openair-cn/S11/s11_sgw_bearer_manager.h deleted file mode 100644 index cfbbd389fc..0000000000 --- a/openair-cn/S11/s11_sgw_bearer_manager.h +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_SGW_BEARER_MANAGER_H_ -#define S11_SGW_BEARER_MANAGER_H_ - -int s11_sgw_handle_modify_bearer_request( - NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi); - -int s11_sgw_handle_modify_bearer_response( - NwGtpv2cStackHandleT *stack_p, - SgwModifyBearerResponse *modify_bearer_response_p); - -#endif /* S11_SGW_BEARER_MANAGER_H_ */ diff --git a/openair-cn/S11/s11_sgw_session_manager.c b/openair-cn/S11/s11_sgw_session_manager.c deleted file mode 100644 index dc313c7935..0000000000 --- a/openair-cn/S11/s11_sgw_session_manager.c +++ /dev/null @@ -1,526 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include -#include -#include - -#include "assertions.h" -#include "intertask_interface.h" -#include "queue.h" - -#include "NwLog.h" -#include "NwGtpv2c.h" -#include "NwGtpv2cIe.h" -#include "NwGtpv2cMsg.h" -#include "NwGtpv2cMsgParser.h" - -#include "sgw_lite_ie_defs.h" - -#include "s11_common.h" -#include "s11_sgw_session_manager.h" -#include "s11_ie_formatter.h" - -int s11_sgw_handle_create_session_request(NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc = NW_OK; - uint8_t offendingIeType, offendingIeInstance; - uint16_t offendingIeLength; - - SgwCreateSessionRequest *create_session_request_p; - MessageDef *message_p; - - NwGtpv2cMsgParserT *pMsgParser; - - DevAssert(stack_p != NULL); - - message_p = itti_alloc_new_message(TASK_S11, SGW_CREATE_SESSION_REQUEST); - - create_session_request_p = &message_p->ittiMsg.sgwCreateSessionRequest; - - /* Create a new message parser */ - rc = nwGtpv2cMsgParserNew(*stack_p, NW_GTP_CREATE_SESSION_REQ, - s11_ie_indication_generic, - NULL, &pMsgParser); - DevAssert(NW_OK == rc); - - /* Imsi IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_IMSI, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_imsi_ie_get, - &create_session_request_p->imsi); - DevAssert(NW_OK == rc); - - /* MSISDN IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_MSISDN, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_msisdn_ie_get, - &create_session_request_p->msisdn); - DevAssert(NW_OK == rc); - - /* MEI IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_MEI, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_mei_ie_get, - &create_session_request_p->mei); - DevAssert(NW_OK == rc); - - /* ULI IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_ULI, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_uli_ie_get, - &create_session_request_p->uli); - DevAssert(NW_OK == rc); - - /* Serving Network IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_SERVING_NETWORK, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_serving_network_ie_get, - &create_session_request_p->serving_network); - DevAssert(NW_OK == rc); - - /* RAT Type IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_RAT_TYPE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_rat_type_ie_get, - &create_session_request_p->rat_type); - DevAssert(NW_OK == rc); - - /* Indication Flags IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_INDICATION, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_indication_flags_ie_get, - &create_session_request_p->indication_flags); - DevAssert(NW_OK == rc); - - /* APN IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_APN, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_apn_ie_get, &create_session_request_p->apn); - DevAssert(NW_OK == rc); - - /* Selection Mode IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_SELECTION_MODE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_ie_indication_generic, NULL); - DevAssert(NW_OK == rc); - - /* PDN Type IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_PDN_TYPE, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_pdn_type_ie_get, &create_session_request_p->pdn_type); - DevAssert(NW_OK == rc); - - /* PAA IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_PAA, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_paa_ie_get, &create_session_request_p->paa); - DevAssert(NW_OK == rc); - - /* Sender FTEID for CP IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_FTEID, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_fteid_ie_get, - &create_session_request_p->sender_fteid_for_cp); - DevAssert(NW_OK == rc); - - /* PGW FTEID for CP IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_FTEID, - NW_GTPV2C_IE_INSTANCE_ONE, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_fteid_ie_get, - &create_session_request_p->pgw_address_for_cp); - DevAssert(NW_OK == rc); - - /* APN Restriction IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_APN_RESTRICTION, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_ie_indication_generic, NULL); - DevAssert(NW_OK == rc); - - /* Bearer Context IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_BEARER_CONTEXT, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_bearer_context_ie_get, - &create_session_request_p->bearer_to_create); - DevAssert(NW_OK == rc); - - /* AMBR IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_AMBR, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_ambr_ie_get, - &create_session_request_p->ambr); - DevAssert(NW_OK == rc); - - /* Recovery IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_RECOVERY, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_MANDATORY, - s11_ie_indication_generic, NULL); - DevAssert(NW_OK == rc); - - create_session_request_p->teid = nwGtpv2cMsgGetTeid(pUlpApi->hMsg); - create_session_request_p->trxn = (void*)pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - create_session_request_p->peer_ip = pUlpApi->apiInfo.initialReqIndInfo.peerIp; - - rc = nwGtpv2cMsgParserRun(pMsgParser, - pUlpApi->hMsg, - &offendingIeType, - &offendingIeInstance, - &offendingIeLength); - - if (rc != NW_OK) { - gtp_cause_t cause; - - NwGtpv2cUlpApiT ulp_req; - - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause , 0, sizeof(gtp_cause_t)); - - cause.offending_ie_type = offendingIeType; - cause.offending_ie_length = offendingIeLength; - cause.offending_ie_instance = offendingIeInstance; - - switch (rc) { - case NW_GTPV2C_MANDATORY_IE_MISSING: - S11_DEBUG("Mandatory IE type '%u' of instance '%u' missing!\n", - offendingIeType, offendingIeLength); - cause.cause_value = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - break; - - default: - S11_DEBUG("Unknown message parse error!\n"); - cause.cause_value = 0; - break; - } - - /* - * Send Create session response with failure to Gtpv2c Stack Instance - */ - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_CREATE_SESSION_RSP, - 0, - nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg), - &(ulp_req.hMsg)); - - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - S11_DEBUG("Received NW_GTP_CREATE_SESSION_REQ, Sending NW_GTP_CREATE_SESSION_RSP!\n"); - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return 0; - } - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return itti_send_msg_to_task(TASK_SPGW_APP, INSTANCE_DEFAULT, message_p); -} - -int s11_sgw_handle_create_session_response( - NwGtpv2cStackHandleT *stack_p, - SgwCreateSessionResponse *create_session_response_p) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulp_req; - NwGtpv2cTrxnHandleT trxn; - - gtp_cause_t cause; - - DevAssert(create_session_response_p != NULL); - DevAssert(stack_p != NULL); - - trxn = (NwGtpv2cTrxnHandleT)create_session_response_p->trxn; - - DevAssert(trxn != 0); - - /* Create a tunnel for the GTPv2-C stack */ - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - - ulp_req.apiType = NW_GTPV2C_ULP_CREATE_LOCAL_TUNNEL; - ulp_req.apiInfo.createLocalTunnelInfo.teidLocal = create_session_response_p->s11_sgw_teid.teid; - ulp_req.apiInfo.createLocalTunnelInfo.peerIp = create_session_response_p->peer_ip; - - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - /* Prepare a create session response to send to MME. - */ - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause , 0, sizeof(gtp_cause_t)); - - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = trxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_CREATE_SESSION_RSP, - 0, - 0, - &(ulp_req.hMsg)); - DevAssert(NW_OK == rc); - - /* Set the remote TEID */ - rc = nwGtpv2cMsgSetTeid(ulp_req.hMsg, create_session_response_p->teid); - DevAssert(NW_OK == rc); - - cause.cause_value = (uint8_t)create_session_response_p->cause; - - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - rc = nwGtpv2cMsgAddIeFteid((ulp_req.hMsg), - NW_GTPV2C_IE_INSTANCE_ZERO, - S1_U_SGW_GTP_U, - create_session_response_p->s11_sgw_teid.teid, - 0xC0A80EA2, - NULL); - - s11_paa_ie_set(&(ulp_req.hMsg), &create_session_response_p->paa); - /* Put 0 for now i.e. no existing context or restriction */ - s11_apn_restriction_ie_set(&(ulp_req.hMsg), 0); - s11_bearer_context_created_ie_set( - &(ulp_req.hMsg), - &create_session_response_p->bearer_context_created); - - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - return 0; -} - -int s11_sgw_handle_delete_session_request(NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi) -{ - NwRcT rc = NW_OK; - uint8_t offendingIeType, offendingIeInstance; - uint16_t offendingIeLength; - - SgwDeleteSessionRequest *delete_session_request_p; - MessageDef *message_p; - - NwGtpv2cMsgParserT *pMsgParser; - - DevAssert(stack_p != NULL); - - message_p = itti_alloc_new_message(TASK_S11, SGW_DELETE_SESSION_REQUEST); - - delete_session_request_p = &message_p->ittiMsg.sgwDeleteSessionRequest; - - /* Create a new message parser */ - rc = nwGtpv2cMsgParserNew(*stack_p, NW_GTP_DELETE_SESSION_REQ, - s11_ie_indication_generic, - NULL, &pMsgParser); - DevAssert(NW_OK == rc); - - /* MME FTEID for CP IE */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_FTEID, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_OPTIONAL, - s11_fteid_ie_get, - &delete_session_request_p->sender_fteid_for_cp); - DevAssert(NW_OK == rc); - - /* Linked EPS Bearer Id IE - * This information element shall not be present for TAU/RAU/Handover with - * S-GW relocation procedures. - */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_EBI, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_OPTIONAL, - s11_ebi_ie_get, - &delete_session_request_p->lbi); - DevAssert(NW_OK == rc); - - /* Indication Flags IE - * For a Delete Session Request on S11 interface, - * only the Operation Indication flag might be present. - */ - rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_INDICATION, - NW_GTPV2C_IE_INSTANCE_ZERO, - NW_GTPV2C_IE_PRESENCE_CONDITIONAL, - s11_indication_flags_ie_get, - &delete_session_request_p->indication_flags); - DevAssert(NW_OK == rc); - - delete_session_request_p->teid = nwGtpv2cMsgGetTeid(pUlpApi->hMsg); - delete_session_request_p->trxn = (void*)pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - delete_session_request_p->peer_ip = pUlpApi->apiInfo.initialReqIndInfo.peerIp; - - rc = nwGtpv2cMsgParserRun(pMsgParser, - pUlpApi->hMsg, - &offendingIeType, - &offendingIeInstance, - &offendingIeLength); - - if (rc != NW_OK) { - NwGtpv2cUlpApiT ulp_req; - gtp_cause_t cause; - - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause , 0, sizeof(gtp_cause_t)); - - cause.offending_ie_type = offendingIeType; - cause.offending_ie_length = offendingIeLength; - cause.offending_ie_instance = offendingIeInstance; - - switch (rc) { - case NW_GTPV2C_MANDATORY_IE_MISSING: - S11_DEBUG("Mandatory IE type '%u' of instance '%u' missing!\n", - offendingIeType, offendingIeLength); - cause.cause_value = NW_GTPV2C_CAUSE_MANDATORY_IE_MISSING; - break; - - default: - S11_DEBUG("Unknown message parse error!\n"); - cause.cause_value = 0; - break; - } - - /* - * Send Create session response with failure to Gtpv2c Stack Instance - */ - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = pUlpApi->apiInfo.initialReqIndInfo.hTrxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_DELETE_SESSION_RSP, - 0, - nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg), - &(ulp_req.hMsg)); - - /* Adding the cause */ - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - S11_DEBUG("Received NW_GTP_DELETE_SESSION_REQ, Sending NW_GTP_DELETE_SESSION_RSP!\n"); - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return 0; - } - - rc = nwGtpv2cMsgParserDelete(*stack_p, pMsgParser); - DevAssert(NW_OK == rc); - - rc = nwGtpv2cMsgDelete(*stack_p, (pUlpApi->hMsg)); - DevAssert(NW_OK == rc); - - return itti_send_msg_to_task(TASK_SPGW_APP, INSTANCE_DEFAULT, message_p); -} - -int s11_sgw_handle_delete_session_response( - NwGtpv2cStackHandleT *stack_p, - SgwDeleteSessionResponse *delete_session_response_p) -{ - NwRcT rc; - NwGtpv2cUlpApiT ulp_req; - NwGtpv2cTrxnHandleT trxn; - gtp_cause_t cause; - - DevAssert(delete_session_response_p != NULL); - DevAssert(stack_p != NULL); - - trxn = (NwGtpv2cTrxnHandleT)delete_session_response_p->trxn; - - DevAssert(trxn != 0); - - /* Prepare a create session response to send to MME. - */ - memset(&ulp_req, 0, sizeof(NwGtpv2cUlpApiT)); - memset(&cause, 0, sizeof(gtp_cause_t)); - - ulp_req.apiType = NW_GTPV2C_ULP_API_TRIGGERED_RSP; - - ulp_req.apiInfo.triggeredRspInfo.hTrxn = trxn; - - rc = nwGtpv2cMsgNew(*stack_p, - NW_TRUE, - NW_GTP_DELETE_SESSION_RSP, - 0, - 0, - &(ulp_req.hMsg)); - DevAssert(NW_OK == rc); - - /* Set the remote TEID */ - rc = nwGtpv2cMsgSetTeid(ulp_req.hMsg, delete_session_response_p->teid); - DevAssert(NW_OK == rc); - - cause.cause_value = delete_session_response_p->cause; - - s11_cause_ie_set(&(ulp_req.hMsg), &cause); - - rc = nwGtpv2cProcessUlpReq(*stack_p, &ulp_req); - DevAssert(NW_OK == rc); - - return 0; -} diff --git a/openair-cn/S11/s11_sgw_session_manager.h b/openair-cn/S11/s11_sgw_session_manager.h deleted file mode 100644 index 2c920fb75e..0000000000 --- a/openair-cn/S11/s11_sgw_session_manager.h +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef S11_SGW_SESSION_MANAGER_H_ -#define S11_SGW_SESSION_MANAGER_H_ - -int s11_sgw_handle_create_session_request( - NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi); - -int s11_sgw_handle_create_session_response( - NwGtpv2cStackHandleT *stack_p, - SgwCreateSessionResponse *create_session_response_p); - -int s11_sgw_handle_delete_session_request( - NwGtpv2cStackHandleT *stack_p, - NwGtpv2cUlpApiT *pUlpApi); - -int s11_sgw_handle_delete_session_response( - NwGtpv2cStackHandleT *stack_p, - SgwDeleteSessionResponse *delete_session_response_p); - -#endif /* S11_SGW_SESSION_MANAGER_H_ */ diff --git a/openair-cn/S1AP/MESSAGES/ASN1/Makefile.am b/openair-cn/S1AP/MESSAGES/ASN1/Makefile.am deleted file mode 100644 index 818775406c..0000000000 --- a/openair-cn/S1AP/MESSAGES/ASN1/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -BUILT_SOURCES=ieregen.stamp - -ieregen.stamp: $(top_srcdir)/S1AP/MESSAGES/ASN1/$(ASN1DIR)/S1AP-PDU-Contents.asn $(top_srcdir)/S1AP/MESSAGES/ASN1/asn1tostruct.py $(top_srcdir)/configure - echo Timestamp > $@ - python $(top_srcdir)/S1AP/MESSAGES/ASN1/asn1tostruct.py -f$(top_srcdir)/S1AP/MESSAGES/ASN1/$(ASN1DIR)/S1AP-PDU-Contents.asn -o$(top_builddir)/S1AP - -clean-local: - rm -f ieregen.stamp \ No newline at end of file diff --git a/openair-cn/S1AP/MESSAGES/Makefile.am b/openair-cn/S1AP/MESSAGES/Makefile.am deleted file mode 100644 index 765f972ab8..0000000000 --- a/openair-cn/S1AP/MESSAGES/Makefile.am +++ /dev/null @@ -1,805 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -SUBDIRS= ASN1/ . -ASN_MODULEdir=. -libs1apmessagesdir=. - -ASN_MODULE_SOURCES= \ - S1ap-Criticality.c \ - S1ap-Presence.c \ - S1ap-PrivateIE-ID.c \ - S1ap-ProcedureCode.c \ - S1ap-ProtocolExtensionID.c \ - S1ap-ProtocolIE-ID.c \ - S1ap-TriggeringMessage.c \ - S1ap-IE-Extensions.c \ - S1ap-AllocationAndRetentionPriority.c \ - S1ap-Bearers-SubjectToStatusTransfer-List.c \ - S1ap-Bearers-SubjectToStatusTransfer-Item.c \ - S1ap-BitRate.c \ - S1ap-BPLMNs.c \ - S1ap-BroadcastCompletedAreaList.c \ - S1ap-Cause.c \ - S1ap-CauseMisc.c \ - S1ap-CauseProtocol.c \ - S1ap-CauseRadioNetwork.c \ - S1ap-CauseTransport.c \ - S1ap-CauseNas.c \ - S1ap-CellIdentity.c \ - S1ap-CellID-Broadcast.c \ - S1ap-CellID-Broadcast-Item.c \ - S1ap-Cdma2000PDU.c \ - S1ap-Cdma2000RATType.c \ - S1ap-Cdma2000SectorID.c \ - S1ap-Cdma2000HOStatus.c \ - S1ap-Cdma2000HORequiredIndication.c \ - S1ap-Cdma2000OneXSRVCCInfo.c \ - S1ap-Cdma2000OneXMEID.c \ - S1ap-Cdma2000OneXMSI.c \ - S1ap-Cdma2000OneXPilot.c \ - S1ap-Cdma2000OneXRAND.c \ - S1ap-Cell-Size.c \ - S1ap-CellType.c \ - S1ap-CGI.c \ - S1ap-CI.c \ - S1ap-CNDomain.c \ - S1ap-CSFallbackIndicator.c \ - S1ap-CSG-Id.c \ - S1ap-CSG-IdList.c \ - S1ap-CSG-IdList-Item.c \ - S1ap-COUNTvalue.c \ - S1ap-CriticalityDiagnostics.c \ - S1ap-CriticalityDiagnostics-IE-List.c \ - S1ap-CriticalityDiagnostics-IE-Item.c \ - S1ap-DataCodingScheme.c \ - S1ap-DL-Forwarding.c \ - S1ap-Direct-Forwarding-Path-Availability.c \ - S1ap-E-RABToBeModifiedListBearerModReq.c \ - S1ap-E-RABToBeModifiedItemBearerModReq.c \ - S1ap-E-RABReleaseListBearerRelComp.c \ - S1ap-E-RABReleaseItemBearerRelComp.c \ - S1ap-E-RABDataForwardingList.c \ - S1ap-E-RABDataForwardingItem.c \ - S1ap-E-RABToBeSetupListCtxtSUReq.c \ - S1ap-E-RABToBeSetupItemCtxtSUReq.c \ - S1ap-E-RABSetupListBearerSURes.c \ - S1ap-E-RABSetupItemBearerSURes.c \ - S1ap-E-RABFailedToSetupListHOReqAck.c \ - S1ap-E-RABFailedToSetupItemHOReqAck.c \ - S1ap-E-RABToBeSetupListBearerSUReq.c \ - S1ap-E-RABToBeSetupItemBearerSUReq.c \ - S1ap-E-RABAdmittedList.c \ - S1ap-E-RABAdmittedItem.c \ - S1ap-E-RABToBeSwitchedDLList.c \ - S1ap-E-RABToBeSwitchedDLItem.c \ - S1ap-E-RABToBeSwitchedULList.c \ - S1ap-E-RABToBeSwitchedULItem.c \ - S1ap-E-RABModifyListBearerModRes.c \ - S1ap-E-RABModifyItemBearerModRes.c \ - S1ap-E-RABSetupListCtxtSURes.c \ - S1ap-E-RABSetupItemCtxtSURes.c \ - S1ap-E-RABToBeSetupListHOReq.c \ - S1ap-E-RABToBeSetupItemHOReq.c \ - S1ap-ECGIList.c \ - S1ap-EmergencyAreaIDList.c \ - S1ap-EmergencyAreaID.c \ - S1ap-EmergencyAreaID-Broadcast.c \ - S1ap-EmergencyAreaID-Broadcast-Item.c \ - S1ap-CompletedCellinEAI.c \ - S1ap-CompletedCellinEAI-Item.c \ - S1ap-ENB-ID.c \ - S1ap-GERAN-Cell-ID.c \ - S1ap-Global-ENB-ID.c \ - S1ap-ENB-StatusTransfer-TransparentContainer.c \ - S1ap-ENB-UE-S1AP-ID.c \ - S1ap-ENBname.c \ - S1ap-ENBX2TLAs.c \ - S1ap-EncryptionAlgorithms.c \ - S1ap-EPLMNs.c \ - S1ap-EventType.c \ - S1ap-E-RAB-ID.c \ - S1ap-E-RABInformationList.c \ - S1ap-E-RABInformationListItem.c \ - S1ap-E-RABList.c \ - S1ap-E-RABItem.c \ - S1ap-E-RABLevelQoSParameters.c \ - S1ap-EUTRAN-CGI.c \ - S1ap-ExtendedRNC-ID.c \ - S1ap-ForbiddenInterRATs.c \ - S1ap-ForbiddenTAs.c \ - S1ap-ForbiddenTAs-Item.c \ - S1ap-ForbiddenTACs.c \ - S1ap-ForbiddenLAs.c \ - S1ap-ForbiddenLAs-Item.c \ - S1ap-ForbiddenLACs.c \ - S1ap-GBR-QosInformation.c \ - S1ap-GTP-TEID.c \ - S1ap-GUMMEI.c \ - S1ap-HandoverRestrictionList.c \ - S1ap-HandoverType.c \ - S1ap-HFN.c \ - S1ap-HandoverNotify.c \ - S1ap-Inter-SystemInformationTransferType.c \ - S1ap-IMSI.c \ - S1ap-IntegrityProtectionAlgorithms.c \ - S1ap-InterfacesToTrace.c \ - S1ap-LAC.c \ - S1ap-LAI.c \ - S1ap-LastVisitedCell-Item.c \ - S1ap-LastVisitedEUTRANCellInformation.c \ - S1ap-LastVisitedUTRANCellInformation.c \ - S1ap-LastVisitedGERANCellInformation.c \ - S1ap-L3-Information.c \ - S1ap-MessageIdentifier.c \ - S1ap-MMEname.c \ - S1ap-MME-Group-ID.c \ - S1ap-MME-Code.c \ - S1ap-MME-UE-S1AP-ID.c \ - S1ap-M-TMSI.c \ - S1ap-MSClassmark2.c \ - S1ap-MSClassmark3.c \ - S1ap-NAS-PDU.c \ - S1ap-NASSecurityParametersfromE-UTRAN.c \ - S1ap-NASSecurityParameterstoE-UTRAN.c \ - S1ap-NumberofBroadcastRequest.c \ - S1ap-NumberOfBroadcasts.c \ - S1ap-OldBSS-ToNewBSS-Information.c \ - S1ap-OverloadAction.c \ - S1ap-OverloadResponse.c \ - S1ap-PagingDRX.c \ - S1ap-PDCP-SN.c \ - S1ap-PLMNidentity.c \ - S1ap-Pre-emptionCapability.c \ - S1ap-Pre-emptionVulnerability.c \ - S1ap-PriorityLevel.c \ - S1ap-QCI.c \ - S1ap-ReceiveStatusofULPDCPSDUs.c \ - S1ap-RelativeMMECapacity.c \ - S1ap-RAC.c \ - S1ap-RequestType.c \ - S1ap-ResetType.c \ - S1ap-ResetAll.c \ - S1ap-RIMTransfer.c \ - S1ap-RIMInformation.c \ - S1ap-RIMRoutingAddress.c \ - S1ap-ReportArea.c \ - S1ap-RepetitionPeriod.c \ - S1ap-RNC-ID.c \ - S1ap-RRC-Container.c \ - S1ap-RRC-Establishment-Cause.c \ - S1ap-SecurityKey.c \ - S1ap-SecurityContext.c \ - S1ap-SerialNumber.c \ - S1ap-SONInformation.c \ - S1ap-SONInformationRequest.c \ - S1ap-SONInformationReply.c \ - S1ap-SONConfigurationTransfer.c \ - S1ap-Source-ToTarget-TransparentContainer.c \ - S1ap-SourceBSS-ToTargetBSS-TransparentContainer.c \ - S1ap-SourceeNB-ID.c \ - S1ap-SRVCCOperationPossible.c \ - S1ap-SRVCCHOIndication.c \ - S1ap-SourceeNB-ToTargeteNB-TransparentContainer.c \ - S1ap-SourceRNC-ToTargetRNC-TransparentContainer.c \ - S1ap-ServedGUMMEIs.c \ - S1ap-ServedGUMMEIsItem.c \ - S1ap-ServedGroupIDs.c \ - S1ap-ServedMMECs.c \ - S1ap-ServedPLMNs.c \ - S1ap-SubscriberProfileIDforRFP.c \ - S1ap-SupportedTAs.c \ - S1ap-SupportedTAs-Item.c \ - S1ap-S-TMSI.c \ - S1ap-TAC.c \ - S1ap-TAIListforWarning.c \ - S1ap-TAIList.c \ - S1ap-TAIItem.c \ - S1ap-TAI.c \ - S1ap-TAI-Broadcast.c \ - S1ap-TAI-Broadcast-Item.c \ - S1ap-CompletedCellinTAI.c \ - S1ap-CompletedCellinTAI-Item.c \ - S1ap-TBCD-STRING.c \ - S1ap-TargetID.c \ - S1ap-TargeteNB-ID.c \ - S1ap-TargetRNC-ID.c \ - S1ap-TargeteNB-ToSourceeNB-TransparentContainer.c \ - S1ap-Target-ToSource-TransparentContainer.c \ - S1ap-TargetRNC-ToSourceRNC-TransparentContainer.c \ - S1ap-TargetBSS-ToSourceBSS-TransparentContainer.c \ - S1ap-TimeToWait.c \ - S1ap-Time-UE-StayedInCell.c \ - S1ap-TransportLayerAddress.c \ - S1ap-TraceActivation.c \ - S1ap-TraceDepth.c \ - S1ap-E-UTRAN-Trace-ID.c \ - S1ap-TypeOfError.c \ - S1ap-UEAggregateMaximumBitrate.c \ - S1ap-UE-S1AP-IDs.c \ - S1ap-UE-S1AP-ID-pair.c \ - S1ap-UE-associatedLogicalS1-ConnectionListRes.c \ - S1ap-UE-associatedLogicalS1-ConnectionListResAck.c \ - S1ap-UE-associatedLogicalS1-ConnectionItem.c \ - S1ap-UEIdentityIndexValue.c \ - S1ap-UE-HistoryInformation.c \ - S1ap-UEPagingID.c \ - S1ap-UERadioCapability.c \ - S1ap-UESecurityCapabilities.c \ - S1ap-WarningAreaList.c \ - S1ap-WarningType.c \ - S1ap-WarningSecurityInfo.c \ - S1ap-WarningMessageContents.c \ - S1ap-X2TNLConfigurationInfo.c \ - S1AP-PDU.c \ - S1ap-InitiatingMessage.c \ - S1ap-SuccessfulOutcome.c \ - S1ap-UnsuccessfulOutcome.c \ - S1ap-HandoverRequired.c \ - S1ap-HandoverCommand.c \ - S1ap-HandoverPreparationFailure.c \ - S1ap-HandoverRequest.c \ - S1ap-HandoverRequestAcknowledge.c \ - S1ap-HandoverFailure.c \ - S1ap-HandoverNotify.c \ - S1ap-PathSwitchRequest.c \ - S1ap-PathSwitchRequestAcknowledge.c \ - S1ap-PathSwitchRequestFailure.c \ - S1ap-E-RABSetupRequest.c \ - S1ap-E-RABSetupResponse.c \ - S1ap-E-RABModifyRequest.c \ - S1ap-E-RABModifyResponse.c \ - S1ap-E-RABReleaseIndication.c \ - S1ap-E-RABReleaseCommand.c \ - S1ap-E-RABReleaseResponse.c \ - S1ap-InitialContextSetupRequest.c \ - S1ap-InitialContextSetupResponse.c \ - S1ap-InitialContextSetupFailure.c \ - S1ap-UEContextReleaseRequest.c \ - S1ap-Paging.c \ - S1ap-DownlinkNASTransport.c \ - S1ap-InitialUEMessage.c \ - S1ap-UplinkNASTransport.c \ - S1ap-NASNonDeliveryIndication.c \ - S1ap-HandoverCancel.c \ - S1ap-HandoverCancelAcknowledge.c \ - S1ap-Reset.c \ - S1ap-ResetAcknowledge.c \ - S1ap-S1SetupResponse.c \ - S1ap-S1SetupRequest.c \ - S1ap-S1SetupFailure.c \ - S1ap-ErrorIndication.c \ - S1ap-ENBConfigurationUpdate.c \ - S1ap-ENBConfigurationUpdateAcknowledge.c \ - S1ap-ENBConfigurationUpdateFailure.c \ - S1ap-MMEConfigurationUpdate.c \ - S1ap-MMEConfigurationUpdateAcknowledge.c \ - S1ap-MMEConfigurationUpdateFailure.c \ - S1ap-DownlinkS1cdma2000tunneling.c \ - S1ap-UplinkS1cdma2000tunneling.c \ - S1ap-UEContextModificationRequest.c \ - S1ap-UEContextModificationResponse.c \ - S1ap-UEContextModificationFailure.c \ - S1ap-UECapabilityInfoIndication.c \ - S1ap-UEContextReleaseCommand.c \ - S1ap-UEContextReleaseComplete.c \ - S1ap-ENBStatusTransfer.c \ - S1ap-MMEStatusTransfer.c \ - S1ap-DeactivateTrace.c \ - S1ap-TraceStart.c \ - S1ap-TraceFailureIndication.c \ - S1ap-CellTrafficTrace.c \ - S1ap-LocationReportingControl.c \ - S1ap-LocationReportingFailureIndication.c \ - S1ap-LocationReport.c \ - S1ap-OverloadStart.c \ - S1ap-OverloadStop.c \ - S1ap-WriteReplaceWarningRequest.c \ - S1ap-WriteReplaceWarningResponse.c \ - S1ap-ENBDirectInformationTransfer.c \ - S1ap-MMEDirectInformationTransfer.c \ - S1ap-ENBConfigurationTransfer.c \ - S1ap-MMEConfigurationTransfer.c \ - S1ap-PrivateMessage.c \ - S1ap-IE.c \ - S1ap-IE-Extensions.c - -ASN_MODULE_HEADERS= \ - S1ap-Criticality.h \ - S1ap-Presence.h \ - S1ap-PrivateIE-ID.h \ - S1ap-ProcedureCode.h \ - S1ap-ProtocolExtensionID.h \ - S1ap-ProtocolIE-ID.h \ - S1ap-TriggeringMessage.h \ - S1ap-AllocationAndRetentionPriority.h \ - S1ap-Bearers-SubjectToStatusTransfer-List.h \ - S1ap-Bearers-SubjectToStatusTransfer-Item.h \ - S1ap-BitRate.h \ - S1ap-BPLMNs.h \ - S1ap-BroadcastCompletedAreaList.h \ - S1ap-Cause.h \ - S1ap-CauseMisc.h \ - S1ap-CauseProtocol.h \ - S1ap-CauseRadioNetwork.h \ - S1ap-CauseTransport.h \ - S1ap-CauseNas.h \ - S1ap-CellIdentity.h \ - S1ap-CellID-Broadcast.h \ - S1ap-CellID-Broadcast-Item.h \ - S1ap-Cdma2000PDU.h \ - S1ap-Cdma2000RATType.h \ - S1ap-Cdma2000SectorID.h \ - S1ap-Cdma2000HOStatus.h \ - S1ap-Cdma2000HORequiredIndication.h \ - S1ap-Cdma2000OneXSRVCCInfo.h \ - S1ap-Cdma2000OneXMEID.h \ - S1ap-Cdma2000OneXMSI.h \ - S1ap-Cdma2000OneXPilot.h \ - S1ap-Cdma2000OneXRAND.h \ - S1ap-Cell-Size.h \ - S1ap-CellType.h \ - S1ap-CGI.h \ - S1ap-CI.h \ - S1ap-CNDomain.h \ - S1ap-CSFallbackIndicator.h \ - S1ap-CSG-Id.h \ - S1ap-CSG-IdList.h \ - S1ap-CSG-IdList-Item.h \ - S1ap-COUNTvalue.h \ - S1ap-CriticalityDiagnostics.h \ - S1ap-CriticalityDiagnostics-IE-List.h \ - S1ap-CriticalityDiagnostics-IE-Item.h \ - S1ap-DataCodingScheme.h \ - S1ap-DL-Forwarding.h \ - S1ap-Direct-Forwarding-Path-Availability.h \ - S1ap-E-RABToBeModifiedListBearerModReq.h \ - S1ap-E-RABToBeModifiedItemBearerModReq.h \ - S1ap-E-RABReleaseListBearerRelComp.h \ - S1ap-E-RABReleaseItemBearerRelComp.h \ - S1ap-E-RABDataForwardingList.h \ - S1ap-E-RABDataForwardingItem.h \ - S1ap-E-RABToBeSetupListCtxtSUReq.h \ - S1ap-E-RABToBeSetupItemCtxtSUReq.h \ - S1ap-E-RABSetupListBearerSURes.h \ - S1ap-E-RABSetupItemBearerSURes.h \ - S1ap-E-RABFailedToSetupListHOReqAck.h \ - S1ap-E-RABFailedToSetupItemHOReqAck.h \ - S1ap-E-RABToBeSetupListBearerSUReq.h \ - S1ap-E-RABToBeSetupItemBearerSUReq.h \ - S1ap-E-RABAdmittedList.h \ - S1ap-E-RABAdmittedItem.h \ - S1ap-E-RABToBeSwitchedDLList.h \ - S1ap-E-RABToBeSwitchedDLItem.h \ - S1ap-E-RABToBeSwitchedULList.h \ - S1ap-E-RABToBeSwitchedULItem.h \ - S1ap-E-RABModifyListBearerModRes.h \ - S1ap-E-RABModifyItemBearerModRes.h \ - S1ap-E-RABSetupListCtxtSURes.h \ - S1ap-E-RABSetupItemCtxtSURes.h \ - S1ap-E-RABToBeSetupListHOReq.h \ - S1ap-E-RABToBeSetupItemHOReq.h \ - S1ap-ECGIList.h \ - S1ap-EmergencyAreaIDList.h \ - S1ap-EmergencyAreaID.h \ - S1ap-EmergencyAreaID-Broadcast.h \ - S1ap-EmergencyAreaID-Broadcast-Item.h \ - S1ap-CompletedCellinEAI.h \ - S1ap-CompletedCellinEAI-Item.h \ - S1ap-ENB-ID.h \ - S1ap-GERAN-Cell-ID.h \ - S1ap-Global-ENB-ID.h \ - S1ap-ENB-StatusTransfer-TransparentContainer.h \ - S1ap-ENB-UE-S1AP-ID.h \ - S1ap-ENBname.h \ - S1ap-ENBX2TLAs.h \ - S1ap-EncryptionAlgorithms.h \ - S1ap-EPLMNs.h \ - S1ap-EventType.h \ - S1ap-E-RAB-ID.h \ - S1ap-E-RABInformationList.h \ - S1ap-E-RABInformationListItem.h \ - S1ap-E-RABList.h \ - S1ap-E-RABItem.h \ - S1ap-E-RABLevelQoSParameters.h \ - S1ap-EUTRAN-CGI.h \ - S1ap-ExtendedRNC-ID.h \ - S1ap-ForbiddenInterRATs.h \ - S1ap-ForbiddenTAs.h \ - S1ap-ForbiddenTAs-Item.h \ - S1ap-ForbiddenTACs.h \ - S1ap-ForbiddenLAs.h \ - S1ap-ForbiddenLAs-Item.h \ - S1ap-ForbiddenLACs.h \ - S1ap-GBR-QosInformation.h \ - S1ap-GTP-TEID.h \ - S1ap-GUMMEI.h \ - S1ap-HandoverRestrictionList.h \ - S1ap-HandoverType.h \ - S1ap-HFN.h \ - S1ap-HandoverNotify.h \ - S1ap-Inter-SystemInformationTransferType.h \ - S1ap-IMSI.h \ - S1ap-IntegrityProtectionAlgorithms.h \ - S1ap-InterfacesToTrace.h \ - S1ap-LAC.h \ - S1ap-LAI.h \ - S1ap-LastVisitedCell-Item.h \ - S1ap-LastVisitedEUTRANCellInformation.h \ - S1ap-LastVisitedUTRANCellInformation.h \ - S1ap-LastVisitedGERANCellInformation.h \ - S1ap-L3-Information.h \ - S1ap-MessageIdentifier.h \ - S1ap-MMEname.h \ - S1ap-MME-Group-ID.h \ - S1ap-MME-Code.h \ - S1ap-MME-UE-S1AP-ID.h \ - S1ap-M-TMSI.h \ - S1ap-MSClassmark2.h \ - S1ap-MSClassmark3.h \ - S1ap-NAS-PDU.h \ - S1ap-NASSecurityParametersfromE-UTRAN.h \ - S1ap-NASSecurityParameterstoE-UTRAN.h \ - S1ap-NumberofBroadcastRequest.h \ - S1ap-NumberOfBroadcasts.h \ - S1ap-OldBSS-ToNewBSS-Information.h \ - S1ap-OverloadAction.h \ - S1ap-OverloadResponse.h \ - S1ap-PagingDRX.h \ - S1ap-PDCP-SN.h \ - S1ap-PLMNidentity.h \ - S1ap-Pre-emptionCapability.h \ - S1ap-Pre-emptionVulnerability.h \ - S1ap-PriorityLevel.h \ - S1ap-QCI.h \ - S1ap-ReceiveStatusofULPDCPSDUs.h \ - S1ap-RelativeMMECapacity.h \ - S1ap-RAC.h \ - S1ap-RequestType.h \ - S1ap-ResetType.h \ - S1ap-ResetAll.h \ - S1ap-RIMTransfer.h \ - S1ap-RIMInformation.h \ - S1ap-RIMRoutingAddress.h \ - S1ap-ReportArea.h \ - S1ap-RepetitionPeriod.h \ - S1ap-RNC-ID.h \ - S1ap-RRC-Container.h \ - S1ap-RRC-Establishment-Cause.h \ - S1ap-SecurityKey.h \ - S1ap-SecurityContext.h \ - S1ap-SerialNumber.h \ - S1ap-SONInformation.h \ - S1ap-SONInformationRequest.h \ - S1ap-SONInformationReply.h \ - S1ap-SONConfigurationTransfer.h \ - S1ap-Source-ToTarget-TransparentContainer.h \ - S1ap-SourceBSS-ToTargetBSS-TransparentContainer.h \ - S1ap-SourceeNB-ID.h \ - S1ap-SRVCCOperationPossible.h \ - S1ap-SRVCCHOIndication.h \ - S1ap-SourceeNB-ToTargeteNB-TransparentContainer.h \ - S1ap-SourceRNC-ToTargetRNC-TransparentContainer.h \ - S1ap-ServedGUMMEIs.h \ - S1ap-ServedGUMMEIsItem.h \ - S1ap-ServedGroupIDs.h \ - S1ap-ServedMMECs.h \ - S1ap-ServedPLMNs.h \ - S1ap-SubscriberProfileIDforRFP.h \ - S1ap-SupportedTAs.h \ - S1ap-SupportedTAs-Item.h \ - S1ap-S-TMSI.h \ - S1ap-TAC.h \ - S1ap-TAIListforWarning.h \ - S1ap-TAIList.h \ - S1ap-TAIItem.h \ - S1ap-TAI.h \ - S1ap-TAI-Broadcast.h \ - S1ap-TAI-Broadcast-Item.h \ - S1ap-CompletedCellinTAI.h \ - S1ap-CompletedCellinTAI-Item.h \ - S1ap-TBCD-STRING.h \ - S1ap-TargetID.h \ - S1ap-TargeteNB-ID.h \ - S1ap-TargetRNC-ID.h \ - S1ap-TargeteNB-ToSourceeNB-TransparentContainer.h \ - S1ap-Target-ToSource-TransparentContainer.h \ - S1ap-TargetRNC-ToSourceRNC-TransparentContainer.h \ - S1ap-TargetBSS-ToSourceBSS-TransparentContainer.h \ - S1ap-TimeToWait.h \ - S1ap-Time-UE-StayedInCell.h \ - S1ap-TransportLayerAddress.h \ - S1ap-TraceActivation.h \ - S1ap-TraceDepth.h \ - S1ap-E-UTRAN-Trace-ID.h \ - S1ap-TypeOfError.h \ - S1ap-UEAggregateMaximumBitrate.h \ - S1ap-UE-S1AP-IDs.h \ - S1ap-UE-S1AP-ID-pair.h \ - S1ap-UE-associatedLogicalS1-ConnectionListRes.h \ - S1ap-UE-associatedLogicalS1-ConnectionListResAck.h \ - S1ap-UE-associatedLogicalS1-ConnectionItem.h \ - S1ap-UEIdentityIndexValue.h \ - S1ap-UE-HistoryInformation.h \ - S1ap-UEPagingID.h \ - S1ap-UERadioCapability.h \ - S1ap-UESecurityCapabilities.h \ - S1ap-WarningAreaList.h \ - S1ap-WarningType.h \ - S1ap-WarningSecurityInfo.h \ - S1ap-WarningMessageContents.h \ - S1ap-X2TNLConfigurationInfo.h \ - S1AP-PDU.h \ - S1ap-InitiatingMessage.h \ - S1ap-SuccessfulOutcome.h \ - S1ap-UnsuccessfulOutcome.h \ - S1ap-HandoverRequired.h \ - S1ap-HandoverCommand.h \ - S1ap-HandoverPreparationFailure.h \ - S1ap-HandoverRequest.h \ - S1ap-HandoverRequestAcknowledge.h \ - S1ap-HandoverFailure.h \ - S1ap-PathSwitchRequest.h \ - S1ap-PathSwitchRequestAcknowledge.h \ - S1ap-PathSwitchRequestFailure.h \ - S1ap-E-RABSetupRequest.h \ - S1ap-E-RABSetupResponse.h \ - S1ap-E-RABModifyRequest.h \ - S1ap-E-RABModifyResponse.h \ - S1ap-E-RABReleaseIndication.h \ - S1ap-E-RABReleaseCommand.h \ - S1ap-E-RABReleaseResponse.h \ - S1ap-InitialContextSetupRequest.h \ - S1ap-InitialContextSetupResponse.h \ - S1ap-InitialContextSetupFailure.h \ - S1ap-UEContextReleaseRequest.h \ - S1ap-Paging.h \ - S1ap-DownlinkNASTransport.h \ - S1ap-InitialUEMessage.h \ - S1ap-UplinkNASTransport.h \ - S1ap-NASNonDeliveryIndication.h \ - S1ap-HandoverCancel.h \ - S1ap-HandoverCancelAcknowledge.h \ - S1ap-Reset.h \ - S1ap-ResetAcknowledge.h \ - S1ap-S1SetupResponse.h \ - S1ap-S1SetupRequest.h \ - S1ap-S1SetupFailure.h \ - S1ap-ErrorIndication.h \ - S1ap-ENBConfigurationUpdate.h \ - S1ap-ENBConfigurationUpdateAcknowledge.h \ - S1ap-ENBConfigurationUpdateFailure.h \ - S1ap-MMEConfigurationUpdate.h \ - S1ap-MMEConfigurationUpdateAcknowledge.h \ - S1ap-MMEConfigurationUpdateFailure.h \ - S1ap-DownlinkS1cdma2000tunneling.h \ - S1ap-UplinkS1cdma2000tunneling.h \ - S1ap-UEContextModificationRequest.h \ - S1ap-UEContextModificationResponse.h \ - S1ap-UEContextModificationFailure.h \ - S1ap-UECapabilityInfoIndication.h \ - S1ap-UEContextReleaseCommand.h \ - S1ap-UEContextReleaseComplete.h \ - S1ap-ENBStatusTransfer.h \ - S1ap-MMEStatusTransfer.h \ - S1ap-DeactivateTrace.h \ - S1ap-TraceStart.h \ - S1ap-TraceFailureIndication.h \ - S1ap-CellTrafficTrace.h \ - S1ap-LocationReportingControl.h \ - S1ap-LocationReportingFailureIndication.h \ - S1ap-LocationReport.h \ - S1ap-OverloadStart.h \ - S1ap-OverloadStop.h \ - S1ap-WriteReplaceWarningRequest.h \ - S1ap-WriteReplaceWarningResponse.h \ - S1ap-ENBDirectInformationTransfer.h \ - S1ap-MMEDirectInformationTransfer.h \ - S1ap-ENBConfigurationTransfer.h \ - S1ap-MMEConfigurationTransfer.h \ - S1ap-PrivateMessage.h \ - S1ap-IE.h \ - S1ap-IE-Extensions.h - -ASN_MODULE_HEADERS+=ANY.h -ASN_MODULE_SOURCES+=ANY.c -ASN_MODULE_HEADERS+=BOOLEAN.h -ASN_MODULE_SOURCES+=BOOLEAN.c -ASN_MODULE_HEADERS+=INTEGER.h -ASN_MODULE_HEADERS+=NativeEnumerated.h -ASN_MODULE_SOURCES+=INTEGER.c -ASN_MODULE_HEADERS+=NULL.h -ASN_MODULE_SOURCES+=NULL.c -ASN_MODULE_SOURCES+=NativeEnumerated.c -ASN_MODULE_HEADERS+=NativeInteger.h -ASN_MODULE_SOURCES+=NativeInteger.c -ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h -ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.c -ASN_MODULE_HEADERS+=PrintableString.h -ASN_MODULE_SOURCES+=PrintableString.c -ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h -ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c -ASN_MODULE_HEADERS+=asn_SET_OF.h -ASN_MODULE_SOURCES+=asn_SET_OF.c -ASN_MODULE_HEADERS+=constr_CHOICE.h -ASN_MODULE_SOURCES+=constr_CHOICE.c -ASN_MODULE_HEADERS+=constr_SEQUENCE.h -ASN_MODULE_SOURCES+=constr_SEQUENCE.c -ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h -ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c -ASN_MODULE_HEADERS+=constr_SET_OF.h -ASN_MODULE_SOURCES+=constr_SET_OF.c -ASN_MODULE_HEADERS+=asn_application.h -ASN_MODULE_HEADERS+=asn_system.h -ASN_MODULE_HEADERS+=asn_codecs.h -ASN_MODULE_HEADERS+=asn_internal.h -ASN_MODULE_HEADERS+=OCTET_STRING.h -ASN_MODULE_SOURCES+=OCTET_STRING.c -ASN_MODULE_HEADERS+=BIT_STRING.h -ASN_MODULE_SOURCES+=BIT_STRING.c -ASN_MODULE_SOURCES+=asn_codecs_prim.c -ASN_MODULE_HEADERS+=asn_codecs_prim.h -ASN_MODULE_HEADERS+=ber_tlv_length.h -ASN_MODULE_SOURCES+=ber_tlv_length.c -ASN_MODULE_HEADERS+=ber_tlv_tag.h -ASN_MODULE_SOURCES+=ber_tlv_tag.c -ASN_MODULE_HEADERS+=ber_decoder.h -ASN_MODULE_SOURCES+=ber_decoder.c -ASN_MODULE_HEADERS+=der_encoder.h -ASN_MODULE_SOURCES+=der_encoder.c -ASN_MODULE_HEADERS+=constr_TYPE.h -ASN_MODULE_SOURCES+=constr_TYPE.c -ASN_MODULE_HEADERS+=constraints.h -ASN_MODULE_SOURCES+=constraints.c -ASN_MODULE_HEADERS+=xer_support.h -ASN_MODULE_SOURCES+=xer_support.c -ASN_MODULE_HEADERS+=xer_decoder.h -ASN_MODULE_SOURCES+=xer_decoder.c -ASN_MODULE_HEADERS+=xer_encoder.h -ASN_MODULE_SOURCES+=xer_encoder.c -ASN_MODULE_HEADERS+=per_support.h -ASN_MODULE_SOURCES+=per_support.c -ASN_MODULE_HEADERS+=per_decoder.h -ASN_MODULE_SOURCES+=per_decoder.c -ASN_MODULE_HEADERS+=per_encoder.h -ASN_MODULE_SOURCES+=per_encoder.c -ASN_MODULE_HEADERS+=per_opentype.h -ASN_MODULE_SOURCES+=per_opentype.c - -if UPDATE_RELEASE_9 -ASN_MODULE_SOURCES += \ - S1ap-KillResponse.c \ - S1ap-KillRequest.c \ - S1ap-Data-Forwarding-Not-Possible.c \ - S1ap-DownlinkUEAssociatedLPPaTransport.c \ - S1ap-UplinkUEAssociatedLPPaTransport.c \ - S1ap-DownlinkNonUEAssociatedLPPaTransport.c \ - S1ap-UplinkNonUEAssociatedLPPaTransport.c \ - S1ap-TAI-Cancelled.c \ - S1ap-TAI-Cancelled-Item.c \ - S1ap-StratumLevel.c \ - S1ap-SynchronizationStatus.c \ - S1ap-TimeSynchronizationInfo.c \ - S1ap-Routing-ID.c \ - S1ap-PS-ServiceNotAvailable.c \ - S1ap-LPPa-PDU.c \ - S1ap-ExtendedRepetitionPeriod.c \ - S1ap-EUTRANRoundTripDelayEstimationInfo.c \ - S1ap-EmergencyAreaID-Cancelled.c \ - S1ap-EmergencyAreaID-Cancelled-Item.c \ - S1ap-CSGMembershipStatus.c \ - S1ap-ConcurrentWarningMessageIndicator.c \ - S1ap-CellID-Cancelled.c \ - S1ap-CellID-Cancelled-Item.c \ - S1ap-CellAccessMode.c \ - S1ap-CancelledCellinEAI.c \ - S1ap-CancelledCellinEAI-Item.c \ - S1ap-CancelledCellinTAI.c \ - S1ap-CancelledCellinTAI-Item.c \ - S1ap-BroadcastCancelledAreaList.c - -ASN_MODULE_HEADERS += \ - S1ap-BroadcastCancelledAreaList.h \ - S1ap-CancelledCellinEAI.h \ - S1ap-CancelledCellinEAI-Item.h \ - S1ap-CancelledCellinTAI.h \ - S1ap-CancelledCellinTAI-Item.h \ - S1ap-CellAccessMode.h \ - S1ap-CellID-Cancelled.h \ - S1ap-CellID-Cancelled-Item.h \ - S1ap-ConcurrentWarningMessageIndicator.h \ - S1ap-CSGMembershipStatus.h \ - S1ap-Data-Forwarding-Not-Possible.h \ - S1ap-EmergencyAreaID-Cancelled.h \ - S1ap-EmergencyAreaID-Cancelled-Item.h \ - S1ap-E-RABList.h \ - S1ap-EUTRANRoundTripDelayEstimationInfo.h \ - S1ap-ExtendedRepetitionPeriod.h \ - S1ap-LPPa-PDU.h \ - S1ap-PS-ServiceNotAvailable.h \ - S1ap-Routing-ID.h \ - S1ap-StratumLevel.h \ - S1ap-SynchronizationStatus.h \ - S1ap-TimeSynchronizationInfo.h \ - S1ap-TAI-Cancelled.h \ - S1ap-TAI-Cancelled-Item.h \ - S1ap-KillResponse.h \ - S1ap-KillRequest.h \ - S1ap-DownlinkUEAssociatedLPPaTransport.h \ - S1ap-UplinkUEAssociatedLPPaTransport.h \ - S1ap-DownlinkNonUEAssociatedLPPaTransport.h \ - S1ap-UplinkNonUEAssociatedLPPaTransport.h -endif - -if UPDATE_RELEASE_10 -ASN_MODULE_SOURCES += \ - S1ap-PagingPriority.c \ - S1ap-RelayNode-Indicator.c \ - S1ap-GWContextReleaseIndication.c \ - S1ap-MMERelaySupportIndicator.c \ - S1ap-ManagementBasedMDTAllowed.c \ - S1ap-PrivacyIndicator.c \ - S1ap-TrafficLoadReductionIndication.c \ - S1ap-GUMMEIList.c - -ASN_MODULE_HEADERS += \ - S1ap-PagingPriority.h \ - S1ap-RelayNode-Indicator.h \ - S1ap-GWContextReleaseIndication.h \ - S1ap-MMERelaySupportIndicator.h \ - S1ap-ManagementBasedMDTAllowed.h \ - S1ap-PrivacyIndicator.h \ - S1ap-TrafficLoadReductionIndication.h \ - S1ap-GUMMEIList.h -endif - -noinst_LTLIBRARIES = libs1apmessages.la -libs1apmessages_la_LDFLAGS = -all-static - -BUILT_SOURCES = asn1regen.stamp - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -DEMIT_ASN_DEBUG_EXTERN - -libs1apmessages_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) - -asn1regen.stamp: ASN1/$(ASN1DIR)/S1AP-CommonDataTypes.asn ASN1/$(ASN1DIR)/S1AP-Constants.asn ASN1/$(ASN1DIR)/S1AP-IEs.asn ASN1/$(ASN1DIR)/S1AP-PDU.asn - asn1c -gen-PER -fhave_native64 $^ - echo Timestamp > $@ - -clean-messages: - rm -f *.lo - -clean-local: - rm -f asn1regen.stamp - rm -f Makefile.am.sample - rm -f converter-sample.c - rm -f $(ASN_MODULE_SOURCES) - rm -f $(ASN_MODULE_HEADERS) - rm -f $(ASN_MODULE_HEADERS_IES) diff --git a/openair-cn/S1AP/MESSAGES/Makefile.inc b/openair-cn/S1AP/MESSAGES/Makefile.inc deleted file mode 100644 index e0a780d541..0000000000 --- a/openair-cn/S1AP/MESSAGES/Makefile.inc +++ /dev/null @@ -1,784 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -S1AP_ASN_MODULE_SOURCES= \ - S1ap-Criticality.o \ - S1ap-Presence.o \ - S1ap-PrivateIE-ID.o \ - S1ap-ProcedureCode.o \ - S1ap-ProtocolExtensionID.o \ - S1ap-ProtocolIE-ID.o \ - S1ap-TriggeringMessage.o \ - S1ap-IE-Extensions.o \ - S1ap-AllocationAndRetentionPriority.o \ - S1ap-Bearers-SubjectToStatusTransfer-List.o \ - S1ap-Bearers-SubjectToStatusTransfer-Item.o \ - S1ap-BitRate.o \ - S1ap-BPLMNs.o \ - S1ap-BroadcastCompletedAreaList.o \ - S1ap-Cause.o \ - S1ap-CauseMisc.o \ - S1ap-CauseProtocol.o \ - S1ap-CauseRadioNetwork.o \ - S1ap-CauseTransport.o \ - S1ap-CauseNas.o \ - S1ap-CellIdentity.o \ - S1ap-CellID-Broadcast.o \ - S1ap-CellID-Broadcast-Item.o \ - S1ap-Cdma2000PDU.o \ - S1ap-Cdma2000RATType.o \ - S1ap-Cdma2000SectorID.o \ - S1ap-Cdma2000HOStatus.o \ - S1ap-Cdma2000HORequiredIndication.o \ - S1ap-Cdma2000OneXSRVCCInfo.o \ - S1ap-Cdma2000OneXMEID.o \ - S1ap-Cdma2000OneXMSI.o \ - S1ap-Cdma2000OneXPilot.o \ - S1ap-Cdma2000OneXRAND.o \ - S1ap-Cell-Size.o \ - S1ap-CellType.o \ - S1ap-CGI.o \ - S1ap-CI.o \ - S1ap-CNDomain.o \ - S1ap-CSFallbackIndicator.o \ - S1ap-CSG-Id.o \ - S1ap-CSG-IdList.o \ - S1ap-CSG-IdList-Item.o \ - S1ap-COUNTvalue.o \ - S1ap-CriticalityDiagnostics.o \ - S1ap-CriticalityDiagnostics-IE-List.o \ - S1ap-CriticalityDiagnostics-IE-Item.o \ - S1ap-DataCodingScheme.o \ - S1ap-DL-Forwarding.o \ - S1ap-Direct-Forwarding-Path-Availability.o \ - S1ap-E-RABToBeModifiedListBearerModReq.o \ - S1ap-E-RABToBeModifiedItemBearerModReq.o \ - S1ap-E-RABReleaseListBearerRelComp.o \ - S1ap-E-RABReleaseItemBearerRelComp.o \ - S1ap-E-RABDataForwardingList.o \ - S1ap-E-RABDataForwardingItem.o \ - S1ap-E-RABToBeSetupListCtxtSUReq.o \ - S1ap-E-RABToBeSetupItemCtxtSUReq.o \ - S1ap-E-RABSetupListBearerSURes.o \ - S1ap-E-RABSetupItemBearerSURes.o \ - S1ap-E-RABFailedToSetupListHOReqAck.o \ - S1ap-E-RABFailedToSetupItemHOReqAck.o \ - S1ap-E-RABToBeSetupListBearerSUReq.o \ - S1ap-E-RABToBeSetupItemBearerSUReq.o \ - S1ap-E-RABAdmittedList.o \ - S1ap-E-RABAdmittedItem.o \ - S1ap-E-RABToBeSwitchedDLList.o \ - S1ap-E-RABToBeSwitchedDLItem.o \ - S1ap-E-RABToBeSwitchedULList.o \ - S1ap-E-RABToBeSwitchedULItem.o \ - S1ap-E-RABModifyListBearerModRes.o \ - S1ap-E-RABModifyItemBearerModRes.o \ - S1ap-E-RABSetupListCtxtSURes.o \ - S1ap-E-RABSetupItemCtxtSURes.o \ - S1ap-E-RABToBeSetupListHOReq.o \ - S1ap-E-RABToBeSetupItemHOReq.o \ - S1ap-ECGIList.o \ - S1ap-EmergencyAreaIDList.o \ - S1ap-EmergencyAreaID.o \ - S1ap-EmergencyAreaID-Broadcast.o \ - S1ap-EmergencyAreaID-Broadcast-Item.o \ - S1ap-CompletedCellinEAI.o \ - S1ap-CompletedCellinEAI-Item.o \ - S1ap-ENB-ID.o \ - S1ap-GERAN-Cell-ID.o \ - S1ap-Global-ENB-ID.o \ - S1ap-ENB-StatusTransfer-TransparentContainer.o \ - S1ap-ENB-UE-S1AP-ID.o \ - S1ap-ENBname.o \ - S1ap-ENBX2TLAs.o \ - S1ap-EncryptionAlgorithms.o \ - S1ap-EPLMNs.o \ - S1ap-EventType.o \ - S1ap-E-RAB-ID.o \ - S1ap-E-RABInformationList.o \ - S1ap-E-RABInformationListItem.o \ - S1ap-E-RABList.o \ - S1ap-E-RABItem.o \ - S1ap-E-RABLevelQoSParameters.o \ - S1ap-EUTRAN-CGI.o \ - S1ap-ExtendedRNC-ID.o \ - S1ap-ForbiddenInterRATs.o \ - S1ap-ForbiddenTAs.o \ - S1ap-ForbiddenTAs-Item.o \ - S1ap-ForbiddenTACs.o \ - S1ap-ForbiddenLAs.o \ - S1ap-ForbiddenLAs-Item.o \ - S1ap-ForbiddenLACs.o \ - S1ap-GBR-QosInformation.o \ - S1ap-GTP-TEID.o \ - S1ap-GUMMEI.o \ - S1ap-HandoverRestrictionList.o \ - S1ap-HandoverType.o \ - S1ap-HFN.o \ - S1ap-Inter-SystemInformationTransferType.o \ - S1ap-IMSI.o \ - S1ap-IntegrityProtectionAlgorithms.o \ - S1ap-InterfacesToTrace.o \ - S1ap-LAC.o \ - S1ap-LAI.o \ - S1ap-LastVisitedCell-Item.o \ - S1ap-LastVisitedEUTRANCellInformation.o \ - S1ap-LastVisitedUTRANCellInformation.o \ - S1ap-LastVisitedGERANCellInformation.o \ - S1ap-L3-Information.o \ - S1ap-MessageIdentifier.o \ - S1ap-MMEname.o \ - S1ap-MME-Group-ID.o \ - S1ap-MME-Code.o \ - S1ap-MME-UE-S1AP-ID.o \ - S1ap-M-TMSI.o \ - S1ap-MSClassmark2.o \ - S1ap-MSClassmark3.o \ - S1ap-NAS-PDU.o \ - S1ap-NASSecurityParametersfromE-UTRAN.o \ - S1ap-NASSecurityParameterstoE-UTRAN.o \ - S1ap-NumberofBroadcastRequest.o \ - S1ap-NumberOfBroadcasts.o \ - S1ap-OldBSS-ToNewBSS-Information.o \ - S1ap-OverloadAction.o \ - S1ap-OverloadResponse.o \ - S1ap-PagingDRX.o \ - S1ap-PDCP-SN.o \ - S1ap-PLMNidentity.o \ - S1ap-Pre-emptionCapability.o \ - S1ap-Pre-emptionVulnerability.o \ - S1ap-PriorityLevel.o \ - S1ap-QCI.o \ - S1ap-ReceiveStatusofULPDCPSDUs.o \ - S1ap-RelativeMMECapacity.o \ - S1ap-RAC.o \ - S1ap-RequestType.o \ - S1ap-ResetType.o \ - S1ap-ResetAll.o \ - S1ap-RIMTransfer.o \ - S1ap-RIMInformation.o \ - S1ap-RIMRoutingAddress.o \ - S1ap-ReportArea.o \ - S1ap-RepetitionPeriod.o \ - S1ap-RNC-ID.o \ - S1ap-RRC-Container.o \ - S1ap-RRC-Establishment-Cause.o \ - S1ap-SecurityKey.o \ - S1ap-SecurityContext.o \ - S1ap-SerialNumber.o \ - S1ap-SONInformation.o \ - S1ap-SONInformationRequest.o \ - S1ap-SONInformationReply.o \ - S1ap-SONConfigurationTransfer.o \ - S1ap-Source-ToTarget-TransparentContainer.o \ - S1ap-SourceBSS-ToTargetBSS-TransparentContainer.o \ - S1ap-SourceeNB-ID.o \ - S1ap-SRVCCOperationPossible.o \ - S1ap-SRVCCHOIndication.o \ - S1ap-SourceeNB-ToTargeteNB-TransparentContainer.o \ - S1ap-SourceRNC-ToTargetRNC-TransparentContainer.o \ - S1ap-ServedGUMMEIs.o \ - S1ap-ServedGUMMEIsItem.o \ - S1ap-ServedGroupIDs.o \ - S1ap-ServedMMECs.o \ - S1ap-ServedPLMNs.o \ - S1ap-SubscriberProfileIDforRFP.o \ - S1ap-SupportedTAs.o \ - S1ap-SupportedTAs-Item.o \ - S1ap-S-TMSI.o \ - S1ap-TAC.o \ - S1ap-TAIListforWarning.o \ - S1ap-TAIList.o \ - S1ap-TAIItem.o \ - S1ap-TAI.o \ - S1ap-TAI-Broadcast.o \ - S1ap-TAI-Broadcast-Item.o \ - S1ap-CompletedCellinTAI.o \ - S1ap-CompletedCellinTAI-Item.o \ - S1ap-TBCD-STRING.o \ - S1ap-TargetID.o \ - S1ap-TargeteNB-ID.o \ - S1ap-TargetRNC-ID.o \ - S1ap-TargeteNB-ToSourceeNB-TransparentContainer.o \ - S1ap-Target-ToSource-TransparentContainer.o \ - S1ap-TargetRNC-ToSourceRNC-TransparentContainer.o \ - S1ap-TargetBSS-ToSourceBSS-TransparentContainer.o \ - S1ap-TimeToWait.o \ - S1ap-Time-UE-StayedInCell.o \ - S1ap-TransportLayerAddress.o \ - S1ap-TraceActivation.o \ - S1ap-TraceDepth.o \ - S1ap-E-UTRAN-Trace-ID.o \ - S1ap-TypeOfError.o \ - S1ap-UEAggregateMaximumBitrate.o \ - S1ap-UE-S1AP-IDs.o \ - S1ap-UE-S1AP-ID-pair.o \ - S1ap-UE-associatedLogicalS1-ConnectionListRes.o \ - S1ap-UE-associatedLogicalS1-ConnectionListResAck.o \ - S1ap-UE-associatedLogicalS1-ConnectionItem.o \ - S1ap-UEIdentityIndexValue.o \ - S1ap-UE-HistoryInformation.o \ - S1ap-UEPagingID.o \ - S1ap-UERadioCapability.o \ - S1ap-UESecurityCapabilities.o \ - S1ap-WarningAreaList.o \ - S1ap-WarningType.o \ - S1ap-WarningSecurityInfo.o \ - S1ap-WarningMessageContents.o \ - S1ap-X2TNLConfigurationInfo.o \ - S1AP-PDU.o \ - S1ap-InitiatingMessage.o \ - S1ap-SuccessfulOutcome.o \ - S1ap-UnsuccessfulOutcome.o \ - S1ap-HandoverRequired.o \ - S1ap-HandoverCommand.o \ - S1ap-HandoverPreparationFailure.o \ - S1ap-HandoverRequest.o \ - S1ap-HandoverRequestAcknowledge.o \ - S1ap-HandoverFailure.o \ - S1ap-HandoverNotify.o \ - S1ap-PathSwitchRequest.o \ - S1ap-PathSwitchRequestAcknowledge.o \ - S1ap-PathSwitchRequestFailure.o \ - S1ap-E-RABSetupRequest.o \ - S1ap-E-RABSetupResponse.o \ - S1ap-E-RABModifyRequest.o \ - S1ap-E-RABModifyResponse.o \ - S1ap-E-RABReleaseIndication.o \ - S1ap-E-RABReleaseCommand.o \ - S1ap-E-RABReleaseResponse.o \ - S1ap-InitialContextSetupRequest.o \ - S1ap-InitialContextSetupResponse.o \ - S1ap-InitialContextSetupFailure.o \ - S1ap-UEContextReleaseRequest.o \ - S1ap-Paging.o \ - S1ap-DownlinkNASTransport.o \ - S1ap-InitialUEMessage.o \ - S1ap-UplinkNASTransport.o \ - S1ap-NASNonDeliveryIndication.o \ - S1ap-HandoverCancel.o \ - S1ap-HandoverCancelAcknowledge.o \ - S1ap-Reset.o \ - S1ap-ResetAcknowledge.o \ - S1ap-S1SetupResponse.o \ - S1ap-S1SetupRequest.o \ - S1ap-S1SetupFailure.o \ - S1ap-ErrorIndication.o \ - S1ap-ENBConfigurationUpdate.o \ - S1ap-ENBConfigurationUpdateAcknowledge.o \ - S1ap-ENBConfigurationUpdateFailure.o \ - S1ap-MMEConfigurationUpdate.o \ - S1ap-MMEConfigurationUpdateAcknowledge.o \ - S1ap-MMEConfigurationUpdateFailure.o \ - S1ap-DownlinkS1cdma2000tunneling.o \ - S1ap-UplinkS1cdma2000tunneling.o \ - S1ap-UEContextModificationRequest.o \ - S1ap-UEContextModificationResponse.o \ - S1ap-UEContextModificationFailure.o \ - S1ap-UECapabilityInfoIndication.o \ - S1ap-UEContextReleaseCommand.o \ - S1ap-UEContextReleaseComplete.o \ - S1ap-ENBStatusTransfer.o \ - S1ap-MMEStatusTransfer.o \ - S1ap-DeactivateTrace.o \ - S1ap-TraceStart.o \ - S1ap-TraceFailureIndication.o \ - S1ap-CellTrafficTrace.o \ - S1ap-LocationReportingControl.o \ - S1ap-LocationReportingFailureIndication.o \ - S1ap-LocationReport.o \ - S1ap-OverloadStart.o \ - S1ap-OverloadStop.o \ - S1ap-WriteReplaceWarningRequest.o \ - S1ap-WriteReplaceWarningResponse.o \ - S1ap-ENBDirectInformationTransfer.o \ - S1ap-MMEDirectInformationTransfer.o \ - S1ap-ENBConfigurationTransfer.o \ - S1ap-MMEConfigurationTransfer.o \ - S1ap-PrivateMessage.o \ - S1ap-IE.o - -S1AP_ASN_MODULE_HEADERS= \ - S1ap-Criticality.h \ - S1ap-Presence.h \ - S1ap-PrivateIE-ID.h \ - S1ap-ProcedureCode.h \ - S1ap-ProtocolExtensionID.h \ - S1ap-ProtocolIE-ID.h \ - S1ap-TriggeringMessage.h \ - S1ap-IE-Extensions.h \ - S1ap-AllocationAndRetentionPriority.h \ - S1ap-Bearers-SubjectToStatusTransfer-List.h \ - S1ap-Bearers-SubjectToStatusTransfer-Item.h \ - S1ap-BitRate.h \ - S1ap-BPLMNs.h \ - S1ap-BroadcastCompletedAreaList.h \ - S1ap-Cause.h \ - S1ap-CauseMisc.h \ - S1ap-CauseProtocol.h \ - S1ap-CauseRadioNetwork.h \ - S1ap-CauseTransport.h \ - S1ap-CauseNas.h \ - S1ap-CellIdentity.h \ - S1ap-CellID-Broadcast.h \ - S1ap-CellID-Broadcast-Item.h \ - S1ap-Cdma2000PDU.h \ - S1ap-Cdma2000RATType.h \ - S1ap-Cdma2000SectorID.h \ - S1ap-Cdma2000HOStatus.h \ - S1ap-Cdma2000HORequiredIndication.h \ - S1ap-Cdma2000OneXSRVCCInfo.h \ - S1ap-Cdma2000OneXMEID.h \ - S1ap-Cdma2000OneXMSI.h \ - S1ap-Cdma2000OneXPilot.h \ - S1ap-Cdma2000OneXRAND.h \ - S1ap-Cell-Size.h \ - S1ap-CellType.h \ - S1ap-CGI.h \ - S1ap-CI.h \ - S1ap-CNDomain.h \ - S1ap-CSFallbackIndicator.h \ - S1ap-CSG-Id.h \ - S1ap-CSG-IdList.h \ - S1ap-CSG-IdList-Item.h \ - S1ap-COUNTvalue.h \ - S1ap-CriticalityDiagnostics.h \ - S1ap-CriticalityDiagnostics-IE-List.h \ - S1ap-CriticalityDiagnostics-IE-Item.h \ - S1ap-DataCodingScheme.h \ - S1ap-DL-Forwarding.h \ - S1ap-Direct-Forwarding-Path-Availability.h \ - S1ap-E-RABToBeModifiedListBearerModReq.h \ - S1ap-E-RABToBeModifiedItemBearerModReqIEs.h \ - S1ap-E-RABToBeModifiedItemBearerModReq.h \ - S1ap-E-RABReleaseListBearerRelComp.h \ - S1ap-E-RABReleaseItemBearerRelCompIEs.h \ - S1ap-E-RABReleaseItemBearerRelComp.h \ - S1ap-E-RABSubjecttoDataForwardingList.h \ - S1ap-E-RABDataForwardingList.h \ - S1ap-E-RABDataForwardingItemIEs.h \ - S1ap-E-RABDataForwardingItem.h \ - S1ap-E-RABToBeSetupListCtxtSUReq.h \ - S1ap-E-RABToBeSetupItemCtxtSUReqIEs.h \ - S1ap-E-RABToBeSetupItemCtxtSUReq.h \ - S1ap-E-RABSetupListBearerSURes.h \ - S1ap-E-RABSetupItemBearerSUResIEs.h \ - S1ap-E-RABSetupItemBearerSURes.h \ - S1ap-E-RABFailedToSetupListHOReqAck.h \ - S1ap-E-RABFailedToSetupItemHOReqAckIEs.h \ - S1ap-E-RABFailedToSetupItemHOReqAck.h \ - S1ap-E-RABToBeSetupListBearerSUReq.h \ - S1ap-E-RABToBeSetupItemBearerSUReqIEs.h \ - S1ap-E-RABToBeSetupItemBearerSUReq.h \ - S1ap-E-RABAdmittedList.h \ - S1ap-E-RABAdmittedItemIEs.h \ - S1ap-E-RABAdmittedItem.h \ - S1ap-E-RABToBeSwitchedDLList.h \ - S1ap-E-RABToBeSwitchedDLListIEs.h \ - S1ap-E-RABToBeSwitchedDLItem.h \ - S1ap-E-RABToBeSwitchedULList.h \ - S1ap-E-RABToBeSwitchedULItemIEs.h \ - S1ap-E-RABToBeSwitchedULItem.h \ - S1ap-E-RABModifyListBearerModRes.h \ - S1ap-E-RABModifyItemBearerModResIEs.h \ - S1ap-E-RABModifyItemBearerModRes.h \ - S1ap-E-RABSetupListCtxtSURes.h \ - S1ap-E-RABSetupListCtxtSUResIEs.h \ - S1ap-E-RABSetupItemCtxtSURes.h \ - S1ap-E-RABToBeSetupListHOReq.h \ - S1ap-E-RABToBeSetupListHOReqIEs.h \ - S1ap-E-RABToBeSetupItemHOReq.h \ - S1ap-ECGIList.h \ - S1ap-EmergencyAreaIDList.h \ - S1ap-EmergencyAreaID.h \ - S1ap-EmergencyAreaID-Broadcast.h \ - S1ap-EmergencyAreaID-Broadcast-Item.h \ - S1ap-CompletedCellinEAI.h \ - S1ap-CompletedCellinEAI-Item.h \ - S1ap-ENB-ID.h \ - S1ap-GERAN-Cell-ID.h \ - S1ap-Global-ENB-ID.h \ - S1ap-ENB-StatusTransfer-TransparentContainer.h \ - S1ap-ENB-UE-S1AP-ID.h \ - S1ap-ENBname.h \ - S1ap-ENBX2TLAs.h \ - S1ap-EncryptionAlgorithms.h \ - S1ap-EPLMNs.h \ - S1ap-EventType.h \ - S1ap-E-RAB-ID.h \ - S1ap-E-RABInformationList.h \ - S1ap-E-RABInformationListItem.h \ - S1ap-E-RABList.h \ - S1ap-E-RABItem.h \ - S1ap-E-RABLevelQoSParameters.h \ - S1ap-EUTRAN-CGI.h \ - S1ap-ExtendedRNC-ID.h \ - S1ap-ForbiddenInterRATs.h \ - S1ap-ForbiddenTAs.h \ - S1ap-ForbiddenTAs-Item.h \ - S1ap-ForbiddenTACs.h \ - S1ap-ForbiddenLAs.h \ - S1ap-ForbiddenLAs-Item.h \ - S1ap-ForbiddenLACs.h \ - S1ap-GBR-QosInformation.h \ - S1ap-GTP-TEID.h \ - S1ap-GUMMEI.h \ - S1ap-HandoverRestrictionList.h \ - S1ap-HandoverType.h \ - S1ap-HFN.h \ - S1ap-HandoverNotify.h \ - S1ap-Inter-SystemInformationTransferType.h \ - S1ap-IMSI.h \ - S1ap-IntegrityProtectionAlgorithms.h \ - S1ap-InterfacesToTrace.h \ - S1ap-LAC.h \ - S1ap-LAI.h \ - S1ap-LastVisitedCell-Item.h \ - S1ap-LastVisitedEUTRANCellInformation.h \ - S1ap-LastVisitedUTRANCellInformation.h \ - S1ap-LastVisitedGERANCellInformation.h \ - S1ap-L3-Information.h \ - S1ap-MessageIdentifier.h \ - S1ap-MMEname.h \ - S1ap-MME-Group-ID.h \ - S1ap-MME-Code.h \ - S1ap-MME-UE-S1AP-ID.h \ - S1ap-M-TMSI.h \ - S1ap-MSClassmark2.h \ - S1ap-MSClassmark3.h \ - S1ap-NAS-PDU.h \ - S1ap-NASSecurityParametersfromE-UTRAN.h \ - S1ap-NASSecurityParameterstoE-UTRAN.h \ - S1ap-NumberofBroadcastRequest.h \ - S1ap-NumberOfBroadcasts.h \ - S1ap-OldBSS-ToNewBSS-Information.h \ - S1ap-OverloadAction.h \ - S1ap-OverloadResponse.h \ - S1ap-PagingDRX.h \ - S1ap-PDCP-SN.h \ - S1ap-PLMNidentity.h \ - S1ap-Pre-emptionCapability.h \ - S1ap-Pre-emptionVulnerability.h \ - S1ap-PriorityLevel.h \ - S1ap-QCI.h \ - S1ap-ReceiveStatusofULPDCPSDUs.h \ - S1ap-RelativeMMECapacity.h \ - S1ap-RAC.h \ - S1ap-RequestType.h \ - S1ap-ResetType.h \ - S1ap-ResetAll.h \ - S1ap-RIMTransfer.h \ - S1ap-RIMInformation.h \ - S1ap-RIMRoutingAddress.h \ - S1ap-ReportArea.h \ - S1ap-RepetitionPeriod.h \ - S1ap-RNC-ID.h \ - S1ap-RRC-Container.h \ - S1ap-RRC-Establishment-Cause.h \ - S1ap-SecurityKey.h \ - S1ap-SecurityContext.h \ - S1ap-SerialNumber.h \ - S1ap-SONInformation.h \ - S1ap-SONInformationRequest.h \ - S1ap-SONInformationReply.h \ - S1ap-SONConfigurationTransfer.h \ - S1ap-Source-ToTarget-TransparentContainer.h \ - S1ap-SourceBSS-ToTargetBSS-TransparentContainer.h \ - S1ap-SourceeNB-ID.h \ - S1ap-SRVCCOperationPossible.h \ - S1ap-SRVCCHOIndication.h \ - S1ap-SourceeNB-ToTargeteNB-TransparentContainer.h \ - S1ap-SourceRNC-ToTargetRNC-TransparentContainer.h \ - S1ap-ServedGUMMEIs.h \ - S1ap-ServedGUMMEIsItem.h \ - S1ap-ServedGroupIDs.h \ - S1ap-ServedMMECs.h \ - S1ap-ServedPLMNs.h \ - S1ap-SubscriberProfileIDforRFP.h \ - S1ap-SupportedTAs.h \ - S1ap-SupportedTAs-Item.h \ - S1ap-S-TMSI.h \ - S1ap-TAC.h \ - S1ap-TAIListforWarning.h \ - S1ap-TAIList.h \ - S1ap-TAIItem.h \ - S1ap-TAI.h \ - S1ap-TAI-Broadcast.h \ - S1ap-TAI-Broadcast-Item.h \ - S1ap-CompletedCellinTAI.h \ - S1ap-CompletedCellinTAI-Item.h \ - S1ap-TBCD-STRING.h \ - S1ap-TargetID.h \ - S1ap-TargeteNB-ID.h \ - S1ap-TargetRNC-ID.h \ - S1ap-TargeteNB-ToSourceeNB-TransparentContainer.h \ - S1ap-Target-ToSource-TransparentContainer.h \ - S1ap-TargetRNC-ToSourceRNC-TransparentContainer.h \ - S1ap-TargetBSS-ToSourceBSS-TransparentContainer.h \ - S1ap-TimeToWait.h \ - S1ap-Time-UE-StayedInCell.h \ - S1ap-TransportLayerAddress.h \ - S1ap-TraceActivation.h \ - S1ap-TraceDepth.h \ - S1ap-E-UTRAN-Trace-ID.h \ - S1ap-TypeOfError.h \ - S1ap-UEAggregateMaximumBitrate.h \ - S1ap-UE-S1AP-IDs.h \ - S1ap-UE-S1AP-ID-pair.h \ - S1ap-UE-associatedLogicalS1-ConnectionListRes.h \ - S1ap-UE-associatedLogicalS1-ConnectionListResAck.h \ - S1ap-UE-associatedLogicalS1-ConnectionItem.h \ - S1ap-UEIdentityIndexValue.h \ - S1ap-UE-HistoryInformation.h \ - S1ap-UEPagingID.h \ - S1ap-UERadioCapability.h \ - S1ap-UESecurityCapabilities.h \ - S1ap-WarningAreaList.h \ - S1ap-WarningType.h \ - S1ap-WarningSecurityInfo.h \ - S1ap-WarningMessageContents.h \ - S1ap-X2TNLConfigurationInfo.h \ - S1AP-PDU.h \ - S1ap-InitiatingMessage.h \ - S1ap-SuccessfulOutcome.h \ - S1ap-UnsuccessfulOutcome.h \ - S1ap-HandoverRequired.h \ - S1ap-HandoverCommand.h \ - S1ap-HandoverPreparationFailure.h \ - S1ap-HandoverRequest.h \ - S1ap-HandoverRequestAcknowledge.h \ - S1ap-HandoverFailure.h \ - S1ap-HandoverNotify.h \ - S1ap-PathSwitchRequest.h \ - S1ap-PathSwitchRequestAcknowledge.h \ - S1ap-PathSwitchRequestFailure.h \ - S1ap-E-RABSetupRequest.h \ - S1ap-E-RABSetupResponse.h \ - S1ap-E-RABModifyRequest.h \ - S1ap-E-RABModifyResponse.h \ - S1ap-E-RABReleaseIndication.h \ - S1ap-E-RABReleaseCommand.h \ - S1ap-E-RABReleaseResponse.h \ - S1ap-InitialContextSetupRequest.h \ - S1ap-InitialContextSetupResponse.h \ - S1ap-InitialContextSetupFailure.h \ - S1ap-UEContextReleaseRequest.h \ - S1ap-Paging.h \ - S1ap-DownlinkNASTransport.h \ - S1ap-InitialUEMessage.h \ - S1ap-UplinkNASTransport.h \ - S1ap-NASNonDeliveryIndication.h \ - S1ap-HandoverCancel.h \ - S1ap-HandoverCancelAcknowledge.h \ - S1ap-Reset.h \ - S1ap-ResetAcknowledge.h \ - S1ap-S1SetupResponse.h \ - S1ap-S1SetupRequest.h \ - S1ap-S1SetupFailure.h \ - S1ap-ErrorIndication.h \ - S1ap-ENBConfigurationUpdate.h \ - S1ap-ENBConfigurationUpdateAcknowledge.h \ - S1ap-ENBConfigurationUpdateFailure.h \ - S1ap-MMEConfigurationUpdate.h \ - S1ap-MMEConfigurationUpdateAcknowledge.h \ - S1ap-MMEConfigurationUpdateFailure.h \ - S1ap-DownlinkS1cdma2000tunneling.h \ - S1ap-UplinkS1cdma2000tunneling.h \ - S1ap-UEContextModificationRequest.h \ - S1ap-UEContextModificationResponse.h \ - S1ap-UEContextModificationFailure.h \ - S1ap-UECapabilityInfoIndication.h \ - S1ap-UEContextReleaseCommand.h \ - S1ap-UEContextReleaseComplete.h \ - S1ap-ENBStatusTransfer.h \ - S1ap-MMEStatusTransfer.h \ - S1ap-DeactivateTrace.h \ - S1ap-TraceStart.h \ - S1ap-TraceFailureIndication.h \ - S1ap-CellTrafficTrace.h \ - S1ap-LocationReportingControl.h \ - S1ap-LocationReportingFailureIndication.h \ - S1ap-LocationReport.h \ - S1ap-OverloadStart.h \ - S1ap-OverloadStop.h \ - S1ap-WriteReplaceWarningRequest.h \ - S1ap-WriteReplaceWarningResponse.h \ - S1ap-ENBDirectInformationTransfer.h \ - S1ap-MMEDirectInformationTransfer.h \ - S1ap-ENBConfigurationTransfer.h \ - S1ap-MMEConfigurationTransfer.h \ - S1ap-PrivateMessage.h \ - S1ap-IE.h - -S1AP_ASN_MODULE_SOURCES_R9 = \ - S1ap-KillResponse.o \ - S1ap-KillRequest.o \ - S1ap-Data-Forwarding-Not-Possible.o \ - S1ap-DownlinkUEAssociatedLPPaTransport.o \ - S1ap-UplinkUEAssociatedLPPaTransport.o \ - S1ap-DownlinkNonUEAssociatedLPPaTransport.o \ - S1ap-UplinkNonUEAssociatedLPPaTransport.o \ - S1ap-TAI-Cancelled.o \ - S1ap-TAI-Cancelled-Item.o \ - S1ap-StratumLevel.o \ - S1ap-SynchronizationStatus.o \ - S1ap-TimeSynchronizationInfo.o \ - S1ap-Routing-ID.o \ - S1ap-PS-ServiceNotAvailable.o \ - S1ap-LPPa-PDU.o \ - S1ap-ExtendedRepetitionPeriod.o \ - S1ap-EUTRANRoundTripDelayEstimationInfo.o \ - S1ap-EmergencyAreaID-Cancelled.o \ - S1ap-EmergencyAreaID-Cancelled-Item.o \ - S1ap-CSGMembershipStatus.o \ - S1ap-ConcurrentWarningMessageIndicator.o \ - S1ap-CellID-Cancelled.o \ - S1ap-CellID-Cancelled-Item.o \ - S1ap-CellAccessMode.o \ - S1ap-CancelledCellinEAI.o \ - S1ap-CancelledCellinEAI-Item.o \ - S1ap-CancelledCellinTAI.o \ - S1ap-CancelledCellinTAI-Item.o \ - S1ap-BroadcastCancelledAreaList.o - -S1AP_ASN_MODULE_HEADERS_R9 = \ - S1ap-BroadcastCancelledAreaList.h \ - S1ap-CancelledCellinEAI.h \ - S1ap-CancelledCellinEAI-Item.h \ - S1ap-CancelledCellinTAI.h \ - S1ap-CancelledCellinTAI-Item.h \ - S1ap-CellAccessMode.h \ - S1ap-CellID-Cancelled.h \ - S1ap-CellID-Cancelled-Item.h \ - S1ap-ConcurrentWarningMessageIndicator.h \ - S1ap-CSGMembershipStatus.h \ - S1ap-Data-Forwarding-Not-Possible.h \ - S1ap-EmergencyAreaID-Cancelled.h \ - S1ap-EmergencyAreaID-Cancelled-Item.h \ - S1ap-E-RABList.h \ - S1ap-EUTRANRoundTripDelayEstimationInfo.h \ - S1ap-ExtendedRepetitionPeriod.h \ - S1ap-LPPa-PDU.h \ - S1ap-PS-ServiceNotAvailable.h \ - S1ap-Routing-ID.h \ - S1ap-StratumLevel.h \ - S1ap-SynchronizationStatus.h \ - S1ap-TimeSynchronizationInfo.h \ - S1ap-TAI-Cancelled.h \ - S1ap-TAI-Cancelled-Item.h \ - S1ap-KillResponse.h \ - S1ap-KillRequest.h \ - S1ap-DownlinkUEAssociatedLPPaTransport.h \ - S1ap-UplinkUEAssociatedLPPaTransport.h \ - S1ap-DownlinkNonUEAssociatedLPPaTransport.h \ - S1ap-UplinkNonUEAssociatedLPPaTransport.h - -S1AP_ASN_MODULE_SOURCES_R10 = \ - S1ap-PagingPriority.o \ - S1ap-RelayNode-Indicator.o \ - S1ap-GWContextReleaseIndication.o \ - S1ap-MMERelaySupportIndicator.o \ - S1ap-ManagementBasedMDTAllowed.o \ - S1ap-PrivacyIndicator.o \ - S1ap-TrafficLoadReductionIndication.o \ - S1ap-GUMMEIList.o - -S1AP_ASN_MODULE_HEADERS_R10 = \ - S1ap-PagingPriority.h \ - S1ap-RelayNode-Indicator.h \ - S1ap-GWContextReleaseIndication.h \ - S1ap-MMERelaySupportIndicator.h \ - S1ap-ManagementBasedMDTAllowed.h \ - S1ap-PrivacyIndicator.h \ - S1ap-TrafficLoadReductionIndication.h \ - S1ap-GUMMEIList.h - -S1AP_ASN_MODULE_HEADERS+=ANY.h -S1AP_ASN_MODULE_SOURCES+=ANY.o -S1AP_ASN_MODULE_HEADERS+=BOOLEAN.h -S1AP_ASN_MODULE_SOURCES+=BOOLEAN.o -S1AP_ASN_MODULE_HEADERS+=INTEGER.h -S1AP_ASN_MODULE_HEADERS+=NativeEnumerated.h -S1AP_ASN_MODULE_SOURCES+=INTEGER.o -S1AP_ASN_MODULE_HEADERS+=NULL.h -S1AP_ASN_MODULE_SOURCES+=NULL.o -S1AP_ASN_MODULE_SOURCES+=NativeEnumerated.o -S1AP_ASN_MODULE_HEADERS+=NativeInteger.h -S1AP_ASN_MODULE_SOURCES+=NativeInteger.o -S1AP_ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h -S1AP_ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.o -S1AP_ASN_MODULE_HEADERS+=PrintableString.h -S1AP_ASN_MODULE_SOURCES+=PrintableString.o -S1AP_ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h -S1AP_ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.o -S1AP_ASN_MODULE_HEADERS+=asn_SET_OF.h -S1AP_ASN_MODULE_SOURCES+=asn_SET_OF.o -S1AP_ASN_MODULE_HEADERS+=constr_CHOICE.h -S1AP_ASN_MODULE_SOURCES+=constr_CHOICE.o -S1AP_ASN_MODULE_HEADERS+=constr_SEQUENCE.h -S1AP_ASN_MODULE_SOURCES+=constr_SEQUENCE.o -S1AP_ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h -S1AP_ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.o -S1AP_ASN_MODULE_HEADERS+=constr_SET_OF.h -S1AP_ASN_MODULE_SOURCES+=constr_SET_OF.o -S1AP_ASN_MODULE_HEADERS+=asn_application.h -S1AP_ASN_MODULE_HEADERS+=asn_system.h -S1AP_ASN_MODULE_HEADERS+=asn_codecs.h -S1AP_ASN_MODULE_HEADERS+=asn_internal.h -S1AP_ASN_MODULE_HEADERS+=OCTET_STRING.h -S1AP_ASN_MODULE_SOURCES+=OCTET_STRING.o -S1AP_ASN_MODULE_HEADERS+=BIT_STRING.h -S1AP_ASN_MODULE_SOURCES+=BIT_STRING.o -S1AP_ASN_MODULE_SOURCES+=asn_codecs_prim.o -S1AP_ASN_MODULE_HEADERS+=asn_codecs_prim.h -S1AP_ASN_MODULE_HEADERS+=ber_tlv_length.h -S1AP_ASN_MODULE_SOURCES+=ber_tlv_length.o -S1AP_ASN_MODULE_HEADERS+=ber_tlv_tag.h -S1AP_ASN_MODULE_SOURCES+=ber_tlv_tag.o -S1AP_ASN_MODULE_HEADERS+=ber_decoder.h -S1AP_ASN_MODULE_SOURCES+=ber_decoder.o -S1AP_ASN_MODULE_HEADERS+=der_encoder.h -S1AP_ASN_MODULE_SOURCES+=der_encoder.o -S1AP_ASN_MODULE_HEADERS+=constr_TYPE.h -S1AP_ASN_MODULE_SOURCES+=constr_TYPE.o -S1AP_ASN_MODULE_HEADERS+=constraints.h -S1AP_ASN_MODULE_SOURCES+=constraints.o -S1AP_ASN_MODULE_HEADERS+=xer_support.h -S1AP_ASN_MODULE_SOURCES+=xer_support.o -S1AP_ASN_MODULE_HEADERS+=xer_decoder.h -S1AP_ASN_MODULE_SOURCES+=xer_decoder.o -S1AP_ASN_MODULE_HEADERS+=xer_encoder.h -S1AP_ASN_MODULE_SOURCES+=xer_encoder.o -S1AP_ASN_MODULE_HEADERS+=per_support.h -S1AP_ASN_MODULE_SOURCES+=per_support.o -S1AP_ASN_MODULE_HEADERS+=per_decoder.h -S1AP_ASN_MODULE_SOURCES+=per_decoder.o -S1AP_ASN_MODULE_HEADERS+=per_encoder.h -S1AP_ASN_MODULE_SOURCES+=per_encoder.o -S1AP_ASN_MODULE_HEADERS+=per_opentype.h -S1AP_ASN_MODULE_SOURCES+=per_opentype.o \ No newline at end of file diff --git a/openair-cn/S1AP/Makefile.am b/openair-cn/S1AP/Makefile.am deleted file mode 100644 index b957c18137..0000000000 --- a/openair-cn/S1AP/Makefile.am +++ /dev/null @@ -1,70 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -SUBDIRS = ./MESSAGES/ . - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_builddir)/S1AP \ - -I$(top_builddir)/S1AP/MESSAGES \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/SCTP \ - -I$(top_srcdir)/UTILS \ - -DEMIT_ASN_DEBUG_EXTERN - -noinst_LTLIBRARIES = libs1ap.la -libs1ap_la_LDFLAGS = -all-static -libs1ap_la_LIBADD = ./MESSAGES/libs1apmessages.la - -libs1ap_la_SOURCES = \ - s1ap_common.h s1ap_common.c \ - s1ap_mme_encoder.h s1ap_mme_encoder.c \ - s1ap_mme_decoder.h s1ap_mme_decoder.c \ - s1ap_mme_handlers.h s1ap_mme_handlers.c \ - s1ap_mme_nas_procedures.c s1ap_mme_nas_procedures.h \ - s1ap_mme.h s1ap_mme.c \ - s1ap_mme_itti_messaging.c s1ap_mme_itti_messaging.h \ - s1ap_mme_retransmission.c s1ap_mme_retransmission.h \ - s1ap_mme_ta.c s1ap_mme_ta.h \ - $(top_builddir)/S1AP/s1ap_decoder.c \ - $(top_builddir)/S1AP/s1ap_encoder.c \ - $(top_builddir)/S1AP/s1ap_xer_print.c \ - $(top_builddir)/S1AP/s1ap_ies_defs.h - -clean-local: - rm -f $(top_builddir)/S1AP/s1ap_ies_defs.h - rm -f $(top_builddir)/S1AP/s1ap_decoder.c - rm -f $(top_builddir)/S1AP/s1ap_encoder.c - rm -f $(top_builddir)/S1AP/s1ap_xer_print.c diff --git a/openair-cn/S1AP/Makefile.eNB b/openair-cn/S1AP/Makefile.eNB deleted file mode 100644 index 4547fdbaea..0000000000 --- a/openair-cn/S1AP/Makefile.eNB +++ /dev/null @@ -1,163 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# include $(OPENAIR_TARGETS)/SIMU/USER/Makerules - -OUTDIR = $(S1AP_DIR)/enb_objs - -ASN1MESSAGESDIR=$(S1AP_DIR)/MESSAGES -ASN1DIR=$(ASN1MESSAGESDIR)/ASN1 - -ifeq ($(USE_MME), R10) - ASN1RELDIR=R10.5 - UPDATE_RELEASE_9=1 - UPDATE_RELEASE_10=1 - ADD_CFLAGS=-DUPDATE_RELEASE_9 -DUPDATE_RELEASE_10 -else - ifeq ($(USE_MME), R9) - UPDATE_RELEASE_9=1 - ASN1RELDIR=R9.8 - ADD_CFLAGS=-DUPDATE_RELEASE_9 - else - ASN1RELDIR=R8.10 - endif -endif - -include $(ASN1MESSAGESDIR)/Makefile.inc - -libs1ap_OBJECTS = \ - s1ap_common.o \ - s1ap_eNB.o \ - s1ap_eNB_context_management_procedures.o \ - s1ap_eNB_decoder.o \ - s1ap_eNB_encoder.o \ - s1ap_eNB_handlers.o \ - s1ap_eNB_itti_messaging.o \ - s1ap_eNB_management_procedures.o \ - s1ap_eNB_nas_procedures.o \ - s1ap_eNB_nnsf.o \ - s1ap_eNB_overload.o \ - s1ap_eNB_trace.o \ - s1ap_eNB_ue_context.o \ - $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES)) - -ifeq ($(USE_MME), R10) - libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9)) - libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10)) -else - ifeq ($(USE_MME), R9) - libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9)) - endif -endif - -# pull in dependency info for *existing* .o files --include $(OUTDIR)/*.d - -CFLAGS = \ - -Wall \ - -DENB_MODE \ - -DENABLE_USE_MME \ - -DUSER_MODE \ - -I./MESSAGES \ - -I$(OUTDIR) \ - -I../UTILS \ - $(ADD_CFLAGS) \ - -DENB_MODE \ - $(S1AP_CFLAGS) \ - -Wuninitialized \ - -Werror=implicit-function-declaration - -S1AP_GENERATED = \ - $(OUTDIR)/s1ap_encoder.o \ - $(OUTDIR)/s1ap_decoder.o \ - $(OUTDIR)/s1ap_xer_print.o - -$(OUTDIR)/%.o : %.c - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -$(S1AP_GENERATED): %.o : %.c - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -#$(OUTDIR)/%.c : $(OUTDIR)/s1ap_ieregen.stamp $(OUTDIR)/s1ap_asn1regen.stamp - #@if [ -f $< ] ; then touch $<; else echo "ERROR: " $< "not generated" ; exit 1 ; fi; - -$(OUTDIR)/s1ap_ieregen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU-Contents.asn $(ASN1DIR)/asn1tostruct.py - @if [ ! -d $(OUTDIR) ]; then mkdir -p $(OUTDIR); fi; - @python $(ASN1DIR)/asn1tostruct.py -f$< -o$(OUTDIR) - @echo Timestamp > $@ - -$(OUTDIR)/s1ap_asn1regen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-CommonDataTypes.asn \ - $(ASN1DIR)/$(ASN1RELDIR)/S1AP-Constants.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-IEs.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU.asn - (cd $(ASN1MESSAGESDIR) && asn1c -fhave_native64 -gen-PER $^) - @echo Timestamp > $@ - -$(OUTDIR)/libs1ap.a: $(OUTDIR)/s1ap_ieregen.stamp $(OUTDIR)/s1ap_asn1regen.stamp $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS)) - @echo Creating S1AP archive - @$(AR) rcs $@ $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS)) - -clean: - @$(RM_F_V) $(OUTDIR)/*.o - @$(RM_F_V) $(OUTDIR)/*.d - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.d)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.d)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.d)) - @$(RM_F_V) $(OUTDIR)/libs1ap.a - @$(RM_F_V) $(OUTDIR)/s1ap_asn1regen.stamp - @$(RM_F_V) $(OUTDIR)/s1ap_ieregen.stamp - @$(RM_F_V) $(OUTDIR)/s1ap_decoder.c $(OUTDIR)/s1ap_encoder.c - @$(RM_F_V) $(OUTDIR)/s1ap_xer_print.c $(OUTDIR)/s1ap_ies_defs.h - -cleanall: clean - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.c)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.h)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.c)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.h)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.c)) - @$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.h)) - -showcflags: - @echo s1ap cflags: $(CFLAGS) diff --git a/openair-cn/S1AP/Makefile.inc b/openair-cn/S1AP/Makefile.inc deleted file mode 100644 index 8bca6ba59c..0000000000 --- a/openair-cn/S1AP/Makefile.inc +++ /dev/null @@ -1,37 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -S1AP_OBJS = $(OPENAIR2_DIR)/S1AP/s1ap_eNB.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_common.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_encoder.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_decoder.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_eNB_decoder.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_eNB_encoder.o -S1AP_OBJS += $(OPENAIR2_DIR)/S1AP/s1ap_eNB_handlers.o - -S1AP_Incl = -I$(OPENAIR2_DIR)/S1AP -I$(OPENAIR2_DIR)/S1AP/MESSAGES diff --git a/openair-cn/S1AP/s1ap_common.c b/openair-cn/S1AP/s1ap_common.c index 948f199c0c..055641d12e 100644 --- a/openair-cn/S1AP/s1ap_common.c +++ b/openair-cn/S1AP/s1ap_common.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /*! \file s1ap_common.c * \brief s1ap procedures for both eNB and MME diff --git a/openair-cn/S1AP/s1ap_common.h b/openair-cn/S1AP/s1ap_common.h index 0024812fd2..3631535903 100644 --- a/openair-cn/S1AP/s1ap_common.h +++ b/openair-cn/S1AP/s1ap_common.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /** @defgroup _s1ap_impl_ S1AP Layer Reference Implementation * @ingroup _ref_implementation_ diff --git a/openair-cn/S1AP/s1ap_eNB.c b/openair-cn/S1AP/s1ap_eNB.c index da11f2893f..c880c3f3b4 100644 --- a/openair-cn/S1AP/s1ap_eNB.c +++ b/openair-cn/S1AP/s1ap_eNB.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB.h b/openair-cn/S1AP/s1ap_eNB.h index ac454be1ad..9c372493e9 100644 --- a/openair-cn/S1AP/s1ap_eNB.h +++ b/openair-cn/S1AP/s1ap_eNB.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c index 0e6de0b0f2..801dfd8780 100755 --- a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.h b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.h index 96b0938609..be9e0b24b4 100755 --- a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.h +++ b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_decoder.c b/openair-cn/S1AP/s1ap_eNB_decoder.c index 70d4eece32..f8230520ce 100644 --- a/openair-cn/S1AP/s1ap_eNB_decoder.c +++ b/openair-cn/S1AP/s1ap_eNB_decoder.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_decoder.h b/openair-cn/S1AP/s1ap_eNB_decoder.h index 76c47b0de7..4c3f5f4327 100644 --- a/openair-cn/S1AP/s1ap_eNB_decoder.h +++ b/openair-cn/S1AP/s1ap_eNB_decoder.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_default_values.h b/openair-cn/S1AP/s1ap_eNB_default_values.h index 42731cf5a6..c0fde9f6eb 100644 --- a/openair-cn/S1AP/s1ap_eNB_default_values.h +++ b/openair-cn/S1AP/s1ap_eNB_default_values.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_defs.h b/openair-cn/S1AP/s1ap_eNB_defs.h index 3474f9e7f6..2bf2758b89 100644 --- a/openair-cn/S1AP/s1ap_eNB_defs.h +++ b/openair-cn/S1AP/s1ap_eNB_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_encoder.c b/openair-cn/S1AP/s1ap_eNB_encoder.c index 5ec2f21613..a93bdc68f2 100644 --- a/openair-cn/S1AP/s1ap_eNB_encoder.c +++ b/openair-cn/S1AP/s1ap_eNB_encoder.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_encoder.h b/openair-cn/S1AP/s1ap_eNB_encoder.h index a1ffc57e3a..b55cf2c261 100644 --- a/openair-cn/S1AP/s1ap_eNB_encoder.h +++ b/openair-cn/S1AP/s1ap_eNB_encoder.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_handlers.c b/openair-cn/S1AP/s1ap_eNB_handlers.c index 7469e83ac2..6f0d4128c7 100644 --- a/openair-cn/S1AP/s1ap_eNB_handlers.c +++ b/openair-cn/S1AP/s1ap_eNB_handlers.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_handlers.h b/openair-cn/S1AP/s1ap_eNB_handlers.h index db0b2115ce..145fd04721 100644 --- a/openair-cn/S1AP/s1ap_eNB_handlers.h +++ b/openair-cn/S1AP/s1ap_eNB_handlers.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_itti_messaging.c b/openair-cn/S1AP/s1ap_eNB_itti_messaging.c index 849bd09ab2..b6cdf368f4 100644 --- a/openair-cn/S1AP/s1ap_eNB_itti_messaging.c +++ b/openair-cn/S1AP/s1ap_eNB_itti_messaging.c @@ -1,3 +1,31 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ #include "intertask_interface.h" #include "s1ap_eNB_itti_messaging.h" diff --git a/openair-cn/S1AP/s1ap_eNB_itti_messaging.h b/openair-cn/S1AP/s1ap_eNB_itti_messaging.h index d294a7d6ac..4021d623c4 100644 --- a/openair-cn/S1AP/s1ap_eNB_itti_messaging.h +++ b/openair-cn/S1AP/s1ap_eNB_itti_messaging.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_management_procedures.c b/openair-cn/S1AP/s1ap_eNB_management_procedures.c index d14ccc107b..eb30a8dada 100644 --- a/openair-cn/S1AP/s1ap_eNB_management_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_management_procedures.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_management_procedures.h b/openair-cn/S1AP/s1ap_eNB_management_procedures.h index 2709765df0..2e00add882 100644 --- a/openair-cn/S1AP/s1ap_eNB_management_procedures.h +++ b/openair-cn/S1AP/s1ap_eNB_management_procedures.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c index 612d6dfc7e..0cd4c08cb1 100644 --- a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_nas_procedures.h b/openair-cn/S1AP/s1ap_eNB_nas_procedures.h index 8085cce35a..552726e8ed 100644 --- a/openair-cn/S1AP/s1ap_eNB_nas_procedures.h +++ b/openair-cn/S1AP/s1ap_eNB_nas_procedures.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_nnsf.c b/openair-cn/S1AP/s1ap_eNB_nnsf.c index afb39a8a44..cf3d4436ed 100644 --- a/openair-cn/S1AP/s1ap_eNB_nnsf.c +++ b/openair-cn/S1AP/s1ap_eNB_nnsf.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_nnsf.h b/openair-cn/S1AP/s1ap_eNB_nnsf.h index fd51f4a323..687f40dd1d 100644 --- a/openair-cn/S1AP/s1ap_eNB_nnsf.h +++ b/openair-cn/S1AP/s1ap_eNB_nnsf.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_overload.c b/openair-cn/S1AP/s1ap_eNB_overload.c index 7ecc8f42c7..2c32f4f9de 100644 --- a/openair-cn/S1AP/s1ap_eNB_overload.c +++ b/openair-cn/S1AP/s1ap_eNB_overload.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_overload.h b/openair-cn/S1AP/s1ap_eNB_overload.h index ed6e59bc90..baa1ad1232 100644 --- a/openair-cn/S1AP/s1ap_eNB_overload.h +++ b/openair-cn/S1AP/s1ap_eNB_overload.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_trace.c b/openair-cn/S1AP/s1ap_eNB_trace.c index e792c81120..fd192d7320 100644 --- a/openair-cn/S1AP/s1ap_eNB_trace.c +++ b/openair-cn/S1AP/s1ap_eNB_trace.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_ue_context.c b/openair-cn/S1AP/s1ap_eNB_ue_context.c index 4588c4ade2..50df294dce 100644 --- a/openair-cn/S1AP/s1ap_eNB_ue_context.c +++ b/openair-cn/S1AP/s1ap_eNB_ue_context.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_eNB_ue_context.h b/openair-cn/S1AP/s1ap_eNB_ue_context.h index a153fa1952..43c9d0e2c2 100644 --- a/openair-cn/S1AP/s1ap_eNB_ue_context.h +++ b/openair-cn/S1AP/s1ap_eNB_ue_context.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/S1AP/s1ap_mme.c b/openair-cn/S1AP/s1ap_mme.c deleted file mode 100644 index a599d32c68..0000000000 --- a/openair-cn/S1AP/s1ap_mme.c +++ /dev/null @@ -1,474 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include - -#if !defined(MME_CLIENT_TEST) -# include "intertask_interface.h" -#endif - -#include "assertions.h" -#include "queue.h" - -#include "s1ap_mme.h" -#include "s1ap_mme_decoder.h" -#include "s1ap_mme_handlers.h" -#include "s1ap_ies_defs.h" - -#include "s1ap_mme_nas_procedures.h" -#include "s1ap_mme_retransmission.h" -#include "msc.h" - -#define S1AP_DEBUG_LIST -#ifdef S1AP_DEBUG_LIST -# define eNB_LIST_OUT(x, args...) S1AP_DEBUG("[eNB]%*s"x"\n", 4*indent, "", ##args) -# define UE_LIST_OUT(x, args...) S1AP_DEBUG("[UE] %*s"x"\n", 4*indent, "", ##args) -#else -# define eNB_LIST_OUT(x, args...) -# define UE_LIST_OUT(x, args...) -#endif - -#if !defined(MME_CLIENT_TEST) -// static pthread_t s1ap_task_thread; - -int hss_associated = 0; -uint32_t nb_eNB_associated = 0; -STAILQ_HEAD(eNB_list_s, eNB_description_s) -eNB_list_head; - -static int indent = 0; - -void *s1ap_mme_thread(void *args); - -static int s1ap_send_init_sctp(void) -{ - // Create and alloc new message - MessageDef *message_p; - message_p = itti_alloc_new_message(TASK_S1AP, SCTP_INIT_MSG); - message_p->ittiMsg.sctpInit.port = S1AP_PORT_NUMBER; - message_p->ittiMsg.sctpInit.ppid = S1AP_SCTP_PPID; - message_p->ittiMsg.sctpInit.ipv4 = 1; - message_p->ittiMsg.sctpInit.ipv6 = 0; - message_p->ittiMsg.sctpInit.nb_ipv4_addr = 1; - message_p->ittiMsg.sctpInit.ipv4_address[0] - = mme_config.ipv4.mme_ip_address_for_S1_MME; - /* SR WARNING: ipv6 multi-homing fails sometimes for localhost. - * Disable it for now.*/ - message_p->ittiMsg.sctpInit.nb_ipv6_addr = 0; - message_p->ittiMsg.sctpInit.ipv6_address[0] = "0:0:0:0:0:0:0:1"; - - return itti_send_msg_to_task(TASK_SCTP, INSTANCE_DEFAULT, message_p); -} - -void *s1ap_mme_thread(void *args) -{ - MessageDef *received_message_p; - - itti_mark_task_ready(TASK_S1AP); - MSC_START_USE(); - - while(1) { - /* Trying to fetch a message from the message queue. - * If the queue is empty, this function will block till a - * message is sent to the task. - */ - itti_receive_msg(TASK_S1AP, &received_message_p); - DevAssert(received_message_p != NULL); - - switch (ITTI_MSG_ID(received_message_p)) { - case ACTIVATE_MESSAGE: { - hss_associated = 1; - } - break; - - case SCTP_DATA_IND: { - /* New message received from SCTP layer. - * Decode and handle it. - */ - s1ap_message message; - - memset((void *)&message, 0, sizeof(s1ap_message)); - - /* Invoke S1AP message decoder */ - if (s1ap_mme_decode_pdu(&message, - SCTP_DATA_IND(received_message_p).buffer, - SCTP_DATA_IND(received_message_p).buf_length) < 0) { - // TODO: Notify eNB of failure with right cause - S1AP_ERROR("Failed to decode new buffer\n"); - } else { - s1ap_mme_handle_message(SCTP_DATA_IND(received_message_p).assoc_id, - SCTP_DATA_IND(received_message_p).stream, - &message); - } - - /* Free received PDU array */ - free(SCTP_DATA_IND(received_message_p).buffer); - } - break; - - /* SCTP layer notifies S1AP of disconnection of a peer. */ - case SCTP_CLOSE_ASSOCIATION: { - s1ap_handle_sctp_deconnection(SCTP_CLOSE_ASSOCIATION(received_message_p).assoc_id); - } - break; - - case SCTP_NEW_ASSOCIATION: { - s1ap_handle_new_association(&received_message_p->ittiMsg.sctp_new_peer); - } - break; - - case NAS_DOWNLINK_DATA_REQ: { - /* New message received from NAS task. - * This corresponds to a S1AP downlink nas transport message. - */ - s1ap_generate_downlink_nas_transport(NAS_DL_DATA_REQ(received_message_p).UEid, - NAS_DL_DATA_REQ(received_message_p).nasMsg.data, - NAS_DL_DATA_REQ(received_message_p).nasMsg.length); - } - break; - - case S1AP_UE_CONTEXT_RELEASE_COMMAND: { - s1ap_handle_ue_context_release_command(&received_message_p->ittiMsg.s1ap_ue_context_release_command); - } - break; - -#if defined(DISABLE_USE_NAS) - - case NAS_ATTACH_ACCEPT: { - s1ap_handle_attach_accepted(&received_message_p->ittiMsg.nas_attach_accept); - } - break; -#else - // handled by MME_APP know - //case NAS_CONNECTION_ESTABLISHMENT_CNF: { - // s1ap_handle_conn_est_cnf(&NAS_CONNECTION_ESTABLISHMENT_CNF(received_message_p)); - //} break; - - case MME_APP_CONNECTION_ESTABLISHMENT_CNF: { - s1ap_handle_conn_est_cnf(&MME_APP_CONNECTION_ESTABLISHMENT_CNF(received_message_p)); - } - break; -#endif - - case TIMER_HAS_EXPIRED: { - s1ap_handle_timer_expiry(&received_message_p->ittiMsg.timer_has_expired); - } - break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); - } - break; - - default: { - S1AP_DEBUG("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -int s1ap_mme_init(const mme_config_t *mme_config_p) -{ - S1AP_DEBUG("Initializing S1AP interface\n"); - - if (get_asn1c_environment_version() < ASN1_MINIMUM_VERSION) { - S1AP_ERROR("ASN1C version %d fount, expecting at least %d\n", - get_asn1c_environment_version(), ASN1_MINIMUM_VERSION); - return -1; - } else { - S1AP_DEBUG("ASN1C version %d\n", get_asn1c_environment_version()); - } - -#if defined(UPDATE_RELEASE_10) - S1AP_DEBUG("S1AP Release v10.5\n"); -#else -# if defined(UPDATE_RELEASE_9) - S1AP_DEBUG("S1AP Release v9.8\n"); -# else - S1AP_DEBUG("S1AP Release v8.10\n"); -# endif -#endif - - STAILQ_INIT(&eNB_list_head); - - if (itti_create_task(TASK_S1AP, &s1ap_mme_thread, NULL) < 0) { - S1AP_ERROR("Error while creating S1AP task\n"); - return -1; - } - - if (s1ap_send_init_sctp() < 0) { - S1AP_ERROR("Error while sendind SCTP_INIT_MSG to SCTP \n"); - return -1; - } - - S1AP_DEBUG("Initializing S1AP interface: DONE\n"); - return 0; -} - -void s1ap_dump_eNB_list(void) -{ - eNB_description_t *eNB_ref; - - STAILQ_FOREACH(eNB_ref, &eNB_list_head, eNB_entries) { - s1ap_dump_eNB(eNB_ref); - } -} - -void s1ap_dump_eNB(eNB_description_t *eNB_ref) -{ -#ifdef S1AP_DEBUG_LIST - ue_description_t *ue_ref; - //Reset indentation - indent = 0; - - if (eNB_ref == NULL) { - return; - } - - eNB_LIST_OUT(""); - eNB_LIST_OUT("eNB name: %s", eNB_ref->eNB_name == NULL ? "not present" : eNB_ref->eNB_name); - eNB_LIST_OUT("eNB ID: %07x", eNB_ref->eNB_id); - eNB_LIST_OUT("SCTP assoc id: %d", eNB_ref->sctp_assoc_id); - eNB_LIST_OUT("SCTP instreams: %d", eNB_ref->instreams); - eNB_LIST_OUT("SCTP outstreams: %d", eNB_ref->outstreams); - eNB_LIST_OUT("UE attache to eNB: %d", eNB_ref->nb_ue_associated); - - indent++; - - STAILQ_FOREACH(ue_ref, &eNB_ref->ue_list_head, ue_entries) { - s1ap_dump_ue(ue_ref); - } - indent--; - eNB_LIST_OUT(""); -#else - s1ap_dump_ue(NULL); -#endif -} - -void s1ap_dump_ue(ue_description_t *ue_ref) -{ -#ifdef S1AP_DEBUG_LIST - - if (ue_ref == NULL) return; - - UE_LIST_OUT("eNB UE s1ap id: 0x%06x", ue_ref->eNB_ue_s1ap_id); - UE_LIST_OUT("MME UE s1ap id: 0x%08x", ue_ref->mme_ue_s1ap_id); - UE_LIST_OUT("SCTP stream recv: 0x%04x", ue_ref->sctp_stream_recv); - UE_LIST_OUT("SCTP stream send: 0x%04x", ue_ref->sctp_stream_send); -#else - ue_ref = ue_ref; -#endif -} - -eNB_description_t* s1ap_is_eNB_id_in_list(const uint32_t eNB_id) -{ - - eNB_description_t *eNB_ref; - - STAILQ_FOREACH(eNB_ref, &eNB_list_head, eNB_entries) { - if (eNB_ref->eNB_id == eNB_id) { - /* We found a matching reference, return it */ - return eNB_ref; - } - } - /* No matching eNB, return NULL */ - return eNB_ref; -} - -eNB_description_t* s1ap_is_eNB_assoc_id_in_list(const uint32_t sctp_assoc_id) -{ - - eNB_description_t *eNB_ref; - - STAILQ_FOREACH(eNB_ref, &eNB_list_head, eNB_entries) { - if (eNB_ref->sctp_assoc_id == sctp_assoc_id) { - /* We found a matching reference, return it */ - return eNB_ref; - } - } - /* No matching eNB or no eNB in list, return NULL */ - return NULL; -} - -ue_description_t *s1ap_is_ue_eNB_id_in_list(eNB_description_t *eNB_ref, - const uint32_t eNB_ue_s1ap_id) -{ - ue_description_t *ue_ref; - - DevAssert(eNB_ref != NULL); - - STAILQ_FOREACH(ue_ref, &eNB_ref->ue_list_head, ue_entries) { - if (ue_ref->eNB_ue_s1ap_id == eNB_ue_s1ap_id) { - return ue_ref; - } - } - - return NULL; -} - -ue_description_t* s1ap_is_ue_mme_id_in_list(const uint32_t mme_ue_s1ap_id) -{ - - ue_description_t *ue_ref; - eNB_description_t *eNB_ref; - - STAILQ_FOREACH(eNB_ref, &eNB_list_head, eNB_entries) { - STAILQ_FOREACH(ue_ref, &eNB_ref->ue_list_head, ue_entries) { - // We found a matching reference, return it - if (ue_ref->mme_ue_s1ap_id == mme_ue_s1ap_id) { - return ue_ref; - } - } - } - - return NULL; -} - -ue_description_t* s1ap_is_teid_in_list(const uint32_t teid) -{ - - ue_description_t *ue_ref; - eNB_description_t *eNB_ref; - - STAILQ_FOREACH(eNB_ref, &eNB_list_head, eNB_entries) { - STAILQ_FOREACH(ue_ref, &eNB_ref->ue_list_head, ue_entries) { - // We found a matching reference, return it - if (ue_ref->teid == teid) { - return ue_ref; - } - } - } - - return NULL; -} - -eNB_description_t* s1ap_new_eNB(void) -{ - - eNB_description_t *eNB_ref = NULL; - - eNB_ref = calloc(1, sizeof(eNB_description_t)); - /* Something bad happened during malloc... - * May be we are running out of memory. - * TODO: Notify eNB with a cause like Hardware Failure. - */ - DevAssert(eNB_ref != NULL); - - // Update number of eNB associated - nb_eNB_associated++; - - STAILQ_INIT(&eNB_ref->ue_list_head); - - eNB_ref->nb_ue_associated = 0; - - STAILQ_INSERT_TAIL(&eNB_list_head, eNB_ref, eNB_entries); - - return eNB_ref; -} - -ue_description_t* s1ap_new_ue(const uint32_t sctp_assoc_id) -{ - - eNB_description_t *eNB_ref = NULL; - ue_description_t *ue_ref = NULL; - - eNB_ref = s1ap_is_eNB_assoc_id_in_list(sctp_assoc_id); - DevAssert(eNB_ref != NULL); - - ue_ref = calloc(1, sizeof(ue_description_t)); - /* Something bad happened during malloc... - * May be we are running out of memory. - * TODO: Notify eNB with a cause like Hardware Failure. - */ - DevAssert(ue_ref != NULL); - - ue_ref->eNB = eNB_ref; - - // Increment number of UE - eNB_ref->nb_ue_associated++; - STAILQ_INSERT_TAIL(&eNB_ref->ue_list_head, ue_ref, ue_entries); - - return ue_ref; -} - -void s1ap_remove_ue(ue_description_t *ue_ref) -{ - eNB_description_t *eNB_ref; - - /* NULL reference... */ - if (ue_ref == NULL) return; - - eNB_ref = ue_ref->eNB; - - /* Updating number of UE */ - eNB_ref->nb_ue_associated--; - /* Remove any attached timer */ - // s1ap_timer_remove_ue(ue_ref->mme_ue_s1ap_id); - - STAILQ_REMOVE(&eNB_ref->ue_list_head, ue_ref, ue_description_s, ue_entries); - eNB_ref->nb_ue_associated--; - - /* Freeing memory */ - free(ue_ref); - ue_ref = NULL; -} - -void s1ap_remove_eNB(eNB_description_t *eNB_ref) -{ - ue_description_t *ue_ref; - - if (eNB_ref == NULL) return; - - while (!STAILQ_EMPTY(&eNB_ref->ue_list_head)) { - ue_ref = STAILQ_FIRST(&eNB_ref->ue_list_head); - eNB_ref->nb_ue_associated--; - STAILQ_REMOVE_HEAD(&eNB_ref->ue_list_head, ue_entries); - free(ue_ref); - } - - STAILQ_REMOVE(&eNB_list_head, eNB_ref, eNB_description_s, eNB_entries); - - free(eNB_ref); - eNB_ref = NULL; - nb_eNB_associated--; -} - -#endif diff --git a/openair-cn/S1AP/s1ap_mme.h b/openair-cn/S1AP/s1ap_mme.h deleted file mode 100644 index 1b33ec297d..0000000000 --- a/openair-cn/S1AP/s1ap_mme.h +++ /dev/null @@ -1,185 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#if !defined(MME_CLIENT_TEST) -# include "intertask_interface.h" -#endif - -#include "mme_config.h" - -#ifndef S1AP_MME_H_ -#define S1AP_MME_H_ - -// Forward declarations -struct eNB_description_s; - -enum s1_eNB_state_s { - S1AP_RESETING, ///< After a reset request (eNB or MME initiated) - S1AP_READY ///< MME and eNB are S1 associated, UE contexts can be added -}; - -enum s1_ue_state_s { - S1AP_UE_WAITING_CSR, ///< Waiting for Initial Context Setup Response - S1AP_UE_HANDOVER, ///< Handover procedure triggered - S1AP_UE_CONNECTED, ///< UE context ready -}; - -/** Main structure representing UE association over s1ap - * Generated every time a new InitialUEMessage is received - **/ -typedef struct ue_description_s { - STAILQ_ENTRY(ue_description_s) ue_entries; - - struct eNB_description_s *eNB; ///< Which eNB this UE is attached to - - enum s1_ue_state_s s1_ue_state; ///< S1AP UE state - - unsigned eNB_ue_s1ap_id:24; ///< Unique UE id over eNB (24 bits wide) - uint32_t mme_ue_s1ap_id; ///< Unique UE id over MME (32 bits wide) - - /** SCTP stream on which S1 message will be sent/received. - * During an UE S1 connection, a pair of streams is - * allocated and is used during all the connection. - * Stream 0 is reserved for non UE signalling. - * @name sctp stream identifier - **/ - /*@{*/ - uint16_t sctp_stream_recv; ///< eNB -> MME stream - uint16_t sctp_stream_send; ///< MME -> eNB stream - /*@}*/ - - uint32_t teid; - - /* Timer for procedure outcume issued by MME that should be answered */ - long outcome_response_timer_id; -} ue_description_t; - -/* Main structure representing eNB association over s1ap - * Generated (or updated) every time a new S1SetupRequest is received. - */ -typedef struct eNB_description_s { - STAILQ_ENTRY(eNB_description_s) eNB_entries; - - enum s1_eNB_state_s s1_state; ///< State of the eNB S1AP association over MME - - /** eNB related parameters **/ - /*@{*/ - char eNB_name[150]; ///< Printable eNB Name - uint32_t eNB_id; ///< Unique eNB ID - uint8_t default_paging_drx; ///< Default paging DRX interval for eNB - /*@}*/ - - /** UE list for this eNB **/ - /*@{*/ - uint32_t nb_ue_associated; ///< Number of NAS associated UE on this eNB - STAILQ_HEAD(ue_list_s, ue_description_s) ue_list_head; - /*@}*/ - - /** SCTP stuff **/ - /*@{*/ - uint32_t sctp_assoc_id; ///< SCTP association id on this machine - uint16_t next_sctp_stream; ///< Next SCTP stream - uint16_t instreams; ///< Number of streams avalaible on eNB -> MME - uint16_t outstreams; ///< Number of streams avalaible on MME -> eNB - /*@}*/ -} eNB_description_t; - -extern int hss_associated; -extern uint32_t nb_eNB_associated; -extern mme_config_t *global_mme_config_p; - -/** \brief S1AP layer top init - * @returns -1 in case of failure - **/ -int s1ap_mme_init(const mme_config_t *mme_config); - -/** \brief Look for given eNB id in the list - * \param eNB_id The unique eNB id to search in list - * @returns NULL if no eNB matchs the eNB id, or reference to the eNB element in list if matches - **/ -eNB_description_t* s1ap_is_eNB_id_in_list(const uint32_t eNB_id); - -/** \brief Look for given eNB SCTP assoc id in the list - * \param eNB_id The unique sctp assoc id to search in list - * @returns NULL if no eNB matchs the sctp assoc id, or reference to the eNB element in list if matches - **/ -eNB_description_t* s1ap_is_eNB_assoc_id_in_list(const uint32_t sctp_assoc_id); - -/** \brief Look for given ue eNB id in the list - * \param eNB_id The unique ue_eNB_id to search in list - * @returns NULL if no UE matchs the ue_eNB_id, or reference to the ue element in list if matches - **/ -ue_description_t* s1ap_is_ue_eNB_id_in_list(eNB_description_t *eNB_ref, - const uint32_t eNB_ue_s1ap_id); - -/** \brief Look for given ue mme id in the list - * \param eNB_id The unique ue_mme_id to search in list - * @returns NULL if no UE matchs the ue_mme_id, or reference to the ue element in list if matches - **/ -ue_description_t* s1ap_is_ue_mme_id_in_list(const uint32_t ue_mme_id); -ue_description_t* s1ap_is_teid_in_list(const uint32_t teid); - -/** \brief Allocate and add to the list a new eNB descriptor - * @returns Reference to the new eNB element in list - **/ -eNB_description_t* s1ap_new_eNB(void); - -/** \brief Allocate and add to the right eNB list a new UE descriptor - * \param sctp_assoc_id association ID over SCTP - * @returns Reference to the new UE element in list - **/ -ue_description_t* s1ap_new_ue(const uint32_t sctp_assoc_id); - -/** \brief Dump the eNB list - * Calls dump_eNB for each eNB in list - **/ -void s1ap_dump_eNB_list(void); - -/** \brief Dump eNB related information. - * Calls dump_ue for each UE in list - * \param eNB_ref eNB structure reference to dump - **/ -void s1ap_dump_eNB(eNB_description_t *eNB_ref); - -/** \brief Dump UE related information. - * \param ue_ref ue structure reference to dump - **/ -void s1ap_dump_ue(ue_description_t *ue_ref); - -/** \brief Remove target UE from the list - * \param ue_ref UE structure reference to remove - **/ -void s1ap_remove_ue(ue_description_t *ue_ref); - -/** \brief Remove target eNB from the list and remove any UE associated - * \param eNB_ref eNB structure reference to remove - **/ -void s1ap_remove_eNB(eNB_description_t *eNB_ref); - -#endif /* S1AP_MME_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_decoder.c b/openair-cn/S1AP/s1ap_mme_decoder.c deleted file mode 100644 index 4ee8aca34b..0000000000 --- a/openair-cn/S1AP/s1ap_mme_decoder.c +++ /dev/null @@ -1,297 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s1ap_mme_decoder.c - * \brief s1ap decode procedures for MME - * \author Sebastien ROUX - * \date 2012 - * \version 0.1 - */ - -#include -#include -#include - -#include "assertions.h" -#include "s1ap_common.h" -#include "s1ap_ies_defs.h" -#include "s1ap_mme_decoder.h" -#include "s1ap_mme_handlers.h" - -#if !defined(MME_CLIENT_TEST) -# include "intertask_interface.h" -#endif - -#include "assertions.h" - -static int s1ap_mme_decode_initiating( - s1ap_message *message, S1ap_InitiatingMessage_t *initiating_p) -{ - int ret = -1; - - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(initiating_p != NULL); - - message_string = calloc(10000, sizeof(char)); - s1ap_string_total_size = 0; - - message->procedureCode = initiating_p->procedureCode; - message->criticality = initiating_p->criticality; - - switch(initiating_p->procedureCode) { - case S1ap_ProcedureCode_id_uplinkNASTransport: { - ret = s1ap_decode_s1ap_uplinknastransporties( - &message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value); - s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string, - message); - message_id = S1AP_UPLINK_NAS_LOG; - } - break; - - case S1ap_ProcedureCode_id_S1Setup: { - ret = s1ap_decode_s1ap_s1setuprequesties(&message->msg.s1ap_S1SetupRequestIEs, - &initiating_p->value); - s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, message); - message_id = S1AP_S1_SETUP_LOG; - } - break; - - case S1ap_ProcedureCode_id_initialUEMessage: { - ret = s1ap_decode_s1ap_initialuemessageies( - &message->msg.s1ap_InitialUEMessageIEs, - &initiating_p->value); - s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string, - message); - message_id = S1AP_INITIAL_UE_MESSAGE_LOG; - } - break; - - case S1ap_ProcedureCode_id_UEContextReleaseRequest: { - ret = s1ap_decode_s1ap_uecontextreleaserequesties( - &message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value); - s1ap_xer_print_s1ap_uecontextreleaserequest(s1ap_xer__print2sp, message_string, - message); - message_id = S1AP_UE_CONTEXT_RELEASE_REQ_LOG; - } - break; - - case S1ap_ProcedureCode_id_UECapabilityInfoIndication: { - ret = s1ap_decode_s1ap_uecapabilityinfoindicationies( - &message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value); - s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp, - message_string, message); - message_id = S1AP_UE_CAPABILITY_IND_LOG; - } - break; - - case S1ap_ProcedureCode_id_NASNonDeliveryIndication: { - ret = s1ap_decode_s1ap_nasnondeliveryindication_ies( - &message->msg.s1ap_NASNonDeliveryIndication_IEs, &initiating_p->value); - s1ap_xer_print_s1ap_nasnondeliveryindication_(s1ap_xer__print2sp, - message_string, message); - message_id = S1AP_NAS_NON_DELIVERY_IND_LOG; - } - break; - - default: { - S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n", - (int)initiating_p->procedureCode); - AssertFatal(0, "Unknown procedure ID (%d) for initiating message\n", - (int)initiating_p->procedureCode); - } - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_uplink_nas_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_uplink_nas_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static int s1ap_mme_decode_successfull_outcome( - s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p) -{ - int ret = -1; - MessageDef *message_p = NULL; - char *message_string = NULL; - size_t message_string_size = 0; - MessagesIds message_id = MESSAGES_ID_MAX; - - DevAssert(successfullOutcome_p != NULL); - - message_string = calloc(10000, sizeof(char)); - s1ap_string_total_size = 0; - - message->procedureCode = successfullOutcome_p->procedureCode; - message->criticality = successfullOutcome_p->criticality; - - switch(successfullOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_InitialContextSetup: { - ret = s1ap_decode_s1ap_initialcontextsetupresponseies( - &message->msg.s1ap_InitialContextSetupResponseIEs, - &successfullOutcome_p->value); - s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp, - message_string, message); - message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; - } - break; - - case S1ap_ProcedureCode_id_UEContextRelease: { - ret = s1ap_decode_s1ap_uecontextreleasecompleteies( - &message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value); - s1ap_xer_print_s1ap_uecontextreleasecomplete(s1ap_xer__print2sp, - message_string, message); - message_id = S1AP_UE_CONTEXT_RELEASE_LOG; - } - break; - - default: { - S1AP_ERROR("Unknown procedure ID (%ld) for successfull outcome message\n", - successfullOutcome_p->procedureCode); - } - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -static int s1ap_mme_decode_unsuccessfull_outcome( - s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfulOutcome_p) -{ - int ret = -1; - - MessageDef *message_p; - char *message_string = NULL; - size_t message_string_size; - MessagesIds message_id; - - DevAssert(unSuccessfulOutcome_p != NULL); - - message_string = calloc(10000, sizeof(char)); - s1ap_string_total_size = 0; - - message->procedureCode = unSuccessfulOutcome_p->procedureCode; - message->criticality = unSuccessfulOutcome_p->criticality; - - switch(unSuccessfulOutcome_p->procedureCode) { - case S1ap_ProcedureCode_id_InitialContextSetup: { - ret = s1ap_decode_s1ap_initialcontextsetupfailureies( - &message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfulOutcome_p->value); - s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp, - message_string, message); - message_id = S1AP_INITIAL_CONTEXT_SETUP_LOG; - } - break; - - default: { - S1AP_ERROR("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)unSuccessfulOutcome_p->procedureCode); - } - break; - } - - message_string_size = strlen(message_string); - - message_p = itti_alloc_new_message_sized(TASK_S1AP, message_id, message_string_size + sizeof (IttiMsgText)); - message_p->ittiMsg.s1ap_initial_context_setup_log.size = message_string_size; - memcpy(&message_p->ittiMsg.s1ap_initial_context_setup_log.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); - - free(message_string); - - return ret; -} - -int s1ap_mme_decode_pdu(s1ap_message *message, uint8_t *buffer, uint32_t len) -{ - S1AP_PDU_t pdu; - S1AP_PDU_t *pdu_p = &pdu; - asn_dec_rval_t dec_ret; - - DevAssert(buffer != NULL); - - memset((void *)pdu_p, 0, sizeof(S1AP_PDU_t)); - - dec_ret = aper_decode(NULL, - &asn_DEF_S1AP_PDU, - (void **)&pdu_p, - buffer, - len, - 0, - 0); - - if (dec_ret.code != RC_OK) { - S1AP_ERROR("Failed to decode PDU\n"); - return -1; - } - - message->direction = pdu_p->present; - - switch(pdu_p->present) { - case S1AP_PDU_PR_initiatingMessage: - return s1ap_mme_decode_initiating(message, &pdu_p->choice.initiatingMessage); - - case S1AP_PDU_PR_successfulOutcome: - return s1ap_mme_decode_successfull_outcome(message, - &pdu_p->choice.successfulOutcome); - - case S1AP_PDU_PR_unsuccessfulOutcome: - return s1ap_mme_decode_unsuccessfull_outcome(message, - &pdu_p->choice.unsuccessfulOutcome); - - default: - S1AP_ERROR("Unknown message outcome (%d) or not implemented", - (int)pdu_p->present); - break; - } - - return -1; -} diff --git a/openair-cn/S1AP/s1ap_mme_decoder.h b/openair-cn/S1AP/s1ap_mme_decoder.h deleted file mode 100644 index 4f5e13c373..0000000000 --- a/openair-cn/S1AP/s1ap_mme_decoder.h +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "s1ap_common.h" -#include "s1ap_ies_defs.h" - -#ifndef S1AP_MME_DECODER_H_ -#define S1AP_MME_DECODER_H_ - -int s1ap_mme_decode_pdu(s1ap_message *message, uint8_t *buffer, uint32_t len) -__attribute__ ((warn_unused_result)); - -#endif /* S1AP_MME_DECODER_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_encoder.c b/openair-cn/S1AP/s1ap_mme_encoder.c deleted file mode 100644 index 6209a93334..0000000000 --- a/openair-cn/S1AP/s1ap_mme_encoder.c +++ /dev/null @@ -1,266 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s1ap_mme_encoder.c - * \brief s1ap encode procedures for MME - * \author Sebastien ROUX - * \date 2012 - * \version 0.1 - */ - -#include "intertask_interface.h" - -#include "s1ap_common.h" -#include "s1ap_ies_defs.h" -#include "s1ap_mme_encoder.h" -#include "s1ap_mme.h" - -#include "assertions.h" - -static inline -int s1ap_mme_encode_initial_context_setup_request(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length); -static inline -int s1ap_mme_encode_s1setupresponse(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length); -static inline -int s1ap_mme_encode_s1setupfailure(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length); -static inline -int s1ap_mme_encode_ue_context_release_command(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length); -static inline -int s1ap_mme_encode_downlink_nas_transport( - s1ap_message *message_p, uint8_t **buffer, uint32_t *length); - -static inline -int s1ap_mme_encode_initiating(s1ap_message *message_p, - uint8_t **buffer, - uint32_t *length); -static inline -int s1ap_mme_encode_successfull_outcome(s1ap_message *message_p, - uint8_t **buffer, uint32_t *len); -static inline -int s1ap_mme_encode_unsuccessfull_outcome(s1ap_message *message_p, - uint8_t **buffer, uint32_t *len); - -static inline -int s1ap_mme_encode_initial_context_setup_request(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - S1ap_InitialContextSetupRequest_t initialContextSetupRequest; - S1ap_InitialContextSetupRequest_t *initialContextSetupRequest_p = - &initialContextSetupRequest; - - memset(initialContextSetupRequest_p, 0, sizeof(S1ap_InitialContextSetupRequest_t)); - - if (s1ap_encode_s1ap_initialcontextsetuprequesties(initialContextSetupRequest_p, - &message_p->msg.s1ap_InitialContextSetupRequestIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_InitialContextSetup, - S1ap_Criticality_reject, - &asn_DEF_S1ap_InitialContextSetupRequest, - initialContextSetupRequest_p); -} - -int s1ap_mme_encode_pdu(s1ap_message *message_p, uint8_t **buffer, uint32_t *length) -{ - DevAssert(message_p != NULL); - DevAssert(buffer != NULL); - DevAssert(length != NULL); - - switch(message_p->direction) { - case S1AP_PDU_PR_initiatingMessage: - return s1ap_mme_encode_initiating(message_p, buffer, length); - - case S1AP_PDU_PR_successfulOutcome: - return s1ap_mme_encode_successfull_outcome(message_p, buffer, length); - - case S1AP_PDU_PR_unsuccessfulOutcome: - return s1ap_mme_encode_unsuccessfull_outcome(message_p, buffer, length); - - default: - S1AP_DEBUG("Unknown message outcome (%d) or not implemented", - (int)message_p->direction); - break; - } - - return -1; -} - -static inline -int s1ap_mme_encode_initiating(s1ap_message *message_p, - uint8_t **buffer, - uint32_t *length) -{ - switch(message_p->procedureCode) { - case S1ap_ProcedureCode_id_downlinkNASTransport: - return s1ap_mme_encode_downlink_nas_transport(message_p, buffer, length); - - case S1ap_ProcedureCode_id_InitialContextSetup: - return s1ap_mme_encode_initial_context_setup_request(message_p, buffer, length); - - case S1ap_ProcedureCode_id_UEContextRelease: - return s1ap_mme_encode_ue_context_release_command(message_p, buffer, length); - - default: - S1AP_DEBUG("Unknown procedure ID (%d) for initiating message_p\n", - (int)message_p->procedureCode); - break; - } - - return -1; -} - -static inline -int s1ap_mme_encode_successfull_outcome(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - switch(message_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - return s1ap_mme_encode_s1setupresponse(message_p, buffer, length); - - default: - S1AP_DEBUG("Unknown procedure ID (%d) for successfull outcome message\n", - (int)message_p->procedureCode); - break; - } - - return -1; -} - -static inline -int s1ap_mme_encode_unsuccessfull_outcome(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - switch(message_p->procedureCode) { - case S1ap_ProcedureCode_id_S1Setup: - return s1ap_mme_encode_s1setupfailure(message_p, buffer, length); - - default: - S1AP_DEBUG("Unknown procedure ID (%d) for unsuccessfull outcome message\n", - (int)message_p->procedureCode); - break; - } - - return -1; -} - -static inline -int s1ap_mme_encode_s1setupresponse(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - S1ap_S1SetupResponse_t s1SetupResponse; - S1ap_S1SetupResponse_t *s1SetupResponse_p = &s1SetupResponse; - - memset(s1SetupResponse_p, 0, sizeof(S1ap_S1SetupResponse_t)); - - if (s1ap_encode_s1ap_s1setupresponseies(s1SetupResponse_p, &message_p->msg.s1ap_S1SetupResponseIEs) < 0) { - return -1; - } - - return s1ap_generate_successfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_S1Setup, - message_p->criticality, - &asn_DEF_S1ap_S1SetupResponse, - s1SetupResponse_p); -} - -static inline -int s1ap_mme_encode_s1setupfailure(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - S1ap_S1SetupFailure_t s1SetupFailure; - S1ap_S1SetupFailure_t *s1SetupFailure_p = &s1SetupFailure; - - memset(s1SetupFailure_p, 0, sizeof(S1ap_S1SetupFailure_t)); - - if (s1ap_encode_s1ap_s1setupfailureies(s1SetupFailure_p, &message_p->msg.s1ap_S1SetupFailureIEs) < 0) { - return -1; - } - - return s1ap_generate_unsuccessfull_outcome(buffer, - length, - S1ap_ProcedureCode_id_S1Setup, - message_p->criticality, - &asn_DEF_S1ap_S1SetupFailure, - s1SetupFailure_p); -} - -static inline -int s1ap_mme_encode_downlink_nas_transport( - s1ap_message *message_p, uint8_t **buffer, uint32_t *length) -{ - S1ap_DownlinkNASTransport_t downlinkNasTransport; - S1ap_DownlinkNASTransport_t *downlinkNasTransport_p = &downlinkNasTransport; - - memset(downlinkNasTransport_p, 0, sizeof(S1ap_DownlinkNASTransport_t)); - - /* Convert IE structure into asn1 message_p */ - if (s1ap_encode_s1ap_downlinknastransporties(downlinkNasTransport_p, - &message_p->msg.s1ap_DownlinkNASTransportIEs) < 0) { - return -1; - } - - /* Generate Initiating message_p for the list of IEs */ - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_downlinkNASTransport, - message_p->criticality, - &asn_DEF_S1ap_DownlinkNASTransport, - downlinkNasTransport_p); -} - -static inline -int s1ap_mme_encode_ue_context_release_command(s1ap_message *message_p, - uint8_t **buffer, uint32_t *length) -{ - S1ap_UEContextReleaseCommand_t ueContextReleaseCommand; - S1ap_UEContextReleaseCommand_t *ueContextReleaseCommand_p = &ueContextReleaseCommand; - - memset(ueContextReleaseCommand_p, 0, sizeof(S1ap_UEContextReleaseCommand_t)); - - /* Convert IE structure into asn1 message_p */ - if (s1ap_encode_s1ap_uecontextreleasecommandies(ueContextReleaseCommand_p, - &message_p->msg.s1ap_UEContextReleaseCommandIEs) < 0) { - return -1; - } - - return s1ap_generate_initiating_message(buffer, - length, - S1ap_ProcedureCode_id_UEContextRelease, - message_p->criticality, - &asn_DEF_S1ap_UEContextReleaseCommand, - ueContextReleaseCommand_p); -} diff --git a/openair-cn/S1AP/s1ap_mme_encoder.h b/openair-cn/S1AP/s1ap_mme_encoder.h deleted file mode 100644 index fb8c6adf89..0000000000 --- a/openair-cn/S1AP/s1ap_mme_encoder.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include - -#ifndef S1AP_MME_ENCODER_H_ -#define S1AP_MME_ENCODER_H_ - -int s1ap_mme_encode_pdu(s1ap_message *message, uint8_t **buffer, uint32_t *len) -__attribute__ ((warn_unused_result)); - -#endif /* S1AP_MME_ENCODER_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_handlers.c b/openair-cn/S1AP/s1ap_mme_handlers.c deleted file mode 100644 index e1a9d48059..0000000000 --- a/openair-cn/S1AP/s1ap_mme_handlers.c +++ /dev/null @@ -1,1212 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include - -#include "mme_config.h" -#include "assertions.h" -#include "conversions.h" - -#include "s1ap_common.h" -#include "s1ap_ies_defs.h" -#include "s1ap_mme_encoder.h" -#include "s1ap_mme_handlers.h" -#include "s1ap_mme_nas_procedures.h" - -#include "s1ap_mme_itti_messaging.h" - -#include "s1ap_mme.h" -#include "s1ap_mme_ta.h" -#include "msc.h" - -static int s1ap_generate_s1_setup_response(eNB_description_t *eNB_association); -static int s1ap_mme_generate_ue_context_release_command( - ue_description_t *ue_ref); - -//Forward declaration -struct s1ap_message_s; - -/* Handlers matrix. Only mme related procedures present here. - */ -s1ap_message_decoded_callback messages_callback[][3] = { - { 0, 0, 0 }, /* HandoverPreparation */ - { 0, 0, 0 }, /* HandoverResourceAllocation */ - { 0, 0, 0 }, /* HandoverNotification */ - { s1ap_mme_handle_path_switch_request, 0, 0 }, /* PathSwitchRequest */ - { 0, 0, 0 }, /* HandoverCancel */ - { 0, 0, 0 }, /* E_RABSetup */ - { 0, 0, 0 }, /* E_RABModify */ - { 0, 0, 0 }, /* E_RABRelease */ - { 0, 0, 0 }, /* E_RABReleaseIndication */ - { - 0, s1ap_mme_handle_initial_context_setup_response, - s1ap_mme_handle_initial_context_setup_failure - }, /* InitialContextSetup */ - { 0, 0, 0 }, /* Paging */ - { 0, 0, 0 }, /* downlinkNASTransport */ - { s1ap_mme_handle_initial_ue_message, 0, 0 }, /* initialUEMessage */ - { s1ap_mme_handle_uplink_nas_transport, 0, 0 }, /* uplinkNASTransport */ - { 0, 0, 0 }, /* Reset */ - { 0, 0, 0 }, /* ErrorIndication */ - { s1ap_mme_handle_nas_non_delivery, 0, 0 }, /* NASNonDeliveryIndication */ - { s1ap_mme_handle_s1_setup_request, 0, 0 }, /* S1Setup */ - { s1ap_mme_handle_ue_context_release_request, 0, 0 }, /* UEContextReleaseRequest */ - { 0, 0, 0 }, /* DownlinkS1cdma2000tunneling */ - { 0, 0, 0 }, /* UplinkS1cdma2000tunneling */ - { 0, 0, 0 }, /* UEContextModification */ - { s1ap_mme_handle_ue_cap_indication, 0, 0 }, /* UECapabilityInfoIndication*/ - { - s1ap_mme_handle_ue_context_release_request, - s1ap_mme_handle_ue_context_release_complete, 0 - }, /* UEContextRelease*/ - { 0, 0, 0 }, /* eNBStatusTransfer*/ - { 0, 0, 0 }, /* MMEStatusTransfer*/ - { 0, 0, 0 }, /* DeactivateTrace*/ - { 0, 0, 0 }, /* TraceStart*/ - { 0, 0, 0 }, /* TraceFailureIndication*/ - { 0, 0, 0 }, /* ENBConfigurationUpdate*/ - { 0, 0, 0 }, /* MMEConfigurationUpdate*/ - { 0, 0, 0 }, /* LocationReportingControl*/ - { 0, 0, 0 }, /* LocationReportingFailureIndication*/ - { 0, 0, 0 }, /* LocationReport*/ - { 0, 0, 0 }, /* OverloadStart*/ - { 0, 0, 0 }, /* OverloadStop*/ - { 0, 0, 0 }, /* WriteReplaceWarning*/ - { 0, 0, 0 }, /* eNBDirectInformationTransfer*/ - { 0, 0, 0 }, /* MMEDirectInformationTransfer*/ - { 0, 0, 0 }, /* PrivateMessage*/ - { 0, 0, 0 }, /* eNBConfigurationTransfer*/ - { 0, 0, 0 }, /* MMEConfigurationTransfer*/ - { 0, 0, 0 }, /* CellTrafficTrace */ -#if defined(UPDATE_RELEASE_9) - { 0, 0, 0 }, /* Kill */ - { 0, 0, 0 }, /* DownlinkUEAssociatedLPPaTransport */ - { 0, 0, 0 }, /* UplinkUEAssociatedLPPaTransport */ - { 0, 0, 0 }, /* DownlinkNonUEAssociatedLPPaTransport */ - { 0, 0, 0 }, /* UplinkNonUEAssociatedLPPaTransport */ -#endif -}; - -const char *s1ap_direction2String[] = { - "", /* Nothing */ - "Originating message", /* originating message */ - "Successfull outcome", /* successfull outcome */ - "UnSuccessfull outcome", /* successfull outcome */ -}; - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_message(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - /* Checking procedure Code and direction of message */ - if ((message->procedureCode > (sizeof(messages_callback) / (3 * sizeof( - s1ap_message_decoded_callback)))) || - (message->direction > S1AP_PDU_PR_unsuccessfulOutcome)) { - - S1AP_DEBUG("[SCTP %d] Either procedureCode %d or direction %d exceed expected\n", - assoc_id, (int)message->procedureCode, (int)message->direction); - return -1; - } - - /* No handler present. - * This can mean not implemented or no procedure for eNB (wrong message). - */ - if (messages_callback[message->procedureCode][message->direction-1] == NULL) { - S1AP_DEBUG("[SCTP %d] No handler for procedureCode %d in %s\n", assoc_id, - (int)message->procedureCode, - s1ap_direction2String[(int)message->direction]); - return -2; - } - - /* Calling the right handler */ - return (*messages_callback[message->procedureCode][message->direction-1])( - assoc_id, stream, message); -} - -//------------------------------------------------------------------------------ -int s1ap_mme_set_cause(S1ap_Cause_t *cause_p, S1ap_Cause_PR cause_type, long cause_value) -//------------------------------------------------------------------------------ -{ - DevAssert(cause_p != NULL); - - cause_p->present = cause_type; - - switch(cause_type) { - case S1ap_Cause_PR_radioNetwork: - cause_p->choice.misc = cause_value; - break; - - case S1ap_Cause_PR_transport: - cause_p->choice.transport = cause_value; - break; - - case S1ap_Cause_PR_nas: - cause_p->choice.nas = cause_value; - break; - - case S1ap_Cause_PR_protocol: - cause_p->choice.protocol = cause_value; - break; - - case S1ap_Cause_PR_misc: - cause_p->choice.misc = cause_value; - break; - - default: - return -1; - } - - return 0; -} - -//------------------------------------------------------------------------------ -int s1ap_mme_generate_s1_setup_failure( - uint32_t assoc_id, S1ap_Cause_PR cause_type, long cause_value, - long time_to_wait) -//------------------------------------------------------------------------------ -{ - uint8_t *buffer_p; - uint32_t length; - s1ap_message message; - S1ap_S1SetupFailureIEs_t *s1_setup_failure_p; - - memset(&message, 0, sizeof(s1ap_message)); - - s1_setup_failure_p = &message.msg.s1ap_S1SetupFailureIEs; - - message.procedureCode = S1ap_ProcedureCode_id_S1Setup; - message.direction = S1AP_PDU_PR_unsuccessfulOutcome; - - s1ap_mme_set_cause(&s1_setup_failure_p->cause, cause_type, cause_value); - - /* Include the optional field time to wait only if the value is > -1 */ - if (time_to_wait > -1) { - s1_setup_failure_p->presenceMask |= S1AP_S1SETUPFAILUREIES_TIMETOWAIT_PRESENT; - s1_setup_failure_p->timeToWait = time_to_wait; - } - - if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { - S1AP_ERROR("Failed to encode s1 setup failure\n"); - return -1; - } - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 S1Setup/unsuccessfulOutcome assoc_id %u cause %u value %u", - assoc_id, cause_type, cause_value); - return s1ap_mme_itti_send_sctp_request(buffer_p, length, assoc_id, 0); -} - -//////////////////////////////////////////////////////////////////////////////// -//************************** Management procedures ***************************// -//////////////////////////////////////////////////////////////////////////////// - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_s1_setup_request(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - if (hss_associated) { - S1ap_S1SetupRequestIEs_t *s1SetupRequest_p; - eNB_description_t *eNB_association; - uint32_t eNB_id = 0; - char *eNB_name = NULL; - int ta_ret; - uint16_t max_enb_connected; - - DevAssert(message != NULL); - - s1SetupRequest_p = &message->msg.s1ap_S1SetupRequestIEs; - - /* We received a new valid S1 Setup Request on a stream != 0. - * This should not happen -> reject eNB s1 setup request. - */ - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 S1Setup/%s assoc_id %u stream %u", - s1ap_direction2String[message->direction], - assoc_id, stream); - - if (stream != 0) { - S1AP_ERROR("Received new s1 setup request on stream != 0\n"); - /* Send a s1 setup failure with protocol cause unspecified */ - return s1ap_mme_generate_s1_setup_failure(assoc_id, S1ap_Cause_PR_protocol, - S1ap_CauseProtocol_unspecified, -1); - } - - S1AP_DEBUG("New s1 setup request incoming from "); - - if (s1SetupRequest_p->presenceMask & S1AP_S1SETUPREQUESTIES_ENBNAME_PRESENT) { - S1AP_DEBUG("%*s ", s1SetupRequest_p->eNBname.size, s1SetupRequest_p->eNBname.buf); - eNB_name = (char *)s1SetupRequest_p->eNBname.buf; - } - - if (s1SetupRequest_p->global_ENB_ID.eNB_ID.present == S1ap_ENB_ID_PR_homeENB_ID) { - // Home eNB ID = 28 bits - uint8_t *eNB_id_buf = - s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.homeENB_ID.buf; - - if (s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.size != 28) { - //TODO: handle case were size != 28 -> notify ? reject ? - } - - eNB_id = (eNB_id_buf[0] << 20) + (eNB_id_buf[1] << 12) + - (eNB_id_buf[2] << 4) + ((eNB_id_buf[3] & 0xf0) >> 4); - S1AP_DEBUG("home eNB id: %07x\n", eNB_id); - } else { - // Macro eNB = 20 bits - uint8_t *eNB_id_buf = - s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.buf; - - if (s1SetupRequest_p->global_ENB_ID.eNB_ID.choice.macroENB_ID.size != 20) { - //TODO: handle case were size != 20 -> notify ? reject ? - } - - eNB_id = (eNB_id_buf[0] << 12) + (eNB_id_buf[1] << 4) + (( - eNB_id_buf[2] & 0xf0) >> 4); - S1AP_DEBUG("macro eNB id: %05x\n", eNB_id); - } - - config_read_lock(&mme_config); - max_enb_connected = mme_config.max_eNBs; - config_unlock(&mme_config); - - if (nb_eNB_associated == max_enb_connected) { - S1AP_ERROR("There is too much eNB connected to MME, rejecting the association\n"); - S1AP_DEBUG("Connected = %d, maximum allowed = %d\n", nb_eNB_associated, - max_enb_connected); - - /* Send an overload cause... */ - return s1ap_mme_generate_s1_setup_failure(assoc_id, S1ap_Cause_PR_misc, - S1ap_CauseMisc_control_processing_overload, - S1ap_TimeToWait_v20s); - } - - /* If none of the provided PLMNs/TAC match the one configured in MME, - * the s1 setup should be rejected with a cause set to Unknown PLMN. - */ - ta_ret = s1ap_mme_compare_ta_lists(&s1SetupRequest_p->supportedTAs); - - /* eNB and MME have no common PLMN */ - if (ta_ret != TA_LIST_RET_OK) { - S1AP_ERROR("No Common PLMN with eNB, generate_s1_setup_failure\n"); - return s1ap_mme_generate_s1_setup_failure(assoc_id, S1ap_Cause_PR_misc, - S1ap_CauseMisc_unknown_PLMN, - S1ap_TimeToWait_v20s); - } - - S1AP_DEBUG("Adding eNB to the list of served eNBs\n"); - - if ((eNB_association = s1ap_is_eNB_id_in_list(eNB_id)) == NULL) { - /* eNB has not been fount in list of associated eNB, - * Add it to the tail of list and initialize data */ - if ((eNB_association = s1ap_is_eNB_assoc_id_in_list(assoc_id)) == NULL) { - /* ?? */ - return -1; - } else { - eNB_association->s1_state = S1AP_RESETING; - eNB_association->eNB_id = eNB_id; - eNB_association->default_paging_drx = s1SetupRequest_p->defaultPagingDRX; - - if (eNB_name != NULL) { - memcpy(eNB_association->eNB_name, s1SetupRequest_p->eNBname.buf, - s1SetupRequest_p->eNBname.size); - eNB_association->eNB_name[s1SetupRequest_p->eNBname.size] = '\0'; - } - } - } else { - eNB_association->s1_state = S1AP_RESETING; - - /* eNB has been fount in list, consider the s1 setup request as a reset connection, - * reseting any previous UE state if sctp association is != than the previous one */ - if (eNB_association->sctp_assoc_id != assoc_id) { - S1ap_S1SetupFailureIEs_t s1SetupFailure; - - memset(&s1SetupFailure, 0, sizeof(s1SetupFailure)); - - /* Send an overload cause... */ - s1SetupFailure.cause.present = S1ap_Cause_PR_misc; //TODO: send the right cause - s1SetupFailure.cause.choice.misc = S1ap_CauseMisc_control_processing_overload; - S1AP_ERROR("Rejeting s1 setup request as eNB id %d is already associated to an active sctp association" - "Previous known: %d, new one: %d\n", - eNB_id, eNB_association->sctp_assoc_id, assoc_id); - // s1ap_mme_encode_s1setupfailure(&s1SetupFailure, - // receivedMessage->msg.s1ap_sctp_new_msg_ind.assocId); - return -1; - } - - /* TODO: call the reset procedure */ - } - - s1ap_dump_eNB(eNB_association); - return s1ap_generate_s1_setup_response(eNB_association); - } else { - /* Can not process the request, MME is not connected to HSS */ - S1AP_ERROR("Rejecting s1 setup request Can not process the request, MME is not connected to HSS\n"); - return s1ap_mme_generate_s1_setup_failure(assoc_id, S1ap_Cause_PR_misc, - S1ap_CauseMisc_unspecified, -1); - } -} - -//------------------------------------------------------------------------------ -static -int s1ap_generate_s1_setup_response(eNB_description_t *eNB_association) -//------------------------------------------------------------------------------ -{ - int i; - int enc_rval = 0; - S1ap_S1SetupResponseIEs_t *s1_setup_response_p; - S1ap_ServedGUMMEIsItem_t servedGUMMEI; - s1ap_message message; - uint8_t *buffer; - uint32_t length; - - DevAssert(eNB_association != NULL); - - // Generating response - memset(&message, 0, sizeof(s1ap_message)); - memset(&servedGUMMEI, 0, sizeof(servedGUMMEI)); - - s1_setup_response_p = &message.msg.s1ap_S1SetupResponseIEs; - - config_read_lock(&mme_config); - - s1_setup_response_p->relativeMMECapacity = mme_config.relative_capacity; - - /* Use the gummei parameters provided by configuration */ - for (i = 0; i < mme_config.gummei.nb_plmns; i++) { - S1ap_PLMNidentity_t *plmn; - - /* FIXME: free object from list once encoded */ - plmn = calloc(1, sizeof(*plmn)); - MCC_MNC_TO_PLMNID( - mme_config.gummei.plmn_mcc[i], - mme_config.gummei.plmn_mnc[i], - mme_config.gummei.plmn_mnc_len[i], - plmn); - ASN_SEQUENCE_ADD(&servedGUMMEI.servedPLMNs.list, plmn); - } - - for (i = 0; i < mme_config.gummei.nb_mme_gid; i++) { - S1ap_MME_Group_ID_t *mme_gid; - - /* FIXME: free object from list once encoded */ - mme_gid = calloc(1, sizeof(*mme_gid)); - INT16_TO_OCTET_STRING(mme_config.gummei.mme_gid[i], mme_gid); - ASN_SEQUENCE_ADD(&servedGUMMEI.servedGroupIDs.list, mme_gid); - } - - for (i = 0; i < mme_config.gummei.nb_mmec; i++) { - S1ap_MME_Code_t *mmec; - - /* FIXME: free object from list once encoded */ - mmec = calloc(1, sizeof(*mmec)); - INT8_TO_OCTET_STRING(mme_config.gummei.mmec[i], mmec); - ASN_SEQUENCE_ADD(&servedGUMMEI.servedMMECs.list, mmec); - } - - config_unlock(&mme_config); - - /* The MME is only serving E-UTRAN RAT, so the list contains only one element */ - ASN_SEQUENCE_ADD(&s1_setup_response_p->servedGUMMEIs, &servedGUMMEI); - - message.procedureCode = S1ap_ProcedureCode_id_S1Setup; - message.direction = S1AP_PDU_PR_successfulOutcome; - - enc_rval = s1ap_mme_encode_pdu(&message, &buffer, &length); - - /* Failed to encode s1 setup response... */ - if (enc_rval < 0) { - S1AP_DEBUG("Removed eNB %d\n", eNB_association->sctp_assoc_id); - s1ap_remove_eNB(eNB_association); - } else { - /* Consider the response as sent. S1AP is ready to accept UE contexts */ - eNB_association->s1_state = S1AP_READY; - } - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 S1Setup/successfulOutcome assoc_id %u", - eNB_association->sctp_assoc_id); - /* Non-UE signalling -> stream 0 */ - return s1ap_mme_itti_send_sctp_request(buffer, length, eNB_association->sctp_assoc_id, - 0); -} - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_ue_cap_indication(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - ue_description_t *ue_ref; - S1ap_UECapabilityInfoIndicationIEs_t *ue_cap_p; - - DevAssert(message != NULL); - - ue_cap_p = &message->msg.s1ap_UECapabilityInfoIndicationIEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 UECapabilityInfoIndication/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - s1ap_direction2String[message->direction], - ue_cap_p->eNB_UE_S1AP_ID, - ue_cap_p->mme_ue_s1ap_id); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(ue_cap_p->mme_ue_s1ap_id)) == NULL) { - S1AP_DEBUG("No UE is attached to this mme UE s1ap id: "S1AP_UE_ID_FMT"\n", - (uint32_t)ue_cap_p->mme_ue_s1ap_id); - return -1; - } - - if (ue_ref->eNB_ue_s1ap_id != ue_cap_p->eNB_UE_S1AP_ID) { - S1AP_DEBUG("Mismatch in eNB UE S1AP ID, known: "S1AP_UE_ID_FMT", received: "S1AP_UE_ID_FMT"\n", - ue_ref->eNB_ue_s1ap_id, (uint32_t)ue_cap_p->eNB_UE_S1AP_ID); - return -1; - } - - /* Just display a warning when message received over wrong stream */ - if (ue_ref->sctp_stream_recv != stream) { - S1AP_ERROR("Received ue capability indication for " - "(MME UE S1AP ID/eNB UE S1AP ID) ("S1AP_UE_ID_FMT"/"S1AP_UE_ID_FMT") over wrong stream " - "expecting %u, received on %u\n", - (uint32_t)ue_cap_p->mme_ue_s1ap_id, ue_ref->eNB_ue_s1ap_id, - ue_ref->sctp_stream_recv, stream); - } - - /* Forward the ue capabilities to MME application layer */ - { - MessageDef *message_p; - s1ap_ue_cap_ind_t *ue_cap_ind_p; - - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CAPABILITIES_IND); - - DevAssert(message_p != NULL); - - ue_cap_ind_p = &message_p->ittiMsg.s1ap_ue_cap_ind; - ue_cap_ind_p->eNB_ue_s1ap_id = ue_ref->eNB_ue_s1ap_id; - ue_cap_ind_p->mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - - DevCheck(ue_cap_p->ueRadioCapability.size < 100, - 100, ue_cap_p->ueRadioCapability.size, 0); - - memcpy(ue_cap_ind_p->radio_capabilities, ue_cap_p->ueRadioCapability.buf, - ue_cap_p->ueRadioCapability.size); - - ue_cap_ind_p->radio_capabilities_length = ue_cap_p->ueRadioCapability.size; - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S1AP_UE_CAPABILITIES_IND eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - ue_cap_ind_p->eNB_ue_s1ap_id, - ue_cap_ind_p->mme_ue_s1ap_id, - ue_cap_ind_p->radio_capabilities_length); - - return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); - } - return 0; -} - -//////////////////////////////////////////////////////////////////////////////// -//******************* Context Management procedures **************************// -//////////////////////////////////////////////////////////////////////////////// - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_initial_context_setup_response( - uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - - S1ap_InitialContextSetupResponseIEs_t *initialContextSetupResponseIEs_p = NULL; - S1ap_E_RABSetupItemCtxtSURes_t *eRABSetupItemCtxtSURes_p = NULL; - ue_description_t *ue_ref = NULL; - MessageDef *message_p = NULL; - - initialContextSetupResponseIEs_p = &message->msg.s1ap_InitialContextSetupResponseIEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 InitialContextSetup/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - s1ap_direction2String[message->direction], - initialContextSetupResponseIEs_p->eNB_UE_S1AP_ID, - initialContextSetupResponseIEs_p->mme_ue_s1ap_id); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list( - (uint32_t)initialContextSetupResponseIEs_p->mme_ue_s1ap_id)) == NULL) { - S1AP_DEBUG("No UE is attached to this mme UE s1ap id: "S1AP_UE_ID_FMT" %u(10)\n", - (uint32_t)initialContextSetupResponseIEs_p->mme_ue_s1ap_id, - (uint32_t)initialContextSetupResponseIEs_p->mme_ue_s1ap_id); - return -1; - } - - if (ue_ref->eNB_ue_s1ap_id != - initialContextSetupResponseIEs_p->eNB_UE_S1AP_ID) { - S1AP_DEBUG("Mismatch in eNB UE S1AP ID, known: "S1AP_UE_ID_FMT" %u(10), received: 0x%06x %u(10)\n", - ue_ref->eNB_ue_s1ap_id, - ue_ref->eNB_ue_s1ap_id, - (uint32_t)initialContextSetupResponseIEs_p->eNB_UE_S1AP_ID, - (uint32_t)initialContextSetupResponseIEs_p->eNB_UE_S1AP_ID); - return -1; - } - - if (initialContextSetupResponseIEs_p->e_RABSetupListCtxtSURes.s1ap_E_RABSetupItemCtxtSURes.count - != 1) { - S1AP_DEBUG("E-RAB creation has failed\n"); - return -1; - } - - ue_ref->s1_ue_state = S1AP_UE_CONNECTED; - - message_p = itti_alloc_new_message(TASK_S1AP, MME_APP_INITIAL_CONTEXT_SETUP_RSP); - - AssertFatal(message_p != NULL,"itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.mme_app_initial_context_setup_rsp, - 0, - sizeof(mme_app_initial_context_setup_rsp_t)); - - /* Bad, very bad cast... */ - eRABSetupItemCtxtSURes_p = (S1ap_E_RABSetupItemCtxtSURes_t *) - initialContextSetupResponseIEs_p->e_RABSetupListCtxtSURes.s1ap_E_RABSetupItemCtxtSURes.array[0]; - - - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).eps_bearer_id = eRABSetupItemCtxtSURes_p->e_RAB_ID ; - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.ipv4 = 1; // TO DO - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.ipv6 = 0; // TO DO - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.interface_type = S1_U_ENODEB_GTP_U; - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.teid = htonl(*((uint32_t *)eRABSetupItemCtxtSURes_p->gTP_TEID.buf)); - memcpy(&MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.ipv4_address, - eRABSetupItemCtxtSURes_p->transportLayerAddress.buf, - 4); - - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 MME_APP_INITIAL_CONTEXT_SETUP_RSP mme_ue_s1ap_id "S1AP_UE_ID_FMT" ebi %u s1u enb teid %u", - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).mme_ue_s1ap_id, - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).eps_bearer_id, - MME_APP_INITIAL_CONTEXT_SETUP_RSP(message_p).bearer_s1u_enb_fteid.teid); - - return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_ue_context_release_request(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - S1ap_UEContextReleaseRequestIEs_t *ueContextReleaseRequest_p = NULL; - ue_description_t *ue_ref = NULL; - MessageDef *message_p = NULL; - - ueContextReleaseRequest_p = &message->msg.s1ap_UEContextReleaseRequestIEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 UEContextReleaseRequest/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - s1ap_direction2String[message->direction], - ueContextReleaseRequest_p->eNB_UE_S1AP_ID, - ueContextReleaseRequest_p->mme_ue_s1ap_id); - - /* The UE context release procedure is initiated if the cause is != than user inactivity. - * TS36.413 #8.3.2.2. - */ - if (ueContextReleaseRequest_p->cause.present == S1ap_Cause_PR_radioNetwork) { - if (ueContextReleaseRequest_p->cause.choice.radioNetwork == - S1ap_CauseRadioNetwork_user_inactivity) { - S1AP_DEBUG("UE_CONTEXT_RELEASE_REQUEST ignored, cause user inactivity\n"); - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UE_CONTEXT_RELEASE_REQUEST ignored, cause user inactivity", - ueContextReleaseRequest_p->mme_ue_s1ap_id); - return -1; - } - } - - if ((ue_ref = s1ap_is_ue_mme_id_in_list( - ueContextReleaseRequest_p->mme_ue_s1ap_id)) == NULL) { - /* MME doesn't know the MME UE S1AP ID provided. - * TODO - */ - S1AP_DEBUG("UE_CONTEXT_RELEASE_REQUEST ignored cause could not get context with mme_ue_s1ap_id "S1AP_UE_ID_FMT" %u(10)\n", - ueContextReleaseRequest_p->mme_ue_s1ap_id, - ueContextReleaseRequest_p->mme_ue_s1ap_id); - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UE_CONTEXT_RELEASE_REQUEST ignored, no context mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - ueContextReleaseRequest_p->mme_ue_s1ap_id); - return -1; - } else { - if (ue_ref->eNB_ue_s1ap_id == (ueContextReleaseRequest_p->eNB_UE_S1AP_ID & - 0x00ffffff)) { - /* Both eNB UE S1AP ID and MME UE S1AP ID match. - * -> Send a UE context Release Command to eNB. - * TODO - */ - //s1ap_mme_generate_ue_context_release_command(ue_ref); - // UE context will be removed when receiving UE_CONTEXT_RELEASE_COMPLETE - - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CONTEXT_RELEASE_REQ); - - AssertFatal(message_p != NULL,"itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.s1ap_ue_context_release_req, - 0, - sizeof(s1ap_ue_context_release_req_t)); - - S1AP_UE_CONTEXT_RELEASE_REQ(message_p).mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_REQ mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - S1AP_UE_CONTEXT_RELEASE_REQ(message_p).mme_ue_s1ap_id); - - return itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); - - } else { - // TODO - S1AP_DEBUG("UE_CONTEXT_RELEASE_REQUEST ignored, cause mismatch eNB_ue_s1ap_id: ctxt "S1AP_UE_ID_FMT" != request "S1AP_UE_ID_FMT" ", - ue_ref->eNB_ue_s1ap_id, ueContextReleaseRequest_p->eNB_UE_S1AP_ID); - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UE_CONTEXT_RELEASE_REQUEST ignored, cause mismatch eNB_ue_s1ap_id: ctxt "S1AP_UE_ID_FMT" != request "S1AP_UE_ID_FMT" ", - ue_ref->eNB_ue_s1ap_id, ueContextReleaseRequest_p->eNB_UE_S1AP_ID); - return -1; - } - } - - return 0; -} - -//------------------------------------------------------------------------------ -static int s1ap_mme_generate_ue_context_release_command( - ue_description_t *ue_ref) -//------------------------------------------------------------------------------ -{ - uint8_t *buffer; - uint32_t length; - - s1ap_message message; - S1ap_UEContextReleaseCommandIEs_t *ueContextReleaseCommandIEs_p; - - if (ue_ref == NULL) { - return -1; - } - - memset(&message, 0, sizeof(s1ap_message)); - - message.procedureCode = S1ap_ProcedureCode_id_UEContextRelease; - message.direction = S1AP_PDU_PR_initiatingMessage; - - ueContextReleaseCommandIEs_p = &message.msg.s1ap_UEContextReleaseCommandIEs; - - /* Fill in ID pair */ - ueContextReleaseCommandIEs_p->uE_S1AP_IDs.present = S1ap_UE_S1AP_IDs_PR_uE_S1AP_ID_pair; - ueContextReleaseCommandIEs_p->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID = - ue_ref->mme_ue_s1ap_id; - ueContextReleaseCommandIEs_p->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.eNB_UE_S1AP_ID = - ue_ref->eNB_ue_s1ap_id; - ueContextReleaseCommandIEs_p->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.iE_Extensions = - NULL; - - ueContextReleaseCommandIEs_p->cause.present = S1ap_Cause_PR_radioNetwork; - ueContextReleaseCommandIEs_p->cause.choice.radioNetwork = - S1ap_CauseRadioNetwork_release_due_to_eutran_generated_reason; - - if (s1ap_mme_encode_pdu(&message, &buffer, &length) < 0) { - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UEContextRelease/initiatingMessage eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" encoding failed", - ue_ref->eNB_ue_s1ap_id, - ue_ref->mme_ue_s1ap_id); - return -1; - } - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 UEContextRelease/initiatingMessage eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT"", - ue_ref->eNB_ue_s1ap_id,ue_ref->mme_ue_s1ap_id); - - return s1ap_mme_itti_send_sctp_request(buffer, length, ue_ref->eNB->sctp_assoc_id, - ue_ref->sctp_stream_send); -} - - -//------------------------------------------------------------------------------ -int s1ap_handle_ue_context_release_command( - const s1ap_ue_context_release_command_t * const ue_context_release_command_pP) -//------------------------------------------------------------------------------ -{ - ue_description_t *ue_ref_p = NULL; - - if ((ue_ref_p = s1ap_is_ue_mme_id_in_list( - ue_context_release_command_pP->mme_ue_s1ap_id)) == NULL) { - /* MME doesn't know the MME UE S1AP ID provided. - * TODO - */ - S1AP_DEBUG("UE_CONTEXT_RELEASE_COMMAND ignored cause could not get context with mme_ue_s1ap_id "S1AP_UE_ID_FMT" %u(10)\n", - ue_context_release_command_pP->mme_ue_s1ap_id, - ue_context_release_command_pP->mme_ue_s1ap_id); - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UE_CONTEXT_RELEASE_COMMAND ignored, no context mme_ue_s1ap_id", - ue_context_release_command_pP->mme_ue_s1ap_id); - return -1; - } else { - return s1ap_mme_generate_ue_context_release_command(ue_ref_p); - } - return -1; -} - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_ue_context_release_complete(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - S1ap_UEContextReleaseCompleteIEs_t *ueContextReleaseComplete_p; - ue_description_t *ue_ref = NULL; - MessageDef *message_p = NULL; - - ueContextReleaseComplete_p = &message->msg.s1ap_UEContextReleaseCompleteIEs; - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 UEContextRelease/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - s1ap_direction2String[message->direction], - ueContextReleaseComplete_p->eNB_UE_S1AP_ID, - ueContextReleaseComplete_p->mme_ue_s1ap_id); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list( - ueContextReleaseComplete_p->mme_ue_s1ap_id)) == NULL) { - /* MME doesn't know the MME UE S1AP ID provided. - * TODO - */ - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 UEContextReleaseComplete ignored, no context mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - ueContextReleaseComplete_p->mme_ue_s1ap_id); - return -1; - } - - /* eNB has sent a release complete message. We can safely remove UE context. - * TODO: inform NAS and remove e-RABS. - */ - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_UE_CONTEXT_RELEASE_COMPLETE); - - AssertFatal(message_p != NULL,"itti_alloc_new_message Failed"); - memset((void*)&message_p->ittiMsg.s1ap_ue_context_release_complete, - 0, - sizeof(s1ap_ue_context_release_complete_t)); - - S1AP_UE_CONTEXT_RELEASE_COMPLETE(message_p).mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S1AP_UE_CONTEXT_RELEASE_COMPLETE mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - S1AP_UE_CONTEXT_RELEASE_COMPLETE(message_p).mme_ue_s1ap_id); - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); - - s1ap_remove_ue(ue_ref); - S1AP_DEBUG("Removed UE "S1AP_UE_ID_FMT"\n", - (uint32_t)ueContextReleaseComplete_p->mme_ue_s1ap_id); - return 0; -} - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_initial_context_setup_failure(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - S1ap_InitialContextSetupFailureIEs_t *initialContextSetupFailureIEs_p; - - ue_description_t *ue_ref = NULL; - - initialContextSetupFailureIEs_p = &message->msg.s1ap_InitialContextSetupFailureIEs; - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 InitialContextSetup/%s eNB_ue_s1ap_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" len %u", - s1ap_direction2String[message->direction], - initialContextSetupFailureIEs_p->eNB_UE_S1AP_ID, - initialContextSetupFailureIEs_p->mme_ue_s1ap_id); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list( - initialContextSetupFailureIEs_p->mme_ue_s1ap_id)) == NULL) { - /* MME doesn't know the MME UE S1AP ID provided. */ - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 InitialContextSetupFailure ignored, no context mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - initialContextSetupFailureIEs_p->mme_ue_s1ap_id); - return -1; - } - - if (ue_ref->eNB_ue_s1ap_id != (initialContextSetupFailureIEs_p->eNB_UE_S1AP_ID - & 0x00ffffff)) { - return -1; - } - - s1ap_remove_ue(ue_ref); - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 Removed UE mme_ue_s1ap_id "S1AP_UE_ID_FMT" ", - initialContextSetupFailureIEs_p->mme_ue_s1ap_id); - S1AP_DEBUG("Removed UE "S1AP_UE_ID_FMT"\n", - (uint32_t)initialContextSetupFailureIEs_p->mme_ue_s1ap_id); - return 0; -} - -//////////////////////////////////////////////////////////////////////////////// -//************************ Handover signalling *******************************// -//////////////////////////////////////////////////////////////////////////////// - -//------------------------------------------------------------------------------ -int s1ap_mme_handle_path_switch_request(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -//------------------------------------------------------------------------------ -{ - S1ap_PathSwitchRequestIEs_t *pathSwitchRequest_p; - ue_description_t *ue_ref; - uint32_t eNB_ue_s1ap_id; - - pathSwitchRequest_p = &message->msg.s1ap_PathSwitchRequestIEs; - - // eNB UE S1AP ID is limited to 24 bits - eNB_ue_s1ap_id = (uint32_t)(pathSwitchRequest_p->eNB_UE_S1AP_ID & 0x00ffffff); - - S1AP_DEBUG("Path Switch Request message received from eNB UE S1AP ID: "S1AP_UE_ID_FMT"\n", - (int)eNB_ue_s1ap_id); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list( - pathSwitchRequest_p->sourceMME_UE_S1AP_ID)) == NULL) { - /* The MME UE S1AP ID provided by eNB doesn't point to any valid UE. - * MME replies with a PATH SWITCH REQUEST FAILURE message and start operation - * as described in TS 36.413 [11]. - * TODO - */ - } else { - if (ue_ref->eNB_ue_s1ap_id != eNB_ue_s1ap_id) { - /* Received unique UE eNB ID mismatch with the one known in MME. - * Handle this case as defined upper. - * TODO - */ - return -1; - } - - //TODO: Switch the eRABs provided - } - - return 0; -} - -//------------------------------------------------------------------------------ -int s1ap_handle_sctp_deconnection(uint32_t assoc_id) -//------------------------------------------------------------------------------ -{ - int current_ue_index = 0; - int handled_ues = 0; - int i; - - MessageDef *message_p = NULL; - - ue_description_t *ue_ref = NULL; - eNB_description_t *eNB_association; - - /* Checking that the assoc id has a valid eNB attached to. */ - eNB_association = s1ap_is_eNB_assoc_id_in_list(assoc_id); - - if (eNB_association == NULL) { - S1AP_ERROR("No eNB attached to this assoc_id: %d\n", - assoc_id); - return -1; - } - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 Event SCTP_CLOSE_ASSOCIATION assoc_id: %d", - assoc_id); - - STAILQ_FOREACH(ue_ref, &eNB_association->ue_list_head, ue_entries) { - /* Ask for a release of each UE context associated to the eNB */ - if (current_ue_index == 0) { - message_p = itti_alloc_new_message(TASK_S1AP, S1AP_ENB_DEREGISTERED_IND); - } - - S1AP_ENB_DEREGISTERED_IND(message_p).mme_ue_s1ap_id[current_ue_index] = ue_ref->mme_ue_s1ap_id; - - if (current_ue_index == 0 && handled_ues > 0) { - S1AP_ENB_DEREGISTERED_IND(message_p).nb_ue_to_deregister = S1AP_ITTI_UE_PER_DEREGISTER_MESSAGE; - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); - } - - handled_ues++; - current_ue_index = handled_ues % S1AP_ITTI_UE_PER_DEREGISTER_MESSAGE; - } - - if ((handled_ues % S1AP_ITTI_UE_PER_DEREGISTER_MESSAGE) != 0) { - S1AP_ENB_DEREGISTERED_IND(message_p).nb_ue_to_deregister = current_ue_index; - - for (i = current_ue_index; i < S1AP_ITTI_UE_PER_DEREGISTER_MESSAGE; i++) { - S1AP_ENB_DEREGISTERED_IND(message_p).mme_ue_s1ap_id[current_ue_index] = 0; - } - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_NAS_MME, - NULL,0, - "0 S1AP_ENB_DEREGISTERED_IND num ue to deregister %u", - S1AP_ENB_DEREGISTERED_IND(message_p).nb_ue_to_deregister); - - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); - } - - s1ap_remove_eNB(eNB_association); - s1ap_dump_eNB_list(); - - S1AP_DEBUG("Removed eNB attached to assoc_id: %d\n", - assoc_id); - return 0; -} - -//------------------------------------------------------------------------------ -int s1ap_handle_new_association(sctp_new_peer_t *sctp_new_peer_p) -//------------------------------------------------------------------------------ -{ - eNB_description_t *eNB_association; - - DevAssert(sctp_new_peer_p != NULL); - - /* Checking that the assoc id has a valid eNB attached to. */ - if ((eNB_association = s1ap_is_eNB_assoc_id_in_list(sctp_new_peer_p->assoc_id)) == NULL) { - S1AP_DEBUG("Create eNB context for assoc_id: %d\n", - sctp_new_peer_p->assoc_id); - /* Create new context */ - eNB_association = s1ap_new_eNB(); - - if (eNB_association == NULL) { - /* We failed to allocate memory */ - /* TODO: send reject there */ - S1AP_ERROR("Failed to allocate eNB context for assoc_id: %d\n", - sctp_new_peer_p->assoc_id); - } - } else { - S1AP_DEBUG("eNB context already exists for assoc_id: %d, update it\n", - sctp_new_peer_p->assoc_id); - } - - eNB_association->sctp_assoc_id = sctp_new_peer_p->assoc_id; - - /* Fill in in and out number of streams available on SCTP connection. */ - eNB_association->instreams = sctp_new_peer_p->instreams; - eNB_association->outstreams = sctp_new_peer_p->outstreams; - - /* initialize the next sctp stream to 1 as 0 is reserved for non - * ue associated signalling. - */ - eNB_association->next_sctp_stream = 1; - MSC_LOG_EVENT( - MSC_S1AP_MME, - "0 Event SCTP_NEW_ASSOCIATION assoc_id: %d", - eNB_association->sctp_assoc_id); - - return 0; -} - -//////////////////////////////////////////////////////////////////////////////// -//************************* E-RAB management *********************************// -//////////////////////////////////////////////////////////////////////////////// - -// NOT CALLED -int s1ap_handle_create_session_response(SgwCreateSessionResponse - *session_response_p) -{ - /* We received create session response from S-GW on S11 interface abstraction. - * At least one bearer has been established. We can now send s1ap initial context setup request - * message to eNB. - */ - char supportedAlgorithms[] = { 0x02, 0xa0 }; - char securityKey[] = { 0xfd, 0x23, 0xad, 0x22, 0xd0, 0x21, 0x02, 0x90, 0x19, 0xed, - 0xcf, 0xc9, 0x78, 0x44, 0xba, 0xbb, 0x34, 0x6e, 0xff, 0x89, - 0x1c, 0x3a, 0x56, 0xf0, 0x81, 0x34, 0xdd, 0xee, 0x19, 0x55, - 0xf2, 0x1f - }; - - ue_description_t *ue_ref = NULL; - s1ap_message message; - uint8_t *buffer_p; - uint32_t length; - - S1ap_InitialContextSetupRequestIEs_t *initialContextSetupRequest_p; - S1ap_E_RABToBeSetupItemCtxtSUReq_t e_RABToBeSetup; - - AssertFatal(0, "Not called anymore"); - DevAssert(session_response_p != NULL); - - DevCheck(session_response_p->bearer_context_created.cause == REQUEST_ACCEPTED, - REQUEST_ACCEPTED, session_response_p->bearer_context_created.cause, 0); - - if ((session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4 == 0) && - (session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6 == 0)) { - - S1AP_ERROR("No IP address provided for transport layer address\n" - " -->Sending Intial context setup failure\n"); - return -1; - } - - if ((ue_ref = s1ap_is_teid_in_list(session_response_p->s11_sgw_teid.teid)) == NULL) { - S1AP_DEBUG("[%d] is not attached to any UE context\n", - session_response_p->s11_sgw_teid.teid); - return -1; - } - - memset(&message, 0, sizeof(s1ap_message)); - memset(&e_RABToBeSetup, 0, sizeof(S1ap_E_RABToBeSetupItemCtxtSUReq_t)); - - message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup; - message.direction = S1AP_PDU_PR_initiatingMessage; - - initialContextSetupRequest_p = &message.msg.s1ap_InitialContextSetupRequestIEs; - - initialContextSetupRequest_p->mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - initialContextSetupRequest_p->eNB_UE_S1AP_ID = ue_ref->eNB_ue_s1ap_id; - - /* uEaggregateMaximumBitrateDL and uEaggregateMaximumBitrateUL expressed in term of bits/sec */ - asn_int642INTEGER( - &initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL, - 100000000UL); - asn_int642INTEGER( - &initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL, - 50000000UL); - - //initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL = 100000000UL; - //initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL = 50000000UL; - - e_RABToBeSetup.e_RAB_ID = - session_response_p->bearer_context_created.eps_bearer_id; /* ??? */ - e_RABToBeSetup.e_RABlevelQoSParameters.qCI = 0; // ?? - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel - = 15; //No priority - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability - = S1ap_Pre_emptionCapability_shall_not_trigger_pre_emption; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability - = S1ap_Pre_emptionVulnerability_not_pre_emptable; - - // e_RABToBeSetup.gTP_TEID.buf = calloc(4, sizeof(uint8_t)); - // INT32_TO_BUFFER(session_response_p->bearer_context_created.s1u_sgw_fteid.teid, - // e_RABToBeSetup.gTP_TEID.buf); - // e_RABToBeSetup.gTP_TEID.size = 4; - DevCheck(session_response_p->bearer_context_created.s1u_sgw_fteid.teid != 0, - session_response_p->bearer_context_created.s1u_sgw_fteid.teid, 0, 0); - INT32_TO_OCTET_STRING( - session_response_p->bearer_context_created.s1u_sgw_fteid.teid, - &e_RABToBeSetup.gTP_TEID); - - if ((session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4 == 1) && - (session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6 == 0)) { - /* Only IPv4 supported */ - INT32_TO_BIT_STRING( - session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4_address, - &e_RABToBeSetup.transportLayerAddress); - } else if ((session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4 == 0) && - (session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6 == 1)) { - /* Only IPv6 supported */ - e_RABToBeSetup.transportLayerAddress.buf = calloc(16, sizeof(uint8_t)); - memcpy(e_RABToBeSetup.transportLayerAddress.buf, - (void *)&session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6_address, - 16); - e_RABToBeSetup.transportLayerAddress.size = 16; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - } else if ((session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4 == 1) && - (session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6 == 1)) { - /* Both IPv4 and IPv6 supported */ - e_RABToBeSetup.transportLayerAddress.buf = calloc(20, sizeof(uint8_t)); - e_RABToBeSetup.transportLayerAddress.size = 20; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - memcpy(e_RABToBeSetup.transportLayerAddress.buf, - &session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4_address, 4); - memcpy(e_RABToBeSetup.transportLayerAddress.buf + 4, - session_response_p->bearer_context_created.s1u_sgw_fteid.ipv6_address, 16); - } - - ASN_SEQUENCE_ADD(&initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq, - &e_RABToBeSetup); - - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.buf = - (uint8_t *)supportedAlgorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.size = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.bits_unused - = 0; - - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.buf - = (uint8_t *)supportedAlgorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.size - = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.bits_unused - = 0; - - initialContextSetupRequest_p->securityKey.buf = (uint8_t *) - securityKey; /* 256 bits length */ - initialContextSetupRequest_p->securityKey.size = 32; - initialContextSetupRequest_p->securityKey.bits_unused = 0; - - if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { - return -1; - } - - return s1ap_mme_itti_send_sctp_request(buffer_p, length, ue_ref->eNB->sctp_assoc_id, - ue_ref->sctp_stream_send); - - // return s1ap_mme_encode_initial_context_setup_request(&initialContextSetupRequest, - // ue_ref); -} diff --git a/openair-cn/S1AP/s1ap_mme_handlers.h b/openair-cn/S1AP/s1ap_mme_handlers.h deleted file mode 100644 index fc00d8c8af..0000000000 --- a/openair-cn/S1AP/s1ap_mme_handlers.h +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "s1ap_ies_defs.h" -#include "intertask_interface.h" - -#ifndef S1AP_MME_HANDLERS_H_ -#define S1AP_MME_HANDLERS_H_ - -/** \brief Handle decoded incoming messages from SCTP - * \param assoc_id SCTP association ID - * \param stream Stream number - * \param message_p The message decoded by the ASN1C decoder - * @returns int - **/ -int s1ap_mme_handle_message(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p); - -int s1ap_mme_handle_ue_cap_indication(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message); - -/** \brief Handle an S1 Setup request message. - * Typically add the eNB in the list of served eNB if not present, simply reset - * UEs association otherwise. S1SetupResponse message is sent in case of success or - * S1SetupFailure if the MME cannot accept the configuration received. - * \param assoc_id SCTP association ID - * \param stream Stream number - * \param message_p The message decoded by the ASN1C decoder - * @returns int - **/ -int s1ap_mme_handle_s1_setup_request(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p); - -int s1ap_mme_handle_path_switch_request(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message_p); - -int s1ap_mme_handle_ue_context_release_request(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message_p); - -int s1ap_handle_ue_context_release_command( - const s1ap_ue_context_release_command_t * const ue_context_release_command_pP); - -int s1ap_mme_handle_ue_context_release_complete(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message_p); - -int s1ap_mme_handle_initial_context_setup_failure(uint32_t assoc_id, - uint32_t stream, struct s1ap_message_s *message_p); - -int s1ap_mme_handle_initial_context_setup_response( - uint32_t assoc_id, - uint32_t stream, - struct s1ap_message_s *message_p); - -int s1ap_handle_sctp_deconnection(uint32_t assoc_id); - -int s1ap_handle_new_association(sctp_new_peer_t *sctp_new_peer_p); - -int s1ap_handle_create_session_response(SgwCreateSessionResponse - *session_response_p); - -int s1ap_mme_set_cause(S1ap_Cause_t *cause_p, S1ap_Cause_PR cause_type, long cause_value); - -int s1ap_mme_generate_s1_setup_failure( - uint32_t assoc_id, S1ap_Cause_PR cause_type, long cause_value, - long time_to_wait); - -#endif /* S1AP_MME_HANDLERS_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_itti_messaging.c b/openair-cn/S1AP/s1ap_mme_itti_messaging.c deleted file mode 100644 index 1c2a90be61..0000000000 --- a/openair-cn/S1AP/s1ap_mme_itti_messaging.c +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "s1ap_mme_itti_messaging.h" - -int s1ap_mme_itti_send_sctp_request(uint8_t *buffer, uint32_t length, - uint32_t assoc_id, uint16_t stream) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S1AP, SCTP_DATA_REQ); - - SCTP_DATA_REQ(message_p).buffer = buffer; - SCTP_DATA_REQ(message_p).bufLen = length; - SCTP_DATA_REQ(message_p).assocId = assoc_id; - SCTP_DATA_REQ(message_p).stream = stream; - - return itti_send_msg_to_task(TASK_SCTP, INSTANCE_DEFAULT, message_p); -} - -int s1ap_mme_itti_nas_uplink_ind(const uint32_t ue_id, uint8_t * const buffer, - const uint32_t length) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S1AP, NAS_UPLINK_DATA_IND); - - NAS_UL_DATA_IND(message_p).UEid = ue_id; - NAS_UL_DATA_IND(message_p).nasMsg.data = buffer; - NAS_UL_DATA_IND(message_p).nasMsg.length = length; - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_UPLINK_DATA_IND ue_id "S1AP_UE_ID_FMT" len %u", - NAS_UL_DATA_IND(message_p).UEid, - NAS_UL_DATA_IND(message_p).nasMsg.length); - - return itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - -int s1ap_mme_itti_nas_downlink_cnf(const uint32_t ue_id, - nas_error_code_t error_code) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S1AP, NAS_DOWNLINK_DATA_CNF); - - NAS_DL_DATA_CNF(message_p).UEid = ue_id; - NAS_DL_DATA_CNF(message_p).errCode = error_code; - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_DOWNLINK_DATA_CNF ue_id "S1AP_UE_ID_FMT" errCode %u", - NAS_DL_DATA_CNF(message_p).UEid, - NAS_DL_DATA_CNF(message_p).errCode); - - return itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} diff --git a/openair-cn/S1AP/s1ap_mme_itti_messaging.h b/openair-cn/S1AP/s1ap_mme_itti_messaging.h deleted file mode 100644 index 28ad9863c6..0000000000 --- a/openair-cn/S1AP/s1ap_mme_itti_messaging.h +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "intertask_interface.h" -#include "s1ap_common.h" -#include "msc.h" - -#ifndef S1AP_MME_ITTI_MESSAGING_H_ -#define S1AP_MME_ITTI_MESSAGING_H_ - -int s1ap_mme_itti_send_sctp_request(uint8_t *buffer, uint32_t length, - uint32_t assoc_id, uint16_t stream); - -int s1ap_mme_itti_nas_uplink_ind(const uint32_t ue_id, uint8_t *const buffer, - const uint32_t length); - -int s1ap_mme_itti_nas_downlink_cnf(const uint32_t ue_id, - nas_error_code_t error_code); - - -static inline void s1ap_mme_itti_mme_app_establish_ind( - const uint32_t ue_id, - const uint8_t * const nas_msg, - const uint32_t nas_msg_length, - const long cause, - const uint16_t tac) -{ - MessageDef *message_p = NULL; - - message_p = itti_alloc_new_message(TASK_S1AP, MME_APP_CONNECTION_ESTABLISHMENT_IND); - - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).mme_ue_s1ap_id = ue_id; - - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.UEid = ue_id; - /* Mapping between asn1 definition and NAS definition */ - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.asCause = cause + 1; - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.tac = tac; - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.initialNasMsg.length = nas_msg_length; - - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.initialNasMsg.data = malloc(sizeof(uint8_t) * nas_msg_length); - memcpy(MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.initialNasMsg.data, nas_msg, nas_msg_length); - - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 MME_APP_CONNECTION_ESTABLISHMENT_IND ue_id "S1AP_UE_ID_FMT" as cause %u tac %u len %u", - ue_id, - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.asCause, - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.tac, - MME_APP_CONNECTION_ESTABLISHMENT_IND(message_p).nas.initialNasMsg.length); - // should be sent to MME_APP, but this one would forward it to NAS_MME, so send it directly to NAS_MME - // but let's see - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -} - - - -static inline void s1ap_mme_itti_nas_establish_ind( - const uint32_t ue_id, uint8_t * const nas_msg, const uint32_t nas_msg_length, - const long cause, const uint16_t tac) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S1AP, NAS_CONNECTION_ESTABLISHMENT_IND); - - NAS_CONN_EST_IND(message_p).nas.UEid = ue_id; - /* Mapping between asn1 definition and NAS definition */ - NAS_CONN_EST_IND(message_p).nas.asCause = cause + 1; - NAS_CONN_EST_IND(message_p).nas.tac = tac; - NAS_CONN_EST_IND(message_p).nas.initialNasMsg.length = nas_msg_length; - - NAS_CONN_EST_IND(message_p).nas.initialNasMsg.data = malloc(sizeof(uint8_t) * nas_msg_length); - memcpy(NAS_CONN_EST_IND(message_p).nas.initialNasMsg.data, nas_msg, nas_msg_length); - - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_CONNECTION_ESTABLISHMENT_IND ue_id "S1AP_UE_ID_FMT" as cause %u tac %u len %u", - ue_id, - NAS_CONN_EST_IND(message_p).nas.asCause, - NAS_CONN_EST_IND(message_p).nas.tac, - NAS_CONN_EST_IND(message_p).nas.initialNasMsg.length); - - // should be sent to MME_APP, but this one would forward it to NAS_MME, so send it directly to NAS_MME - // but let's see - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - -static inline void s1ap_mme_itti_nas_non_delivery_ind( - const uint32_t ue_id, uint8_t * const nas_msg, const uint32_t nas_msg_length) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_S1AP, NAS_DOWNLINK_DATA_REJ); - - NAS_DL_DATA_REJ(message_p).UEid = ue_id; - /* Mapping between asn1 definition and NAS definition */ - //NAS_NON_DELIVERY_IND(message_p).asCause = cause + 1; - NAS_DL_DATA_REJ(message_p).nasMsg.length = nas_msg_length; - - NAS_DL_DATA_REJ(message_p).nasMsg.data = malloc(sizeof(uint8_t) * nas_msg_length); - memcpy(NAS_DL_DATA_REJ(message_p).nasMsg.data, nas_msg, nas_msg_length); - - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_NAS_MME, - NULL,0, - "0 NAS_DOWNLINK_DATA_REJ ue_id "S1AP_UE_ID_FMT" len %u", - ue_id, - NAS_DL_DATA_REJ(message_p).nasMsg.length); - - // should be sent to MME_APP, but this one would forward it to NAS_MME, so send it directly to NAS_MME - // but let's see - itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); -} - -#endif /* S1AP_MME_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_nas_procedures.c b/openair-cn/S1AP/s1ap_mme_nas_procedures.c deleted file mode 100644 index 4b8229e73b..0000000000 --- a/openair-cn/S1AP/s1ap_mme_nas_procedures.c +++ /dev/null @@ -1,765 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - - -#include "s1ap_common.h" -#include "s1ap_ies_defs.h" -#include "s1ap_mme_encoder.h" -#include "s1ap_mme_handlers.h" -#include "s1ap_mme_nas_procedures.h" -#include "s1ap_mme_retransmission.h" - -#include "s1ap_mme_itti_messaging.h" - -#include "s1ap_mme.h" - -#include "intertask_interface.h" -#include "timer.h" - -#include "assertions.h" -#include "conversions.h" -#include "msc.h" - -/* Every time a new UE is associated, increment this variable. - * But care if it wraps to increment also the mme_ue_s1ap_id_has_wrapped - * variable. Limit: UINT32_MAX (in stdint.h). - */ -static uint32_t mme_ue_s1ap_id = 0; -static uint8_t mme_ue_s1ap_id_has_wrapped = 0; - -extern const char *s1ap_direction2String[]; - - -int s1ap_mme_handle_initial_ue_message(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -{ - S1ap_InitialUEMessageIEs_t *initialUEMessage_p; - ue_description_t *ue_ref; - eNB_description_t *eNB_ref; - uint32_t eNB_ue_s1ap_id; - - initialUEMessage_p = &message->msg.s1ap_InitialUEMessageIEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 initialUEMessage/%s assoc_id %u stream %u "S1AP_UE_ID_FMT" ", - s1ap_direction2String[message->direction], - assoc_id, stream, initialUEMessage_p->eNB_UE_S1AP_ID); - - if ((eNB_ref = s1ap_is_eNB_assoc_id_in_list(assoc_id)) == NULL) { - S1AP_DEBUG("Unkwnon eNB on assoc_id %d\n", assoc_id); - return -1; - } - - // eNB UE S1AP ID is limited to 24 bits - eNB_ue_s1ap_id = (uint32_t)(initialUEMessage_p->eNB_UE_S1AP_ID & 0x00ffffff); - - S1AP_DEBUG("New Initial UE message received with eNB UE S1AP ID: "S1AP_UE_ID_FMT"\n", - eNB_ue_s1ap_id); - - ue_ref = s1ap_is_ue_eNB_id_in_list(eNB_ref, eNB_ue_s1ap_id); - - if (ue_ref == NULL) { - uint16_t tac = 0; - - /* This UE eNB Id has currently no known s1 association. - * Create new UE context by associating new mme_ue_s1ap_id. - * Update eNB UE list. - * Forward message to NAS. - */ - if ((ue_ref = s1ap_new_ue(assoc_id)) == NULL) - // If we failed to allocate a new UE return -1 - { - return -1; - } - - ue_ref->s1_ue_state = S1AP_UE_WAITING_CSR; - ue_ref->eNB_ue_s1ap_id = eNB_ue_s1ap_id; - ue_ref->mme_ue_s1ap_id = (uint32_t)ue_ref; - // On which stream we received the message - ue_ref->sctp_stream_recv = stream; - ue_ref->sctp_stream_send = ue_ref->eNB->next_sctp_stream; - - /* Increment the sctp stream for the eNB association. - * If the next sctp stream is >= outstream negociated between eNB and MME, - * wrap to first stream. - * TODO: search for the first available stream instead. - */ - if (ue_ref->eNB->next_sctp_stream++ >= ue_ref->eNB->outstreams) { - ue_ref->eNB->next_sctp_stream = 1; - } - - /* Increment the unique UE mme s1ap id and - * take care about overflow case. - */ - if (mme_ue_s1ap_id_has_wrapped == 0) { - mme_ue_s1ap_id++; - - if (mme_ue_s1ap_id == 0) { - mme_ue_s1ap_id_has_wrapped = 1; - } - } else { - /* TODO: should take the first available mme_ue_s1ap_id instead of - * the mme_ue_s1ap_id variable. - */ - DevMessage("mme ue s1ap id has wrapped -> case not handled\n"); - } - - s1ap_dump_eNB(ue_ref->eNB); - - OCTET_STRING_TO_TAC(&initialUEMessage_p->tai.tAC, tac); - - /* We received the first NAS transport message: initial UE message. - * Send a NAS ESTABLISH IND to NAS layer - */ -#if defined(ORIGINAL_CODE) - s1ap_mme_itti_nas_establish_ind( - ue_ref->mme_ue_s1ap_id, - initialUEMessage_p->nas_pdu.buf, - initialUEMessage_p->nas_pdu.size, - initialUEMessage_p->rrC_Establishment_Cause, - tac); -#else - s1ap_mme_itti_mme_app_establish_ind( - ue_ref->mme_ue_s1ap_id, - initialUEMessage_p->nas_pdu.buf, - initialUEMessage_p->nas_pdu.size, - initialUEMessage_p->rrC_Establishment_Cause, - tac); -#endif - } - - return 0; -} - - - -int s1ap_mme_handle_uplink_nas_transport(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -{ - S1ap_UplinkNASTransportIEs_t *uplinkNASTransport_p; - ue_description_t *ue_ref; - - uplinkNASTransport_p = &message->msg.s1ap_UplinkNASTransportIEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 uplinkNASTransport/%s mme_ue_s1ap_id "S1AP_UE_ID_FMT" eNB_ue_s1ap_id "S1AP_UE_ID_FMT" nas len %u", - s1ap_direction2String[message->direction], - uplinkNASTransport_p->mme_ue_s1ap_id, - uplinkNASTransport_p->eNB_UE_S1AP_ID, - uplinkNASTransport_p->nas_pdu.size); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(uplinkNASTransport_p->mme_ue_s1ap_id)) - == NULL) { - S1AP_DEBUG("No UE is attached to this mme UE s1ap id: "S1AP_UE_ID_FMT"\n", - (int)uplinkNASTransport_p->mme_ue_s1ap_id); - return -1; - } - - if (ue_ref->s1_ue_state != S1AP_UE_CONNECTED) { - S1AP_DEBUG("Received uplink NAS transport while UE in state != S1AP_UE_CONNECTED\n"); - return -1; - } - - //TODO: forward NAS PDU to NAS -#if defined(DISABLE_USE_NAS) - DevMessage("Can't go further (TODO)\n"); -#else - s1ap_mme_itti_nas_uplink_ind(uplinkNASTransport_p->mme_ue_s1ap_id, uplinkNASTransport_p->nas_pdu.buf, - uplinkNASTransport_p->nas_pdu.size); -#endif - return 0; -} - - - -int s1ap_mme_handle_nas_non_delivery(uint32_t assoc_id, uint32_t stream, - struct s1ap_message_s *message) -{ - S1ap_NASNonDeliveryIndication_IEs_t *nasNonDeliveryIndication_p = NULL; - ue_description_t *ue_ref = NULL; - - /* UE associated signalling on stream == 0 is not valid. */ - if (stream == 0) { - S1AP_DEBUG("Received new nas non delivery on stream == 0\n"); - return -1; - } - - nasNonDeliveryIndication_p = &message->msg.s1ap_NASNonDeliveryIndication_IEs; - - MSC_LOG_RX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 NASNonDeliveryIndication/%s mme_ue_s1ap_id "S1AP_UE_ID_FMT" eNB_ue_s1ap_id "S1AP_UE_ID_FMT" cause %u nas len %u", - s1ap_direction2String[message->direction], - nasNonDeliveryIndication_p->mme_ue_s1ap_id, - nasNonDeliveryIndication_p->eNB_UE_S1AP_ID, - nasNonDeliveryIndication_p->cause, - nasNonDeliveryIndication_p->nas_pdu.size); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(nasNonDeliveryIndication_p->mme_ue_s1ap_id)) - == NULL) { - S1AP_DEBUG("No UE is attached to this mme UE s1ap id: "S1AP_UE_ID_FMT"\n", - (int)nasNonDeliveryIndication_p->mme_ue_s1ap_id); - return -1; - } - - if (ue_ref->s1_ue_state != S1AP_UE_CONNECTED) { - S1AP_DEBUG("Received uplink NASNonDeliveryIndication while UE in state != S1AP_UE_CONNECTED\n"); - return -1; - } - - //TODO: forward NAS PDU to NAS - s1ap_mme_itti_nas_non_delivery_ind( - nasNonDeliveryIndication_p->mme_ue_s1ap_id, - nasNonDeliveryIndication_p->nas_pdu.buf, - nasNonDeliveryIndication_p->nas_pdu.size); - return 0; -} - -int s1ap_generate_downlink_nas_transport(const uint32_t ue_id, void * const data, - const uint32_t size) -{ - ue_description_t *ue_ref; - uint8_t *buffer_p; - uint32_t length; - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(ue_id)) == NULL) { - /* If the UE-associated logical S1-connection is not established, - * the MME shall allocate a unique MME UE S1AP ID to be used for the UE. - */ - S1AP_DEBUG("Unknown UE MME ID "S1AP_UE_ID_FMT", This case is not handled right now\n", ue_id); - - return -1; - } else { - /* We have fount the UE in the list. - * Create new IE list message and encode it. - */ - S1ap_DownlinkNASTransportIEs_t *downlinkNasTransport = NULL; - - s1ap_message message; - - memset(&message, 0, sizeof(s1ap_message)); - - message.procedureCode = S1ap_ProcedureCode_id_downlinkNASTransport; - message.direction = S1AP_PDU_PR_initiatingMessage; - - ue_ref->s1_ue_state = S1AP_UE_CONNECTED; - - downlinkNasTransport = &message.msg.s1ap_DownlinkNASTransportIEs; - - /* Setting UE informations with the ones fount in ue_ref */ - downlinkNasTransport->mme_ue_s1ap_id = ue_ref->mme_ue_s1ap_id; - downlinkNasTransport->eNB_UE_S1AP_ID = ue_ref->eNB_ue_s1ap_id; - - /* Fill in the NAS pdu */ - OCTET_STRING_fromBuf(&downlinkNasTransport->nas_pdu, (char*)data, size); - - if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { - // TODO: handle something - return -1; - } - - S1AP_DEBUG("Send S1ap_ProcedureCode_id_downlinkNASTransport ue_id = "S1AP_UE_ID_FMT" mme_ue_s1ap_id = "S1AP_UE_ID_FMT" eNB_UE_S1AP_ID = "S1AP_UE_ID_FMT"\n", - ue_id, - downlinkNasTransport->mme_ue_s1ap_id, - downlinkNasTransport->eNB_UE_S1AP_ID); - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 downlinkNASTransport/initiatingMessage ue_id "S1AP_UE_ID_FMT" mme_ue_s1ap_id "S1AP_UE_ID_FMT" eNB_ue_s1ap_id"S1AP_UE_ID_FMT" nas length %u", - ue_id, - downlinkNasTransport->mme_ue_s1ap_id, - downlinkNasTransport->eNB_UE_S1AP_ID, - size); - - s1ap_mme_itti_send_sctp_request(buffer_p, length, - ue_ref->eNB->sctp_assoc_id, - ue_ref->sctp_stream_send); - } - - return 0; -} - -#if defined(DISABLE_USE_NAS) -int s1ap_handle_attach_accepted(nas_attach_accept_t *attach_accept_p) -{ - /* We received create session response from S-GW on S11 interface abstraction. - * At least one bearer has been established. We can now send s1ap initial context setup request - * message to eNB. - */ - uint8_t supportedAlgorithms[] = { 0x00, 0x02 }; - uint8_t offset = 0; - uint8_t *buffer_p; - uint32_t length; - - ue_description_t *ue_ref = NULL; - s1ap_message message; - s1ap_initial_ctxt_setup_req_t *initial_p; - - S1ap_InitialContextSetupRequestIEs_t *initialContextSetupRequest_p; - S1ap_E_RABToBeSetupItemCtxtSUReq_t e_RABToBeSetup; - - DevAssert(attach_accept_p != NULL); - - initial_p = &attach_accept_p->transparent; - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(initial_p->mme_ue_s1ap_id)) == NULL) { - S1AP_DEBUG("This mme ue s1ap id ("S1AP_UE_ID_FMT") is not attached to any UE context\n", - initial_p->mme_ue_s1ap_id); - return -1; - } - - /* Start the outcome response timer. - * When time is reached, MME consider that procedure outcome has failed. - */ - // timer_setup(mme_config.s1ap_config.outcome_drop_timer_sec, 0, TASK_S1AP, INSTANCE_DEFAULT, - // TIMER_ONE_SHOT, - // NULL, - // &ue_ref->outcome_response_timer_id); - /* Insert the timer in the MAP of mme_ue_s1ap_id <-> timer_id */ - // s1ap_timer_insert(ue_ref->mme_ue_s1ap_id, ue_ref->outcome_response_timer_id); - - memset(&message, 0, sizeof(s1ap_message)); - memset(&e_RABToBeSetup, 0, sizeof(S1ap_E_RABToBeSetupItemCtxtSUReq_t)); - - message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup; - message.direction = S1AP_PDU_PR_initiatingMessage; - - initialContextSetupRequest_p = &message.msg.s1ap_InitialContextSetupRequestIEs; - - initialContextSetupRequest_p->mme_ue_s1ap_id = (unsigned long)ue_ref->mme_ue_s1ap_id; - initialContextSetupRequest_p->eNB_UE_S1AP_ID = (unsigned long)ue_ref->eNB_ue_s1ap_id; - - /* uEaggregateMaximumBitrateDL and uEaggregateMaximumBitrateUL expressed in term of bits/sec */ - initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL = initial_p->ambr.br_dl; - initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL = initial_p->ambr.br_ul; - - e_RABToBeSetup.e_RAB_ID = initial_p->ebi; - e_RABToBeSetup.e_RABlevelQoSParameters.qCI = initial_p->qci; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel - = initial_p->prio_level; //No priority - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability - = initial_p->pre_emp_capability; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability - = initial_p->pre_emp_vulnerability; - - /* Set the GTP-TEID. This is the S1-U S-GW TEID */ - INT32_TO_OCTET_STRING(initial_p->teid, &e_RABToBeSetup.gTP_TEID); - - /* S-GW IP address(es) for user-plane */ - if ((initial_p->s_gw_address.pdn_type == IPv4) || - (initial_p->s_gw_address.pdn_type == IPv4_AND_v6)) { - e_RABToBeSetup.transportLayerAddress.buf = calloc(4, sizeof(uint8_t)); - /* Only IPv4 supported */ - memcpy(e_RABToBeSetup.transportLayerAddress.buf, - initial_p->s_gw_address.address.ipv4_address, - 4); - offset += 4; - e_RABToBeSetup.transportLayerAddress.size = 4; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - } - - if ((initial_p->s_gw_address.pdn_type == IPv6) || - (initial_p->s_gw_address.pdn_type == IPv4_AND_v6)) { - if (offset == 0) { - /* Both IPv4 and IPv6 provided */ - /* TODO: check memory allocation */ - e_RABToBeSetup.transportLayerAddress.buf = calloc(16, sizeof(uint8_t)); - } else { - /* Only IPv6 supported */ - /* TODO: check memory allocation */ - e_RABToBeSetup.transportLayerAddress.buf - = realloc(e_RABToBeSetup.transportLayerAddress.buf, (16 + offset) * sizeof(uint8_t)); - } - - memcpy(&e_RABToBeSetup.transportLayerAddress.buf[offset], - initial_p->s_gw_address.address.ipv6_address, - 16); - e_RABToBeSetup.transportLayerAddress.size = 16 + offset; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - } - - ASN_SEQUENCE_ADD(&initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq, - &e_RABToBeSetup); - - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.buf = - (uint8_t *)supportedAlgorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.size = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.bits_unused - = 0; - - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.buf - = (uint8_t *)supportedAlgorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.size - = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.bits_unused - = 0; - - initialContextSetupRequest_p->securityKey.buf = initial_p->keNB; /* 256 bits length */ - initialContextSetupRequest_p->securityKey.size = 32; - initialContextSetupRequest_p->securityKey.bits_unused = 0; - - if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { - // TODO: handle something - return -1; - } - - return s1ap_mme_itti_send_sctp_request(buffer_p, length, ue_ref->eNB->sctp_assoc_id, - ue_ref->sctp_stream_send); -} -#else -//void s1ap_handle_conn_est_cnf(nas_conn_est_cnf_t *nas_conn_est_cnf_p) -//{ -// /* We received create session response from S-GW on S11 interface abstraction. -// * At least one bearer has been established. We can now send s1ap initial context setup request -// * message to eNB. -// */ -// uint8_t supportedAlgorithms[] = { 0x00, 0x00 }; -// uint8_t offset = 0; -// uint8_t *buffer_p; -// uint32_t length, teid = 12; -// -// ue_description_t *ue_ref = NULL; -// s1ap_message message; -// -// S1ap_InitialContextSetupRequestIEs_t *initialContextSetupRequest_p; -// S1ap_E_RABToBeSetupItemCtxtSUReq_t e_RABToBeSetup; -// S1ap_NAS_PDU_t nas_pdu; -// -// DevAssert(nas_conn_est_cnf_p != NULL); -// -// if ((ue_ref = s1ap_is_ue_mme_id_in_list(nas_conn_est_cnf_p->UEid)) == NULL) { -// S1AP_DEBUG("This mme ue s1ap id (%08x) is not attached to any UE context\n", -// nas_conn_est_cnf_p->UEid); -// DevParam(nas_conn_est_cnf_p->UEid, 0, 0); -// } -// -// /* Start the outcome response timer. -// * When time is reached, MME consider that procedure outcome has failed. -// */ -//// timer_setup(mme_config.s1ap_config.outcome_drop_timer_sec, 0, TASK_S1AP, INSTANCE_DEFAULT, -//// TIMER_ONE_SHOT, -//// NULL, -//// &ue_ref->outcome_response_timer_id); -// /* Insert the timer in the MAP of mme_ue_s1ap_id <-> timer_id */ -//// s1ap_timer_insert(ue_ref->mme_ue_s1ap_id, ue_ref->outcome_response_timer_id); -// -// memset(&message, 0, sizeof(s1ap_message)); -// memset(&e_RABToBeSetup, 0, sizeof(S1ap_E_RABToBeSetupItemCtxtSUReq_t)); -// -// message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup; -// message.direction = S1AP_PDU_PR_initiatingMessage; -// -// initialContextSetupRequest_p = &message.msg.s1ap_InitialContextSetupRequestIEs; -// -// initialContextSetupRequest_p->mme_ue_s1ap_id = (unsigned long)ue_ref->mme_ue_s1ap_id; -// initialContextSetupRequest_p->eNB_UE_S1AP_ID = (unsigned long)ue_ref->eNB_ue_s1ap_id; -// -// /* uEaggregateMaximumBitrateDL and uEaggregateMaximumBitrateUL expressed in term of bits/sec */ -//// initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL = initial_p->ambr.br_dl; -//// initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL = initial_p->ambr.br_ul; -// -// initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL = 1024 * 1024; -// initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL = 512 * 1024; -// -//// e_RABToBeSetup.e_RAB_ID = initial_p->ebi; -// e_RABToBeSetup.e_RAB_ID = 5; -//// e_RABToBeSetup.e_RABlevelQoSParameters.qCI = initial_p->qci; -// e_RABToBeSetup.e_RABlevelQoSParameters.qCI = 0; -// -// memset(&nas_pdu, 0, sizeof(nas_pdu)); -// -// nas_pdu.size = nas_conn_est_cnf_p->nasMsg.length; -// nas_pdu.buf = nas_conn_est_cnf_p->nasMsg.data; -// -// e_RABToBeSetup.nAS_PDU = &nas_pdu; -// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel = -// S1ap_PriorityLevel_lowest; -// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability = -// S1ap_Pre_emptionCapability_shall_not_trigger_pre_emption; -// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability = -// S1ap_Pre_emptionVulnerability_not_pre_emptable; -// INT32_TO_OCTET_STRING(teid, &e_RABToBeSetup.gTP_TEID); -//// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel -//// = initial_p->prio_level; //No priority -//// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability -//// = initial_p->pre_emp_capability; -//// e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability -//// = initial_p->pre_emp_vulnerability; -// -// /* Set the GTP-TEID. This is the S1-U S-GW TEID */ -//// INT32_TO_OCTET_STRING(initial_p->teid, &e_RABToBeSetup.gTP_TEID); -// -// /* S-GW IP address(es) for user-plane */ -//// if ((initial_p->s_gw_address.pdn_type == IPv4) || -//// (initial_p->s_gw_address.pdn_type == IPv4_AND_v6)) -//// { -//// e_RABToBeSetup.transportLayerAddress.buf = calloc(4, sizeof(uint8_t)); -//// /* Only IPv4 supported */ -//// memcpy(e_RABToBeSetup.transportLayerAddress.buf, -//// initial_p->s_gw_address.address.ipv4_address, -//// 4); -//// offset += 4; -//// e_RABToBeSetup.transportLayerAddress.size = 4; -//// e_RABToBeSetup.transportLayerAddress.bits_unused = 0; -//// } -//// if ((initial_p->s_gw_address.pdn_type == IPv6) || -//// (initial_p->s_gw_address.pdn_type == IPv4_AND_v6)) -//// { -//// if (offset == 0) { -//// /* Both IPv4 and IPv6 provided */ -//// /* TODO: check memory allocation */ -//// e_RABToBeSetup.transportLayerAddress.buf = calloc(16, sizeof(uint8_t)); -//// } else { -//// /* Only IPv6 supported */ -//// /* TODO: check memory allocation */ -//// e_RABToBeSetup.transportLayerAddress.buf -//// = realloc(e_RABToBeSetup.transportLayerAddress.buf, (16 + offset) * sizeof(uint8_t)); -//// } -//// memcpy(&e_RABToBeSetup.transportLayerAddress.buf[offset], -//// initial_p->s_gw_address.address.ipv6_address, -//// 16); -//// e_RABToBeSetup.transportLayerAddress.size = 16 + offset; -//// e_RABToBeSetup.transportLayerAddress.bits_unused = 0; -//// } -// -// ASN_SEQUENCE_ADD(&initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq, -// &e_RABToBeSetup); -// -// initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.buf = -// (uint8_t *)supportedAlgorithms; -// initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.size = 2; -// initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.bits_unused -// = 0; -// -// initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.buf -// = (uint8_t *)supportedAlgorithms; -// initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.size -// = 2; -// initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.bits_unused -// = 0; -// -//// initialContextSetupRequest_p->securityKey.buf = initial_p->keNB; /* 256 bits length */ -// uint8_t keNB[32]; -// memset(keNB, 0, sizeof(keNB)); -// -// initialContextSetupRequest_p->securityKey.buf = keNB; -// initialContextSetupRequest_p->securityKey.size = 32; -// initialContextSetupRequest_p->securityKey.bits_unused = 0; -// -// if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { -// // TODO: handle something -// DevMessage("Failed to encode initial context setup request message\n"); -// } -// -// free(nas_conn_est_cnf_p->nasMsg.data); -// -// s1ap_mme_itti_send_sctp_request(buffer_p, length, ue_ref->eNB->sctp_assoc_id, -// ue_ref->sctp_stream_send); -//} - -void s1ap_handle_conn_est_cnf(const mme_app_connection_establishment_cnf_t * const conn_est_cnf_pP) -{ - /* We received create session response from S-GW on S11 interface abstraction. - * At least one bearer has been established. We can now send s1ap initial context setup request - * message to eNB. - */ - uint8_t offset = 0; - uint8_t *buffer_p = NULL; - uint32_t length = 0; - ue_description_t *ue_ref = NULL; - S1ap_InitialContextSetupRequestIEs_t *initialContextSetupRequest_p = NULL; - S1ap_E_RABToBeSetupItemCtxtSUReq_t e_RABToBeSetup; - S1ap_NAS_PDU_t nas_pdu; - s1ap_message message; - - DevAssert(conn_est_cnf_pP != NULL); - - if ((ue_ref = s1ap_is_ue_mme_id_in_list(conn_est_cnf_pP->nas_conn_est_cnf.UEid)) == NULL) { - S1AP_DEBUG("This mme ue s1ap id ("S1AP_UE_ID_FMT") is not attached to any UE context\n", - conn_est_cnf_pP->nas_conn_est_cnf.UEid); - - DevParam(conn_est_cnf_pP->nas_conn_est_cnf.UEid, 0, 0); - } - - /* Start the outcome response timer. - * When time is reached, MME consider that procedure outcome has failed. - */ - // timer_setup(mme_config.s1ap_config.outcome_drop_timer_sec, 0, TASK_S1AP, INSTANCE_DEFAULT, - // TIMER_ONE_SHOT, - // NULL, - // &ue_ref->outcome_response_timer_id); - /* Insert the timer in the MAP of mme_ue_s1ap_id <-> timer_id */ - // s1ap_timer_insert(ue_ref->mme_ue_s1ap_id, ue_ref->outcome_response_timer_id); - - memset(&message, 0, sizeof(s1ap_message)); - memset(&e_RABToBeSetup, 0, sizeof(S1ap_E_RABToBeSetupItemCtxtSUReq_t)); - - message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup; - message.direction = S1AP_PDU_PR_initiatingMessage; - - initialContextSetupRequest_p = &message.msg.s1ap_InitialContextSetupRequestIEs; - - initialContextSetupRequest_p->mme_ue_s1ap_id = (unsigned long)ue_ref->mme_ue_s1ap_id; - initialContextSetupRequest_p->eNB_UE_S1AP_ID = (unsigned long)ue_ref->eNB_ue_s1ap_id; - - /* uEaggregateMaximumBitrateDL and uEaggregateMaximumBitrateUL expressed in term of bits/sec */ - asn_uint642INTEGER(&initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL, conn_est_cnf_pP->ambr.br_dl); - asn_uint642INTEGER(&initialContextSetupRequest_p->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL, conn_est_cnf_pP->ambr.br_ul); - - e_RABToBeSetup.e_RAB_ID = conn_est_cnf_pP->eps_bearer_id; //5; - e_RABToBeSetup.e_RABlevelQoSParameters.qCI = conn_est_cnf_pP->bearer_qos_qci; - - - memset(&nas_pdu, 0, sizeof(nas_pdu)); - nas_pdu.size = conn_est_cnf_pP->nas_conn_est_cnf.nasMsg.length; - nas_pdu.buf = conn_est_cnf_pP->nas_conn_est_cnf.nasMsg.data; - e_RABToBeSetup.nAS_PDU = &nas_pdu; - -#if defined(ORIGINAL_S1AP_CODE) - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel = - S1ap_PriorityLevel_lowest; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability = - S1ap_Pre_emptionCapability_shall_not_trigger_pre_emption; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability = - S1ap_Pre_emptionVulnerability_not_pre_emptable; -#else - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.priorityLevel = - conn_est_cnf_pP->bearer_qos_prio_level; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionCapability = - conn_est_cnf_pP->bearer_qos_pre_emp_capability; - e_RABToBeSetup.e_RABlevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability = - conn_est_cnf_pP->bearer_qos_pre_emp_vulnerability; -#endif - /* Set the GTP-TEID. This is the S1-U S-GW TEID */ - INT32_TO_OCTET_STRING(conn_est_cnf_pP->bearer_s1u_sgw_fteid.teid, &e_RABToBeSetup.gTP_TEID); - - /* S-GW IP address(es) for user-plane */ - if (conn_est_cnf_pP->bearer_s1u_sgw_fteid.ipv4) { - e_RABToBeSetup.transportLayerAddress.buf = calloc(4, sizeof(uint8_t)); - /* Only IPv4 supported */ - memcpy(e_RABToBeSetup.transportLayerAddress.buf, - &conn_est_cnf_pP->bearer_s1u_sgw_fteid.ipv4_address, - 4); - offset += 4; - e_RABToBeSetup.transportLayerAddress.size = 4; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - } - - if (conn_est_cnf_pP->bearer_s1u_sgw_fteid.ipv6) { - if (offset == 0) { - /* Both IPv4 and IPv6 provided */ - /* TODO: check memory allocation */ - e_RABToBeSetup.transportLayerAddress.buf = calloc(16, sizeof(uint8_t)); - } else { - /* Only IPv6 supported */ - /* TODO: check memory allocation */ - e_RABToBeSetup.transportLayerAddress.buf - = realloc(e_RABToBeSetup.transportLayerAddress.buf, (16 + offset) * sizeof(uint8_t)); - } - - memcpy(&e_RABToBeSetup.transportLayerAddress.buf[offset], - conn_est_cnf_pP->bearer_s1u_sgw_fteid.ipv6_address, - 16); - e_RABToBeSetup.transportLayerAddress.size = 16 + offset; - e_RABToBeSetup.transportLayerAddress.bits_unused = 0; - } - - ASN_SEQUENCE_ADD(&initialContextSetupRequest_p->e_RABToBeSetupListCtxtSUReq, - &e_RABToBeSetup); - - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.buf = - (uint8_t *)&conn_est_cnf_pP->security_capabilities_encryption_algorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.size = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.encryptionAlgorithms.bits_unused - = 0; - - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.buf = - (uint8_t *)&conn_est_cnf_pP->security_capabilities_integrity_algorithms; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.size - = 2; - initialContextSetupRequest_p->ueSecurityCapabilities.integrityProtectionAlgorithms.bits_unused - = 0; - - S1AP_DEBUG("security_capabilities_encryption_algorithms 0x%04X\n", - conn_est_cnf_pP->security_capabilities_encryption_algorithms); - S1AP_DEBUG("security_capabilities_integrity_algorithms 0x%04X\n", - conn_est_cnf_pP->security_capabilities_integrity_algorithms); - - if (conn_est_cnf_pP->keNB) { - initialContextSetupRequest_p->securityKey.buf = malloc(32); - memcpy(initialContextSetupRequest_p->securityKey.buf, - conn_est_cnf_pP->keNB, - 32); - - initialContextSetupRequest_p->securityKey.size = 32; - } else { - S1AP_DEBUG("No keNB\n"); - initialContextSetupRequest_p->securityKey.buf = NULL; - initialContextSetupRequest_p->securityKey.size = 0; - } - - initialContextSetupRequest_p->securityKey.bits_unused = 0; - - if (s1ap_mme_encode_pdu(&message, &buffer_p, &length) < 0) { - // TODO: handle something - DevMessage("Failed to encode initial context setup request message\n"); - } - - free(conn_est_cnf_pP->nas_conn_est_cnf.nasMsg.data); - - MSC_LOG_TX_MESSAGE( - MSC_S1AP_MME, - MSC_S1AP_ENB, - NULL,0, - "0 InitialContextSetup/initiatingMessage mme_ue_s1ap_id "S1AP_UE_ID_FMT" eNB_ue_s1ap_id "S1AP_UE_ID_FMT" nas length %u", - initialContextSetupRequest_p->mme_ue_s1ap_id, - initialContextSetupRequest_p->eNB_UE_S1AP_ID, - nas_pdu.size); - - s1ap_mme_itti_send_sctp_request( - buffer_p, - length, - ue_ref->eNB->sctp_assoc_id, - ue_ref->sctp_stream_send); -} - -#endif diff --git a/openair-cn/S1AP/s1ap_mme_nas_procedures.h b/openair-cn/S1AP/s1ap_mme_nas_procedures.h deleted file mode 100644 index 51d45f1fb2..0000000000 --- a/openair-cn/S1AP/s1ap_mme_nas_procedures.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include - -#include "s1ap_ies_defs.h" -#include "intertask_interface.h" - -#ifndef S1AP_MME_NAS_PROCEDURES_H_ -#define S1AP_MME_NAS_PROCEDURES_H_ - -/** \brief Handle an Initial UE message. - * \param assocId lower layer assoc id (SCTP) - * \param stream SCTP stream on which data had been received - * \param message The message as decoded by the ASN.1 codec - * @returns -1 on failure, 0 otherwise - **/ -int s1ap_mme_handle_initial_ue_message(uint32_t assocId, uint32_t stream, - struct s1ap_message_s *message); - -/** \brief Handle an Uplink NAS transport message. - * Process the RRC transparent container and forward it to NAS entity. - * \param assocId lower layer assoc id (SCTP) - * \param stream SCTP stream on which data had been received - * \param message The message as decoded by the ASN.1 codec - * @returns -1 on failure, 0 otherwise - **/ -int s1ap_mme_handle_uplink_nas_transport(uint32_t assocId, uint32_t stream, - struct s1ap_message_s *message); - -/** \brief Handle a NAS non delivery indication message from eNB - * \param assocId lower layer assoc id (SCTP) - * \param stream SCTP stream on which data had been received - * \param message The message as decoded by the ASN.1 codec - * @returns -1 on failure, 0 otherwise - **/ -int s1ap_mme_handle_nas_non_delivery(uint32_t assocId, uint32_t stream, - struct s1ap_message_s *message); - -#if defined(DISABLE_USE_NAS) -int s1ap_handle_attach_accepted(nas_attach_accept_t *attach_accept_p); -#else -void s1ap_handle_conn_est_cnf(const mme_app_connection_establishment_cnf_t * const conn_est_cnf_p); -#endif - -int s1ap_generate_downlink_nas_transport(const uint32_t ue_id, void * const data, - const uint32_t size); -#endif /* S1AP_MME_NAS_PROCEDURES_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_retransmission.c b/openair-cn/S1AP/s1ap_mme_retransmission.c deleted file mode 100644 index 0ce368ffa8..0000000000 --- a/openair-cn/S1AP/s1ap_mme_retransmission.c +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include - -#include "tree.h" -#include "assertions.h" - -#include "intertask_interface.h" - -#include "timer.h" -#include "s1ap_common.h" -#include "s1ap_mme_retransmission.h" - -inline int s1ap_mme_timer_map_compare_id( - struct s1ap_timer_map_s *p1, struct s1ap_timer_map_s *p2); - -/* Reference to tree root element */ -RB_HEAD(s1ap_timer_map, s1ap_timer_map_s) s1ap_timer_tree = RB_INITIALIZER(); - -/* RB tree functions for s1ap timer map are not exposed to the rest of the code - * only declare prototypes here. - */ -RB_PROTOTYPE(s1ap_timer_map, s1ap_timer_map_s, entries, - s1ap_mme_timer_map_compare_id); - -RB_GENERATE(s1ap_timer_map, s1ap_timer_map_s, entries, - s1ap_mme_timer_map_compare_id); - -int s1ap_mme_timer_map_compare_id( - struct s1ap_timer_map_s *p1, struct s1ap_timer_map_s *p2) -{ - if (p1->mme_ue_s1ap_id > 0) { - if (p1->mme_ue_s1ap_id > p2->mme_ue_s1ap_id) { - return 1; - } - - if (p1->mme_ue_s1ap_id < p2->mme_ue_s1ap_id) { - return -1; - } - - return 0; - } - - if (p1->timer_id > p2->timer_id) { - return 1; - } - - if (p1->timer_id < p2->timer_id) { - return -1; - } - - /* Match -> return 0 */ - return 0; -} - -int s1ap_timer_insert(uint32_t mme_ue_s1ap_id, long timer_id) -{ - struct s1ap_timer_map_s *new; - - new = malloc(sizeof(struct s1ap_timer_map_s)); - - new->timer_id = timer_id; - new->mme_ue_s1ap_id = mme_ue_s1ap_id; - - if (RB_INSERT(s1ap_timer_map, &s1ap_timer_tree, new) != NULL) { - S1AP_ERROR("Timer with id 0x%lx already exists\n", timer_id); - free(new); - return -1; - } - - return 0; -} - -int s1ap_handle_timer_expiry(timer_has_expired_t *timer_has_expired) -{ - struct s1ap_timer_map_s *find; - struct s1ap_timer_map_s elm; - - DevAssert(timer_has_expired != NULL); - - memset(&elm, 0, sizeof(elm)); - - elm.timer_id = timer_has_expired->timer_id; - - if ((find = RB_FIND(s1ap_timer_map, &s1ap_timer_tree, &elm)) == NULL) { - S1AP_WARN("Timer id 0x%lx has not been found in tree. Maybe the timer " - "reference has been removed before receiving timer signal\n", - timer_has_expired->timer_id); - return 0; - } - - /* Remove the timer from the map */ - RB_REMOVE(s1ap_timer_map, &s1ap_timer_tree, find); - - /* Destroy the element */ - free(find); - - /* TODO: notify NAS and remove ue context */ - return 0; -} - -int s1ap_timer_remove_ue(uint32_t mme_ue_s1ap_id) -{ - struct s1ap_timer_map_s *find; - - S1AP_DEBUG("Removing timer associated with UE "S1AP_UE_ID_FMT"\n", - mme_ue_s1ap_id); - - DevAssert(mme_ue_s1ap_id != 0); - - RB_FOREACH(find, s1ap_timer_map, &s1ap_timer_tree) { - if (find->mme_ue_s1ap_id == mme_ue_s1ap_id) { - timer_remove(find->timer_id); - /* Remove the timer from the map */ - RB_REMOVE(s1ap_timer_map, &s1ap_timer_tree, find); - /* Destroy the element */ - free(find); - } - } - return 0; -} diff --git a/openair-cn/S1AP/s1ap_mme_retransmission.h b/openair-cn/S1AP/s1ap_mme_retransmission.h deleted file mode 100644 index f13a0c597c..0000000000 --- a/openair-cn/S1AP/s1ap_mme_retransmission.h +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include "tree.h" - -#ifndef S1AP_MME_RETRANSMISSION_H_ -#define S1AP_MME_RETRANSMISSION_H_ - -typedef struct s1ap_timer_map_s { - long timer_id; - uint32_t mme_ue_s1ap_id; - - RB_ENTRY(s1ap_timer_map_s) entries; -} s1ap_timer_map_t; - -int s1ap_mme_timer_map_compare_id( - struct s1ap_timer_map_s *p1, struct s1ap_timer_map_s *p2); - -int s1ap_handle_timer_expiry(timer_has_expired_t *timer_has_expired); - -int s1ap_timer_insert(uint32_t mme_ue_s1ap_id, long timer_id); - -int s1ap_timer_remove_ue(uint32_t mme_ue_s1ap_id); - -#endif /* S1AP_MME_RETRANSMISSION_H_ */ diff --git a/openair-cn/S1AP/s1ap_mme_ta.c b/openair-cn/S1AP/s1ap_mme_ta.c deleted file mode 100644 index 706f22a722..0000000000 --- a/openair-cn/S1AP/s1ap_mme_ta.c +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include - -#include "assertions.h" -#include "conversions.h" - -#include "mme_config.h" - -#include "s1ap_mme.h" -#include "s1ap_common.h" -#include "s1ap_mme_ta.h" - -static -int s1ap_mme_compare_plmn(S1ap_PLMNidentity_t *plmn) -{ - int i; - uint16_t mcc; - uint16_t mnc; - uint16_t mnc_len; - - DevAssert(plmn != NULL); - - TBCD_TO_MCC_MNC(plmn, mcc, mnc, mnc_len); - - config_read_lock(&mme_config); - - for (i = 0; i < mme_config.gummei.nb_mme_gid; i++) { - S1AP_DEBUG("Comparing plmn_mcc %d/%d, plmn_mnc %d/%d plmn_mnc_len %d/%d\n", - mme_config.gummei.plmn_mcc[i], mcc, - mme_config.gummei.plmn_mnc[i],mnc, - mme_config.gummei.plmn_mnc_len[i],mnc_len); - - if ((mme_config.gummei.plmn_mcc[i] == mcc) && - (mme_config.gummei.plmn_mnc[i] == mnc) && - (mme_config.gummei.plmn_mnc_len[i] == mnc_len)) - /* There is a matching plmn */ - return TA_LIST_AT_LEAST_ONE_MATCH; - } - - config_unlock(&mme_config); - - return TA_LIST_NO_MATCH; -} - -/* @brief compare a list of broadcasted plmns against the MME configured. - */ -static -int s1ap_mme_compare_plmns(S1ap_BPLMNs_t *b_plmns) -{ - int i; - int matching_occurence = 0; - - DevAssert(b_plmns != NULL); - - for (i = 0; i < b_plmns->list.count; i++) { - if (s1ap_mme_compare_plmn(b_plmns->list.array[i]) - == TA_LIST_AT_LEAST_ONE_MATCH) - matching_occurence++; - } - - if (matching_occurence == 0) - return TA_LIST_NO_MATCH; - else if (matching_occurence == b_plmns->list.count - 1) - return TA_LIST_COMPLETE_MATCH; - else - return TA_LIST_AT_LEAST_ONE_MATCH; -} - -/* @brief compare a TAC - */ -static -int s1ap_mme_compare_tac(S1ap_TAC_t *tac) -{ - int i; - uint16_t tac_value; - - DevAssert(tac != NULL); - - OCTET_STRING_TO_TAC(tac, tac_value); - - config_read_lock(&mme_config); - - for (i = 0; i < mme_config.gummei.nb_plmns; i++) { - S1AP_DEBUG("Comparing config tac %d, received tac = %d\n", mme_config.gummei.plmn_tac[i], tac_value); - - if (mme_config.gummei.plmn_tac[i] == tac_value) - return TA_LIST_AT_LEAST_ONE_MATCH; - } - - config_unlock(&mme_config); - - return TA_LIST_NO_MATCH; -} - -/* @brief compare a given ta list against the one provided by mme configuration. - * @param ta_list - * @return - TA_LIST_UNKNOWN_PLMN if at least one TAC match and no PLMN match - * - TA_LIST_UNKNOWN_TAC if at least one PLMN match and no TAC match - * - TA_LIST_RET_OK if both tac and plmn match at least one element - */ -int s1ap_mme_compare_ta_lists(S1ap_SupportedTAs_t *ta_list) -{ - int i; - int tac_ret, bplmn_ret; - - DevAssert(ta_list != NULL); - - /* Parse every item in the list and try to find matching parameters */ - for (i = 0; i < ta_list->list.count; i++) { - S1ap_SupportedTAs_Item_t *ta; - - ta = ta_list->list.array[i]; - DevAssert(ta != NULL); - - tac_ret = s1ap_mme_compare_tac(&ta->tAC); - bplmn_ret = s1ap_mme_compare_plmns(&ta->broadcastPLMNs); - - if (tac_ret == TA_LIST_NO_MATCH && bplmn_ret == TA_LIST_NO_MATCH) { - return TA_LIST_UNKNOWN_PLMN + TA_LIST_UNKNOWN_TAC; - } else { - if (tac_ret > TA_LIST_NO_MATCH && bplmn_ret == TA_LIST_NO_MATCH) { - return TA_LIST_UNKNOWN_PLMN; - } else if (tac_ret == TA_LIST_NO_MATCH && bplmn_ret > TA_LIST_NO_MATCH) { - return TA_LIST_UNKNOWN_TAC; - } - } - } - - return TA_LIST_RET_OK; -} diff --git a/openair-cn/S1AP/s1ap_mme_ta.h b/openair-cn/S1AP/s1ap_mme_ta.h deleted file mode 100644 index 32a6a9cd15..0000000000 --- a/openair-cn/S1AP/s1ap_mme_ta.h +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#ifndef S1AP_MME_TA_H_ -#define S1AP_MME_TA_H_ - -enum { - TA_LIST_UNKNOWN_TAC = -2, - TA_LIST_UNKNOWN_PLMN = -1, - TA_LIST_RET_OK = 0, - TA_LIST_NO_MATCH = 0x1, - TA_LIST_AT_LEAST_ONE_MATCH = 0x2, - TA_LIST_COMPLETE_MATCH = 0x3, -}; - -int s1ap_mme_compare_ta_lists(S1ap_SupportedTAs_t *ta_list); - -#endif /* S1AP_MME_TA_H_ */ diff --git a/openair-cn/S6A/COPYING b/openair-cn/S6A/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/S6A/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/S6A/Makefile.am b/openair-cn/S6A/Makefile.am deleted file mode 100644 index 4f781887c9..0000000000 --- a/openair-cn/S6A/Makefile.am +++ /dev/null @@ -1,52 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/UTILS - -noinst_LTLIBRARIES = libs6a.la -libs6a_la_LDFLAGS = -all-static - -libs6a_la_SOURCES = \ - s6a_defs.h s6a_messages.h \ - s6a_auth_info.c \ - s6a_dict.c \ - s6a_error.c \ - s6a_peer.c \ - s6a_subscription_data.c \ - s6a_task.c \ - s6a_up_loc.c diff --git a/openair-cn/S6A/freediameter/README.txt b/openair-cn/S6A/freediameter/README.txt deleted file mode 100644 index a1c80e1cab..0000000000 --- a/openair-cn/S6A/freediameter/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -Pre-requisities: -Cmake libgnutls-3.1.0 - -The best way to install freeDiameter is to use to script provided in this folder. - -download tarball here: http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz -extract it somewhere. -cd freeDiameter-1.1.5 -patch -p1 < freediameter-1.1.5.patch -mkdir build && cd build -cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ -sudo make install - -if you choose to install libraries in default path (/usr/local/lib), you will have - to tell configure to use LDFLAGS='-L/usr/local/lib' \ No newline at end of file diff --git a/openair-cn/S6A/freediameter/freediameter-1.1.5.patch b/openair-cn/S6A/freediameter/freediameter-1.1.5.patch deleted file mode 100644 index 3b03890675..0000000000 --- a/openair-cn/S6A/freediameter/freediameter-1.1.5.patch +++ /dev/null @@ -1,4296 +0,0 @@ -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/extensions/CMakeLists.txt freeDiameter-1.1.5/extensions/CMakeLists.txt ---- freeDiameter-1.1.5-unmodified/extensions/CMakeLists.txt 2012-11-03 18:45:41.000000000 +0100 -+++ freeDiameter-1.1.5/extensions/CMakeLists.txt 2013-02-14 14:40:40.605217128 +0100 -@@ -35,7 +35,7 @@ - - #### - # Diameter applications dictionaries -- -+FD_EXTENSION_SUBDIR(dict_s6a "3GPP S6A TS.29.279-990" ON) - FD_EXTENSION_SUBDIR(dict_nasreq "NASREQ (RFC4005) Dictionary definitions" ON) - FD_EXTENSION_SUBDIR(dict_eap "Diameter EAP (RFC4072) Dictionary definitions" ON) - -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/extensions/dict_s6a/CMakeLists.txt freeDiameter-1.1.5/extensions/dict_s6a/CMakeLists.txt ---- freeDiameter-1.1.5-unmodified/extensions/dict_s6a/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -+++ freeDiameter-1.1.5/extensions/dict_s6a/CMakeLists.txt 2012-11-22 17:14:40.177272498 +0100 -@@ -0,0 +1,13 @@ -+# The dict_rfc5777 extension -+PROJECT("S6a protocol based on 3GPP 29.272-990" C) -+ -+# Compile as a module -+FD_ADD_EXTENSION(dict_s6a dict_s6a.c) -+ -+ -+#### -+## INSTALL section ## -+ -+INSTALL(TARGETS dict_s6a -+ LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX} -+ COMPONENT freeDiameter-dictionary-s6a) -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/extensions/dict_s6a/dict_s6a.c freeDiameter-1.1.5/extensions/dict_s6a/dict_s6a.c ---- freeDiameter-1.1.5-unmodified/extensions/dict_s6a/dict_s6a.c 1970-01-01 01:00:00.000000000 +0100 -+++ freeDiameter-1.1.5/extensions/dict_s6a/dict_s6a.c 2013-02-13 09:08:27.026025453 +0100 -@@ -0,0 +1,4212 @@ -+/********************************************************************************************************* -+* Software License Agreement (BSD License) * -+* Author: Sebastien ROUX * -+* * -+* Copyright (c) 2013, Eurecom * -+* All rights reserved. * -+* * -+* Redistribution and use of this software 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 Teraoka Laboratory nor the * -+* names of its contributors may be used to endorse or * -+* promote products derived from this software without * -+* specific prior written permission of Teraoka Laboratory * -+* * -+* * -+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * -+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * -+* PARTICULAR PURPOSE 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 -+ -+/* The content of this file follows the same structure as dict_base_proto.c */ -+ -+#define CHECK_dict_new( _type, _data, _parent, _ref ) \ -+ CHECK_FCT( fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref)) ); -+ -+#define CHECK_dict_search( _type, _criteria, _what, _result ) \ -+ CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); -+ -+struct local_rules_definition { -+ char *avp_name; -+ enum rule_position position; -+ int min; -+ int max; -+}; -+ -+#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 ) -+ -+#define PARSE_loc_rules( _rulearray, _parent) { \ -+ int __ar; \ -+ for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ -+ struct dict_rule_data __data = { NULL, \ -+ (_rulearray)[__ar].position, \ -+ 0, \ -+ (_rulearray)[__ar].min, \ -+ (_rulearray)[__ar].max}; \ -+ __data.rule_order = RULE_ORDER(__data.rule_position); \ -+ CHECK_FCT( fd_dict_search( \ -+ fd_g_config->cnf_dict, \ -+ DICT_AVP, \ -+ AVP_BY_NAME_ALL_VENDORS, \ -+ (_rulearray)[__ar].avp_name, \ -+ &__data.rule_avp, 0 ) ); \ -+ if ( !__data.rule_avp ) { \ -+ TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \ -+ return ENOENT; \ -+ } \ -+ CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \ -+ { \ -+ TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \ -+ (_rulearray)[__ar].avp_name ); \ -+ return EINVAL; \ -+ } ); \ -+ } \ -+} -+ -+#define enumval_def_u32( _val_, _str_ ) \ -+ { _str_, { .u32 = _val_ }} -+ -+#define enumval_def_os( _len_, _val_, _str_ ) \ -+ { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}} -+ -+/* Defines if there are any */ -+ -+/* Dictionary */ -+ -+int dict_s6a_init(char * conffile) -+{ -+#define VENDOR_3GPP_Id 10415 -+ -+ TRACE_ENTRY("%p", conffile); -+ -+ struct dict_object * vendor_dict; -+ { -+ struct dict_vendor_data vendor_data = { VENDOR_3GPP_Id, "3GPP" }; -+ CHECK_dict_new (DICT_VENDOR, &vendor_data, NULL, &vendor_dict); -+ } -+ -+ struct dict_object * s6a_dict; -+ { -+ struct dict_application_data data = { 16777251, "Diameter S6a 3GPP" }; -+ CHECK_dict_new( DICT_APPLICATION, &data , NULL, &s6a_dict); -+ } -+ -+ /* AVP section */ -+ { -+ /* Loading the derived data formats */ -+ -+ struct dict_object * Time_type; -+ struct dict_object * Address_type; -+ struct dict_object * UTF8String_type; -+ -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); -+ -+ /* 3GPP-Charging-Characteristics */ -+ { -+ struct dict_avp_data data = { -+ 13, /* Code */ -+ 0, /* Vendor */ -+ "3GPP-Charging-Characteristics", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Service-Selection - RFC 5778 */ -+ { -+ struct dict_avp_data data = { -+ 493, /* Code */ -+ 0, /* Vendor */ -+ "Service-Selection", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Max-Requested-Bandwidth-DL AVP - 3GPP TS 29.214 #5.3.14 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 515, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Max-Requested-Bandwidth-DL", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Max-Requested-Bandwidth-UL AVP - 3GPP TS 29.214 #5.3.15 */ -+ { -+ struct dict_avp_data data = { -+ 516, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Max-Requested-Bandwidth-UL", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Visited-Network-Identifier AVP - 3GPP TS 29.229 #6.3.1 */ -+ { -+ struct dict_avp_data data = { -+ 600, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Visited-Network-Identifier", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Confidentiality-Key AVP - 3GPP TS 29.229 #6.3.27 */ -+ { -+ struct dict_avp_data data = { -+ 625, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Confidentiality-Key", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Integrity-Key AVP - 3GPP TS 29.229 #6.3.28 */ -+ { -+ struct dict_avp_data data = { -+ 626, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Integrity-Key", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Feature-List-ID AVP - 3GPP TS 29.229 #6.3.29 */ -+ { -+ struct dict_avp_data data = { -+ 629, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Feature-List-ID", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Feature-List AVP - 3GPP TS 29.229 #6.3.30 */ -+ { -+ struct dict_avp_data data = { -+ 630, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Feature-List", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* MSISDN AVP - 3GPP TS 29.329 #6.3.2 */ -+ { -+ struct dict_avp_data data = { -+ 701, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MSISDN", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Served-Party-IP-Address AVP - 3GPP TS 32.299 #7.2.187 -+ * The Served-Party-IP-Address AVP (AVP code 848) is of type Address -+ * and holds the IP address of either the calling or called party, -+ * depending on whether the P-CSCF is in touch with the calling or the -+ * called party. This AVP is only provided by the P-CSCF. -+ */ -+ { -+ struct dict_avp_data data = { -+ 848, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Served-Party-IP-Address", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* QoS-Class-Identifier AVP - 3GPP TS 29.212 #5.3.17 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(QoS-Class-Identifier)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_1 = { "QCI_1", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "QCI_2", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "QCI_3", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "QCI_4", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "QCI_5", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "QCI_6", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "QCI_7", { .i32 = 7 }}; -+ struct dict_enumval_data t_8 = { "QCI_8", { .i32 = 8 }}; -+ struct dict_enumval_data t_9 = { "QCI_9", { .i32 = 9 }}; -+ -+ struct dict_avp_data data = { -+ 1028, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "QoS-Class-Identifier", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_8, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_9, avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* RAT-Type AVP - 3GPP TS 29.212 #5.3.31 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(RAT-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "WLAN", { .u32 = 0 }}; -+ struct dict_enumval_data t_1 = { "VIRTUAL", { .u32 = 1 }}; -+ struct dict_enumval_data t_1000 = { "UTRAN", { .u32 = 1000 }}; -+ struct dict_enumval_data t_1001 = { "GERAN", { .u32 = 1001 }}; -+ struct dict_enumval_data t_1002 = { "GAN", { .u32 = 1002 }}; -+ struct dict_enumval_data t_1003 = { "HSPA_EVOLUTION", { .u32 = 1003 }}; -+ struct dict_enumval_data t_1004 = { "EUTRAN", { .u32 = 1004 }}; -+ struct dict_enumval_data t_2000 = { "CDMA2000_1X", { .u32 = 2000 }}; -+ struct dict_enumval_data t_2001 = { "HRPD", { .u32 = 2001 }}; -+ struct dict_enumval_data t_2002 = { "UMB", { .u32 = 2002 }}; -+ struct dict_enumval_data t_2003 = { "EHRPD", { .u32 = 2003 }}; -+ -+ struct dict_avp_data data = { -+ 1032, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAT-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1000 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1001 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1002 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1003 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1004 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2000 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2001 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2002 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2003 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Priority-Level AVP - 3GPP TS 29.272 #5.3.45 */ -+ { -+ struct dict_avp_data data = { -+ 1046, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Priority-Level", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Pre-emption-Capability AVP - 3GPP TS 29.212 #5.3.46 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Capability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PRE-EMPTION_CAPABILITY_ENABLED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "PRE-EMPTION_CAPABILITY_DISABLED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1047, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Pre-emption-Capability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Pre-emption-Vulnerability AVP - 3GPP TS 29.212 #5.3.47 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Vulnerability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PRE-EMPTION_VULNERABILITY_ENABLED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "PRE-EMPTION_VULNERABILITY_DISABLED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1048, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Pre-emption-Vulnerability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Allocation-Retention-Priority AVP - 3GPP TS 29.272 #5.3.32 */ -+ { -+ /* -+ -+ Allocation-Retention-Priority ::= < AVP Header: 1034 > -+ { Priority-Level } -+ [ Pre-emption-Capability ] -+ [ Pre-emption-Vulnerability ] -+ -+ The Allocation-Retention-Priority AVP (AVP code 1034) is of type -+ Grouped, and it is used to indicate the priority of allocation and -+ retention, the pre-emption capability and pre-emption vulnerability -+ for the SDF if provided within the QoS-Information-AVP or for the -+ EPS default bearer if provided within the Default-EPS-Bearer-QoS AVP. -+ */ -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1034, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Allocation-Retention-Priority", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Priority-Level", RULE_REQUIRED, -1, 1 } -+ ,{ "Pre-emption-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "Pre-emption-Vulnerability", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* PDP-Address AVP - 3GPP TS 32.299 #6.3.2 */ -+ { -+ /* -+ * The PDP-Address-Prefix-Length AVP needs not be available for IPv6 -+ * typed IP-address prefix length of 64 bits. -+ */ -+ struct dict_avp_data data = { -+ 1227, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Address", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* Subscriber-Status - 3GPP TS 29.272 #7.3.29 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Subscriber-Status)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "SERVICE_GRANTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "OPERATOR_DETERMINED_BARRING", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1424, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscriber-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); -+ CHECK_dict_new( DICT_AVP, &data, NULL, &type); -+ } -+ -+ /* STN-SR AVP - 3GPP TS 29.272 #7.3.33 */ -+ { -+ struct dict_avp_data data = { -+ 1433, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "STN-SR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* ICS-Indicator AVP - 3GPP TS 29.272 #7.3.104 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(ICS-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "FALSE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "TRUE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1491, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ICS-Indicator", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* IMEI AVP - 3GPP TS 29.272 #7.3.4 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1402, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IMEI", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); -+ } -+ -+ /* 3GPP2-MEID AVP - 3GPP TS 29.272 #7.3.6 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1471, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "3GPP2-MEID", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Software Version - 3GPP TS 29.272 #7.3.5 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1403, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Software-Version", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); -+ } -+ -+ /* Terminal Information AVP - 3GPP TS 29.272 #7.3.3 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1401, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Terminal-Information", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "IMEI", RULE_REQUIRED, 1, 1 } -+ ,{ "3GPP2-MEID", RULE_REQUIRED, 1, 1 } -+ ,{ "Software-Version", RULE_REQUIRED, 1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* ULA-Flags - 3GPP TS 29.272 #7.3.8 */ -+ { -+ struct dict_avp_data data = { -+ 1406, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ULA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Visited-PLMN-Id AVP - 3GPP TS 29.272 #7.3.9 */ -+ { -+ struct dict_avp_data data = { -+ 1407, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Visited-PLMN-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Number-Of-Requested-Vectors - 3GPP TS 29.272 #7.3.14 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1410, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Number-Of-Requested-Vectors", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Re-Synchronization-Info - 3GPP TS 29.272 #7.3.15 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1411, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Re-Synchronization-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Immediate-Response-Preferred - 3GPP TS 29.272 #7.3.16 */ -+ { -+ struct dict_avp_data data = { -+ 1412, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Immediate-Response-Preferred", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Requested-EUTRAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.11 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1408, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Requested-EUTRAN-Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } -+ ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } -+ ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Requested-UTRAN-GERAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.12 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1409, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Requested-UTRAN-GERAN-Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } -+ ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } -+ ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Item-Number AVP - 3GPP TS 29.272 #7.3.23 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1419, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Item-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* RAND AVP - 3GPP TS 29.272 #7.3.53 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1447, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAND", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* XRES AVP - 3GPP TS 29.272 #7.3.54 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1448, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "XRES", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* AUTN AVP - 3GPP TS 29.272 #7.3.55 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1449, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "AUTN", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* SRES AVP - 3GPP TS 29.272 #7.3.60 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1454, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SRES", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* KASME AVP - 3GPP TS 29.272 #7.3.56 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1450, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "KASME", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Kc AVP - 3GPP TS 29.272 #7.3.59 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1453, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Kc", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Collection-Entity AVP - 3GPP TS 29.272 #7.3.96 */ -+ { -+ struct dict_avp_data data = { -+ 1452, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Collection-Entity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); -+ } -+ -+ /* E-UTRAN-Vector - 3GPP TS 29.272 #7.3.18 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1414, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "E-UTRAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "XRES", RULE_REQUIRED, -1, 1 } -+ ,{ "AUTN", RULE_REQUIRED, -1, 1 } -+ ,{ "KASME", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* UTRAN-Vector - 3GPP TS 29.272 #7.3.19 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1415, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "UTRAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "XRES", RULE_REQUIRED, -1, 1 } -+ ,{ "AUTN", RULE_REQUIRED, -1, 1 } -+ ,{ "Confidentiality-Key", RULE_REQUIRED, -1, 1 } -+ ,{ "Integrity-Key", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* GERAN-Vector - 3GPP TS 29.272 #7.3.20 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1416, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GERAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "SRES", RULE_REQUIRED, -1, 1 } -+ ,{ "Kc", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Authentication-Info - 3GPP TS 29.272 #7.3.17 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1413, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "E-UTRAN-Vector", RULE_OPTIONAL, -1, -1 } -+ ,{ "UTRAN-Vector", RULE_OPTIONAL, -1, -1 } -+ ,{ "GERAN-Vector", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Network-Access-Mode - 3GPP TS 29.272 #7.3.21 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Network-Access-Mode)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PACKET_AND_CIRCUIT", { .u32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ONLY_PACKET", { .u32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1417, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Network-Access-Mode", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); -+ CHECK_dict_new( DICT_AVP, &data , type, NULL); -+ } -+ -+ /* HPLMN-ODB AVP - 3GPP TS 29.272 #7.3.22 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1418, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "HPLMN-ODB", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Cancellation-Type - 3GPP TS 29.272 #7.3.24 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Cancellation-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "MME_UPDATE_PROCEDURE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SGSN_UPDATE_PROCEDURE", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "SUBSCRIPTION_WITHDRAWAL", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "UPDATE_PROCEDURE_IWF", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "INITIAL_ATTACH_PROCEDURE", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1420, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Cancellation-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL); -+ CHECK_dict_new( DICT_AVP, &data, NULL, &type); -+ } -+ -+ /* DSR-Flags AVP - 3GPP TS 29.272 #7.3.25 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1421, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "DSR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* DSA-Flags AVP - 3GPP TS 29.272 #7.3.26 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1422, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "DSA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Context-Identifier AVP - 3GPP TS 29.272 #7.3.27 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1423, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Context-Identifier", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Operator-Determined-Barring AVP - 3GPP TS 29.272 #7.3.30 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1425, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Operator-Determined-Barring", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Access-Restriction-Data AVP - 3GPP TS 29.272 #7.3.31 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1426, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Access-Restriction-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* APN-OI-Replacement AVP - 3GPP TS 29.272 #7.3.32 */ -+ { -+ struct dict_avp_data data = { -+ 1427, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-OI-Replacement", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* All-APN-Configurations-Included-Indicator AVP - 3GPP TS 29.272 #7.3.33 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(All-APN-Configurations-Included-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "All_APN_CONFIGURATIONS_INCLUDED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "MODIFIED/ADDED_APN_CONFIGURATIONS_INCLUDED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1428, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "All-APN-Configurations-Included-Indicator", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDN-Type AVP - 3GPP TS 29.272 #7.3.62 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "IPv4", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "IPv6", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "IPv4v6", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "IPv4_OR_IPv6", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1456, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDN-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* EPS-Subscribed-QoS-Profile AVP - 3GPP TS 29.272 #7.3.37 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1431, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-Subscribed-QoS-Profile", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "QoS-Class-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Allocation-Retention-Priority", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* VPLMN-Dynamic-Address-Allowed AVP - 3GPP TS 29.272 #7.3.38 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-Dynamic-Address-Allowed)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOTALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1432, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "VPLMN-Dynamic-Address-Allowed", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Alert-Reason AVP - 3GPP TS 29.272 #7.3.83 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Alert-Reason)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "UE_PRESENT", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "UE_MEMORY_AVAILABLE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1434, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Alert-Reason", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDN-GW-Allocation-Type AVP - 3GPP TS 29.272 #7.3.44 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-GW-Allocation-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "STATIC", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "DYNAMIC", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1438, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDN-GW-Allocation-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Expiration-Date AVP - 3GPP TS 29.272 #7.3.80 */ -+ { -+ struct dict_avp_data data = { -+ 1439, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Expiration-Date", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); -+ } -+ -+ /* CSG-Id AVP - 3GPP TS 29.272 #7.3.79 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1437, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "CSG-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* AMBR AVP - 3GPP TS 29.272 #7.3.41 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1435, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "AMBR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Max-Requested-Bandwidth-UL", RULE_REQUIRED, -1, 1 } -+ ,{ "Max-Requested-Bandwidth-DL", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Specific-APN-Info AVP - 3GPP TS 29.272 #7.3.82 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1472, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Specific-APN-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_REQUIRED, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SIPTO-Permission AVP - 3GPP TS 29.272 #7.3.135 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(SIPTO-Permission)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "SIPTO_ALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SIPTO_NOTALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1613, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SIPTO-Permission", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* LIPA-Permission AVP - 3GPP TS 29.272 #7.3.133 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(LIPA-Permission)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "LIPA-PROHIBITED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "LIPA-ONLY", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "LIPA-CONDITIONAL", { .i32 = 2 }}; -+ -+ struct dict_avp_data data = { -+ 1618, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LIPA-Permission", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* List-Of-Measurements AVP - 3GPP TS 29.272 #7.3.139 */ -+ { -+ struct dict_avp_data data = { -+ 1625, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "List-Of-Measurements", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Reporting-Trigger AVP - 3GPP TS 29.272 #7.3.140 */ -+ { -+ struct dict_avp_data data = { -+ 1626, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Reporting-Trigger", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Report-Interval AVP - 3GPP TS 29.272 #7.3.141 and TS 32.422 #5.10.5 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Interval)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "250ms", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "500ms", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "1000ms", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "2000ms", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "3000ms", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "4000ms", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "6000ms", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "8000ms", { .i32 = 7 }}; -+ struct dict_enumval_data t_8 = { "12000ms", { .i32 = 8 }}; -+ struct dict_enumval_data t_9 = { "16000ms", { .i32 = 9 }}; -+ struct dict_enumval_data t_10 = { "20000ms", { .i32 = 10 }}; -+ struct dict_enumval_data t_11 = { "24000ms", { .i32 = 11 }}; -+ struct dict_enumval_data t_12 = { "28000ms", { .i32 = 12 }}; -+ struct dict_enumval_data t_13 = { "32000ms", { .i32 = 13 }}; -+ struct dict_enumval_data t_14 = { "64000ms", { .i32 = 14 }}; -+ /* Possible in LTE */ -+ struct dict_enumval_data t_15 = { "120ms", { .i32 = 15 }}; -+ struct dict_enumval_data t_16 = { "240ms", { .i32 = 16 }}; -+ struct dict_enumval_data t_17 = { "480ms", { .i32 = 17 }}; -+ struct dict_enumval_data t_18 = { "640ms", { .i32 = 18 }}; -+ struct dict_enumval_data t_19 = { "1024ms", { .i32 = 19 }}; -+ struct dict_enumval_data t_20 = { "2048ms", { .i32 = 20 }}; -+ struct dict_enumval_data t_21 = { "5120ms", { .i32 = 21 }}; -+ struct dict_enumval_data t_22 = { "10240ms", { .i32 = 22 }}; -+ struct dict_enumval_data t_23 = { "1min", { .i32 = 23 }}; -+ struct dict_enumval_data t_24 = { "6min", { .i32 = 24 }}; -+ struct dict_enumval_data t_25 = { "12min", { .i32 = 25 }}; -+ struct dict_enumval_data t_26 = { "30min", { .i32 = 26 }}; -+ struct dict_enumval_data t_27 = { "60min", { .i32 = 27 }}; -+ -+ struct dict_avp_data data = { -+ 1627, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Report-Interval", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_8 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_9 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_10 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_11 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_12 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_13 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_14 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_15 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_16 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_17 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_18 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_19 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_20 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_21 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_22 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_23 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_24 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_25 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_26 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_27 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Report-Amount AVP - 3GPP TS 29.272 #7.3.142 and TS 32.422 #5.10.6 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Amount)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "1", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "2", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "4", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "8", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "16", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "32", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "64", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "infinity", { .i32 = 7 }}; -+ -+ struct dict_avp_data data = { -+ 1628, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Report-Amount", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Event-Threshold-RSRP AVP - 3GPP TS 29.272 #7.3.143 */ -+ { -+ struct dict_avp_data data = { -+ 1629, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Event-Threshold-RSRP", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Event-Threshold-RSRQ AVP - 3GPP TS 29.272 #7.3.144 */ -+ { -+ struct dict_avp_data data = { -+ 1630, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Event-Threshold-RSRQ", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Logging-Interval AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.8 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Interval)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "1.28", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "2.56", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "5.12", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "10.24", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "20.48", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "30.72", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "40.96", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "61.44", { .i32 = 7 }}; -+ -+ struct dict_avp_data data = { -+ 1631, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Logging-Interval", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Logging-Duration AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.9 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Duration)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "600sec", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "1200sec", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "2400sec", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "3600sec", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "5400sec", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "7200sec", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1632, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Logging-Duration", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* APN-Configuration AVP - 3GPP TS 29.272 #7.3.35 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1430, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-Configuration", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Served-Party-IP-Address", RULE_OPTIONAL, -1, 2 } -+ ,{ "PDN-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "EPS-Subscribed-QoS-Profile", RULE_OPTIONAL, -1, 1 } -+ ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "PDN-GW-Allocation-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } -+ ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } -+ ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* APN-Configuration-Profile AVP - 3GPP TS 29.272 #7.3.34 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1429, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-Configuration-Profile", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "All-APN-Configurations-Included-Indicator", RULE_REQUIRED, -1, 1 } -+ ,{ "APN-Configuration", RULE_REQUIRED, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* CSG-Subscription-Data AVP - 3GPP TS 29.272 #7.3.78 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1436, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "CSG-Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "CSG-Id", RULE_REQUIRED, -1, 1 } -+ ,{ "Expiration-Date", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* RAT-Frequency-Selection-Priority-ID AVP - 3GPP TS 29.272 #7.3.46 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1440, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAT-Frequency-Selection-Priority-ID", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IDA-Flags AVP - 3GPP TS 29.272 #7.3.47 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1441, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IDA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* PUA-Flags AVP - 3GPP TS 29.272 #7.3.48 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1442, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PUA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* NOR-Flags AVP - 3GPP TS 29.272 #7.3.49 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1443, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "NOR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* User-Id AVP - 3GPP TS 29.272 #7.3.50 */ -+ { -+ struct dict_avp_data data = { -+ 1444, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "User-Id", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Equipment-Status AVP - 3GPP TS 29.272 #7.3.51 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Equipment-Status)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "WHITELISTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "BLACKLISTED", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "GREYLISTED", { .i32 = 2 }}; -+ -+ struct dict_avp_data data = { -+ 1445, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Equipment-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Regional-Subscription-Zone-Code AVP - 3GPP TS 29.272 #7.3.52 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1446, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Regional-Subscription-Zone-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Roaming-Restricted-Due-To-Unsupported-Feature AVP - 3GPP TS 29.272 #7.3.81 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Roaming-Restricted-Due-To-Unsupported-Feature)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Roaming-Restricted-Due-To-Unsupported-Feature", { .i32 = 0 }}; -+ -+ struct dict_avp_data data = { -+ 1457, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Roaming-Restricted-Due-To-Unsupported-Feature", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Trace-Reference AVP - 3GPP TS 29.272 #7.3.64 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1459, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Reference", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Depth AVP - 3GPP TS 29.272 #7.3.67 and 3GPP TS 32.422 #5.3 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Trace-Depth)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Minimum", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "Medium", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "Maximum", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "MinimumWithoutVendorSpecificExtension", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "MediumWithoutVendorSpecificExtension", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "MaximumWithoutVendorSpecificExtension", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1462, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Depth", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Trace-NE-Type-List AVP - 3GPP TS 29.272 #7.3.68 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1463, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-NE-Type-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.69 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1464, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Interface-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.70 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1465, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Event-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* OMC-Id AVP - 3GPP TS 29.272 #7.3.71 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1466, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "OMC-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Complete-Data-List-Included-Indicator AVP - 3GPP TS 29.272 #7.3.73 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Complete-Data-List-Included-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "All_PDP_CONTEXTS_INCLUDED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "MODIFIED/ADDED_PDP CONTEXTS_INCLUDED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1468, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Complete-Data-List-Included-Indicator", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDP-Type AVP - 3GPP TS 29.272 #7.3.75 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1470, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* GMLC-Number AVP - 3GPP TS 29.272 #7.3.85 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1474, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* SS-Code AVP - 3GPP TS 29.272 #7.3.87 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1476, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SS-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* SS-Status AVP - 3GPP TS 29.272 #7.3.88 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1477, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SS-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Notification-To-UE-User AVP - 3GPP TS 29.272 #7.3.89 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Notification-To-UE-User)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOTIFY_LOCATION_ALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "LOCATION_NOT_ALLOWED", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1478, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Notification-To-UE-User", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Client-Identity AVP - 3GPP TS 29.272 #7.3.91 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1480, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Client-Identity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* GMLC-Restriction AVP - 3GPP TS 29.272 #7.3.92 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(GMLC-Restriction)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "GMLC_LIST", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "HOME_COUNTRY", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1481, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Restriction", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PLMN-Client AVP - 3GPP TS 29.272 #7.3.92 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PLMN-Client)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "BROADCAST_SERVICE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "O_AND_M_HPLMN", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "O_AND_M_VPLMN", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "ANONYMOUS_LOCATION", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "TARGET_UE_SUBSCRIBED_SERVICE", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1482, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PLMN-Client", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* ServiceTypeIdentity AVP - 3GPP TS 29.272 #7.3.95 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1484, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ServiceTypeIdentity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* QoS-Subscribed - 3GPP TS 29.272 #7.3.77 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1404, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "QoS-Subscribed", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* ULR-Flags - 3GPP TS 29.272 #7.3.7 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1405, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ULR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Ext-PDP-Type AVP - 3GPP TS 29.272 #7.3.75A */ -+ { -+ struct dict_avp_data data = { -+ 1620, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Ext-PDP-Type", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Ext-PDP-Address AVP - 3GPP TS 29.272 #7.3.129 */ -+ { -+ struct dict_avp_data data = { -+ 1621, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Ext-PDP-Address", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); -+ } -+ -+ /* TS-Code AVP - 3GPP TS 29.272 #7.3.100 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1487, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "TS-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* External-Client AVP - 3GPP TS 29.272 #7.3.90 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1479, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "External-Client", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Client-Identity", RULE_REQUIRED, -1, 1 } -+ ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Service-Type AVP - 3GPP TS 29.272 #7.3.94 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1483, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Service-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "ServiceTypeIdentity", RULE_REQUIRED, -1, 1 } -+ ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* LCS-PrivacyException AVP - 3GPP TS 29.272 #7.3.86 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1475, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LCS-PrivacyException", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, -1, 1 } -+ ,{ "SS-Status", RULE_REQUIRED, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ ,{ "External-Client", RULE_OPTIONAL, -1, -1 } -+ ,{ "PLMN-Client", RULE_OPTIONAL, -1, -1 } -+ ,{ "Service-Type", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MO-LR AVP - 3GPP TS 29.272 #7.3.96 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1485, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MO-LR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, -1, 1 } -+ ,{ "SS-Status", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* LCS-Info AVP - 3GPP TS 29.272 #7.3.84 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1473, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LCS-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "GMLC-Number", RULE_OPTIONAL, -1, -1 } -+ ,{ "LCS-PrivacyException", RULE_OPTIONAL, -1, -1 } -+ ,{ "MO-LR", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* PDP-Context AVP - 3GPP TS 29.272 #7.3.74 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1469, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Context", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "QoS-Subscribed", RULE_REQUIRED, -1, 1 } -+ ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "Ext-PDP-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "Ext-PDP-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } -+ ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* GPRS-Subscription-Data AVP - 3GPP TS 29.272 #7.3.72 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1467, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GPRS-Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Complete-Data-List-Included-Indicator", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Context", RULE_REQUIRED, -1, 50 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Teleservice-List AVP - 3GPP TS 29.272 #7.3.99 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1486, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Teleservice-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "TS-Code", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Call-Barring-Infor-List AVP - 3GPP TS 29.272 #7.3.101 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1488, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Call-Barring-Infor-List", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, 1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1489, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IDR-Flags AVP - 3GPP TS 29.272 #7.3.103 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1490, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IDR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IMS-Voice-Over-PS-Sessions-Supported AVP - 3GPP TS 29.272 #7.3.106 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(IMS-Voice-Over-PS-Sessions-Supported)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1492, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IMS-Voice-Over-PS-Sessions-Supported", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Homogeneous-Support-of-IMS-Voice-Over-PSSessions)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1493, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Last-UE-Activity-Time AVP - 3GPP TS 29.272 #7.3.108 */ -+ { -+ struct dict_avp_data data = { -+ 1494, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Last-UE-Activity-Time", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); -+ } -+ -+ /* E-UTRAN-Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.117 */ -+ { -+ struct dict_avp_data data = { -+ 1602, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "E-UTRAN-Cell-Global-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Tracking-Area-Identity AVP - 3GPP TS 29.272 #7.3.118 */ -+ { -+ struct dict_avp_data data = { -+ 1603, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Tracking-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.119 */ -+ { -+ struct dict_avp_data data = { -+ 1604, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Cell-Global-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Routing-Area-Identity AVP - 3GPP TS 29.272 #7.3.120 */ -+ { -+ struct dict_avp_data data = { -+ 1605, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Routing-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Location-Area-Identity AVP - 3GPP TS 29.272 #7.3.121 */ -+ { -+ struct dict_avp_data data = { -+ 1606, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Location-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Service-Area-Identity AVP - 3GPP TS 29.272 #7.3.122 */ -+ { -+ struct dict_avp_data data = { -+ 1607, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Service-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Geographical-Information AVP - 3GPP TS 29.272 #7.3.123 */ -+ { -+ struct dict_avp_data data = { -+ 1608, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Geographical-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Geodetic-Information AVP - 3GPP TS 29.272 #7.3.124 */ -+ { -+ struct dict_avp_data data = { -+ 1609, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Geodetic-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Current-Location-Retrieved AVP - 3GPP TS 29.272 #7.3.125 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Current-Location-Retrieved)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "ACTIVE-LOCATION-RETRIEVAL", { .i32 = 0 }}; -+ -+ struct dict_avp_data data = { -+ 1610, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Current-Location-Retrieved", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Age-Of-Location-Information AVP - 3GPP TS 29.272 #7.3.126 */ -+ { -+ struct dict_avp_data data = { -+ 1611, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Age-Of-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* UE-SRVCC-Capability AVP - 3GPP TS 29.272 #7.3.130 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(UE-SRVCC-Capability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "UE-SRVCC-NOT-SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "UE-SRVCC-SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1615, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "UE-SRVCC-Capability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MPS-Priority AVP - 3GPP TS 29.272 #7.3.131 */ -+ { -+ struct dict_avp_data data = { -+ 1616, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MPS-Priority", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* VPLMN-LIPA-Allowed AVP - 3GPP TS 29.272 #7.3.132 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-LIPA-Allowed)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "LIPA-NOTALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "LIPA-ALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1617, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "VPLMN-LIPA-Allowed", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Subscribed-Periodic-RAU-TAU-Timer AVP - 3GPP TS 29.272 #7.3.134 */ -+ { -+ struct dict_avp_data data = { -+ 1619, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscribed-Periodic-RAU-TAU-Timer", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Job-Type AVP - 3GPP TS 29.272 #7.3.132 and 3GPP TS 32.422 #5.10.1 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Job-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Immediate-MDT-Only", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "Logged-MDT-only", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "Trace-Only", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "Immediate-MDT-and-Trace", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1623, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Job-Type", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Relay-Node-Indicator AVP - 3GPP TS 29.272 #7.3.147 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Relay-Node-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_RELAY_NODE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "RELAY_NODE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1633, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Relay-Node-Indicator", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MDT-User-Consent AVP - 3GPP TS 29.272 #7.3.148 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(MDT-User-Consent)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "CONSENT_NOT_GIVEN", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "CONSENT_GIVEN", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1634, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MDT-User-Consent", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* PUR-Flags AVP - 3GPP TS 29.272 #7.3.149 */ -+ { -+ struct dict_avp_data data = { -+ 1635, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PUR-Flags", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* User-State AVP - 3GPP TS 29.272 #7.3.114 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-State)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "DETACHED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ATTACHED_NOT_REACHABLE_FOR_PAGING", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "ATTACHED_REACHABLE_FOR_PAGING", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "CONNECTED_NOT_REACHABLE_FOR_PAGING", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "CONNECTED_REACHABLE_FOR_PAGING", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "NETWORK_DETERMINED_NOT_REACHABLE", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1499, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MME-User-State AVP - 3GPP TS 29.272 #7.3.112 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1497, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MME-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-User-State AVP - 3GPP TS 29.272 #7.3.113 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1498, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* EPS-User-State AVP - 3GPP TS 29.272 #7.3.110 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1495, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "MME-User-State", RULE_OPTIONAL, -1, 1 } -+ ,{ "SGSN-User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MME-Location-Information AVP - 3GPP TS 29.272 #7.3.115 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1600, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MME-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } -+ ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-Location-Information AVP - 3GPP TS 29.272 #7.3.116 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1601, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } -+ ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Area-Scope AVP - 3GPP TS 29.272 #7.3.138 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1624, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Area-Scope", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MDT-Configuration AVP - 3GPP TS 29.272 #7.3.136 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1622, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MDT-Configuration", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Job-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Area-Scope", RULE_OPTIONAL, -1, 1 } -+ ,{ "List-Of-Measurements", RULE_OPTIONAL, -1, 1 } -+ ,{ "Reporting-Trigger", RULE_OPTIONAL, -1, 1 } -+ ,{ "Report-Interval", RULE_OPTIONAL, -1, 1 } -+ ,{ "Report-Amount", RULE_OPTIONAL, -1, 1 } -+ ,{ "Event-Threshold-RSRP", RULE_OPTIONAL, -1, 1 } -+ ,{ "Event-Threshold-RSRQ", RULE_OPTIONAL, -1, 1 } -+ ,{ "Logging-Interval", RULE_OPTIONAL, -1, 1 } -+ ,{ "Logging-Duration", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* EPS-Location-Information AVP - 3GPP TS 29.272 #7.3.111 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1496, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "MME-Location-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "SGSN-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Active-APN AVP - 3GPP TS 29.173 #7.3.127 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1612, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Active-APN", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Error-Diagnostic AVP - 3GPP TS 29.272 #7.3.128 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Error-Diagnostic)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "GPRS_DATA_SUBSCRIBED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "NO_GPRS_DATA_SUBSCRIBED", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "ODB-ALL-APN", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "ODB-HPLMN-APN", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "ODB-VPLMN-APN", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1614, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Error-Diagnostic", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* GMLC-Address AVP - 3GPP TS 29.173 #6.4.7 */ -+ { -+ struct dict_avp_data data = { -+ 2405, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Address", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* Supported Features AVP - 3GPP TS 29.229 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 628, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Supported-Features", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Vendor-Id", RULE_REQUIRED, 1, 1 } -+ ,{ "Feature-List-ID", RULE_REQUIRED, 1, 1 } -+ ,{ "Feature-List", RULE_REQUIRED, 1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Trace-Data AVP - 3GPP TS 29.272 #7.3.63 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1458, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Trace-Reference", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-Depth", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-NE-Type-List", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-Interface-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Event-List", RULE_REQUIRED, -1, 1 } -+ ,{ "OMC-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Collection-Entity", RULE_REQUIRED, -1, 1 } -+ ,{ "MDT-Configuration", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Subscription-Data AVP - 3GPP TS 29.272 #7.3.2 */ -+ { -+ /* -+ -+ * The Subscription-Data AVP is of type Grouped. It shall contain -+ * the information related to the user profile relevant for -+ * EPS and GERAN/UTRAN. -+ -+ Subscription-Data ::= -+ [ Subscriber-Status ] -+ [ MSISDN ] -+ [ STN-SR ] -+ [ ICS-Indicator ] -+ [ Network-Access-Mode ] -+ [ Operator-Determined-Barring ] -+ [ HPLMN-ODB ] -+ *10[ Regional-Subscription-Zone-Code] -+ [ Access-Restriction-Data ] -+ [ APN-OI-Replacement ] -+ [ LCS-Info ] -+ [ Teleservice-List ] -+ [ Call-Barring-Infor-List ] -+ [ 3GPP-Charging-Characteristics ] -+ [ AMBR ] -+ [ APN-Configuration-Profile ] -+ [ RAT-Frequency-Selection-Priority-ID ] -+ [ Trace-Data] -+ [ GPRS-Subscription-Data ] -+ *[ CSG-Subscription-Data ] -+ [ Roaming-Restricted-Due-To-Unsupported-Feature ] -+ [ Subscribed-Periodic-RAU-TAU-Timer ] -+ [ MPS-Priority ] -+ [ VPLMN-LIPA-Allowed ] -+ [ Relay-Node-Indicator ] -+ [ MDT-User-Consent ] -+ *[ AVP ] -+ -+ * The AMBR included in this grouped AVP shall include the AMBR -+ * associated to the user’s subscription (UE-AMBR); -+ * Max-Requested-Bandwidth-UL and Max-Requested-Bandwidth-DL within -+ * this AVP shall not both be set to "0". -+ * The APN-OI-Replacement included in this grouped AVP shall include -+ * the UE level APN-OI-Replacement associated to the user’s subscription. -+ */ -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1400, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Subscriber-Status", RULE_OPTIONAL, -1, 1 } -+ ,{ "MSISDN", RULE_OPTIONAL, -1, 1 } -+ ,{ "STN-SR", RULE_OPTIONAL, -1, 1 } -+ ,{ "ICS-Indicator", RULE_OPTIONAL, -1, 1 } -+ ,{ "Network-Access-Mode", RULE_OPTIONAL, -1, 1 } -+ ,{ "Operator-Determined-Barring", RULE_OPTIONAL, -1, 1 } -+ ,{ "HPLMN-ODB", RULE_OPTIONAL, -1, 1 } -+ ,{ "Regional-Subscription-Zone-Code", RULE_OPTIONAL, -1, 10 } -+ ,{ "Access-Restriction-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } -+ ,{ "LCS-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Teleservice-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "Call-Barring-Infor-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "APN-Configuration-Profile", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Frequency-Selection-Priority-ID", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "GPRS-Subscription-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "CSG-Subscription-Data", RULE_OPTIONAL, -1, -1 } -+ ,{ "Roaming-Restricted-Due-To-Unsupported-Feature", RULE_OPTIONAL, -1, 1 } -+ ,{ "Subscribed-Periodic-RAU-TAU-Timer", RULE_OPTIONAL, -1, 1 } -+ ,{ "MPS-Priority", RULE_OPTIONAL, -1, 1 } -+ ,{ "VPLMN-LIPA-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "Relay-Node-Indicator", RULE_OPTIONAL, -1, 1 } -+ ,{ "MDT-User-Consent", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* S6A-Update Location Request - 3GPP TS 29.272 #7.2.3 */ -+ { -+ /* -+ -+ The Update-Location-Request (ULR) command, indicated by the -+ Command-Code field set to 316 and the "R" bit set in -+ the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Update-Location-Request> ::= < Diameter Header: 316, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Terminal-Information ] -+ { RAT-Type } -+ { ULR-Flags } -+ [ UE-SRVCC-Capability ] -+ { Visited-PLMN-Id } -+ [ SGSN-Number ] -+ [ Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ] -+ [ GMLC-Address ] -+ *[ Active-APN ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 316, /* Code */ -+ "Update-Location-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Type", RULE_REQUIRED, 1, 1 } -+ ,{ "ULR-Flags", RULE_REQUIRED, 1, 1 } -+ ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-PLMN-Id", RULE_REQUIRED, 1, 1 } -+ ,{ "SGSN-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", RULE_OPTIONAL, -1, 1 } -+ ,{ "GMLC-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "Active-APN", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Update Location Answer - 3GPP TS 29.272 #7.2.4 */ -+ { -+ /* -+ -+ The Update-Location-Answer (ULA) command, indicated by the -+ Command-Code field set to 316 and the 'R' bit cleared -+ in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Update-Location-Answer> ::= < Diameter Header: 316, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ [ Error-Diagnostic ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ [ ULA-Flags ] -+ [ Subscription-Data ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 316, /* Code */ -+ "Update-Location-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "ULA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Subscription-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Cancel-Location-Request - 3GPP TS 29.272 #7.2.7 */ -+ { -+ /* -+ -+ The Cancel-Location-Request (CLR) command, indicated by the -+ Command-Code field set to 317 and the 'R' bit set in -+ the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Cancel-Location-Request> ::= < Diameter Header: 317, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[Supported-Features ] -+ { Cancellation-Type } -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 317, /* Code */ -+ "Cancel-Location-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Cancellation-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Cancel-Location-Answer - 3GPP TS 29.272 #7.2.8 */ -+ { -+ /* -+ -+ The Cancel-Location-Answer (CLA) command, indicated by the -+ Command-Code field set to 317 and the 'R' bit cleared -+ in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Cancel-Location-Answer> ::= < Diameter Header: 317, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 317, /* Code */ -+ "Cancel-Location-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Authentication-Information-Request - 3GPP TS 29.272 #7.2.4 */ -+ { -+ /* -+ -+ The Authentication-Information-Request (AIR) command, indicated by -+ the Command-Code field set to 318 and the 'R' -+ bit set in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Authentication-Information-Request> ::= < Diameter Header: 318, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Requested-EUTRAN-Authentication-Info ] -+ [ Requested-UTRAN-GERAN-Authentication-Info ] -+ { Visited-PLMN-Id } -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 318, /* Code */ -+ "Authentication-Information-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Requested-EUTRAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Requested-UTRAN-GERAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-PLMN-Id", RULE_REQUIRED, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Authentication-Information-Answer - 3GPP TS 29.272 #7.2.6 */ -+ { -+ /* -+ -+ The Authentication-Information-Answer (AIA) command, indicated by -+ the Command-Code field set to318 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Authentication-Information-Answer> ::= < Diameter Header: 318, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ [ Error-Diagnostic ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ [ Authentication-Info ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 318, /* Code */ -+ "Authentication-Information-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Insert-Subscriber-Data-Request IDR Command - 3GPP TS 29.272 #7.2.9 */ -+ { -+ /* -+ -+ The Insert-Subscriber-Data-Request (IDR) command, indicated by the -+ Command-Code field set to 319 and the 'R' bit set in the Command -+ Flags field, is sent from HSS to MME or SGSN. -+ -+ < Insert-Subscriber-Data-Request> ::= < Diameter Header: 319, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features] -+ { Subscription-Data} -+ [IDR- Flags ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 319, /* Code */ -+ "Insert-Subscriber-Data-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Subscription-Data", RULE_REQUIRED, -1, 1 } -+ ,{ "IDR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Insert-Subscriber-Data-Answer IDA Command - 3GPP TS 29.272 #7.2.10 */ -+ { -+ /* -+ -+ The Insert-Subscriber-Data-Request (IDR) command, indicated by the -+ Command-Code field set to 319 and the 'R' bit set in the Command -+ Flags field, is sent from HSS to MME or SGSN. -+ -+ < Insert-Subscriber-Data-Answer> ::= < Diameter Header: 319, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ IMS-Voice-Over-PS-Sessions-Supported ] -+ [ Last-UE-Activity-Time ] -+ [ RAT-Type ] -+ [ IDA-Flags ] -+ [ EPS-User-State ] -+ [ EPS-Location-Information ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 319, /* Code */ -+ "Insert-Subscriber-Data-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "IMS-Voice-Over-PS-Sessions-Supported", RULE_OPTIONAL, -1, 1 } -+ ,{ "Last-UE-Activity-Time", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "IDA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "EPS-User-State", RULE_OPTIONAL, -1, 1 } -+ ,{ "EPS-Location-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Delete-Subscriber-Data-Request (DSR) Command - 3GPP TS 29.272 #7.2.11 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Request (DSR) command, indicated by -+ the Command-Code field set to 320 and the 'R' bit -+ set in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Delete-Subscriber-Data-Request > ::= < Diameter Header: 320, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ { DSR-Flags } -+ *[ Context-Identifier ] -+ [ Trace-Reference ] -+ *[ TS-Code ] -+ *[ SS-Code ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 320, /* Code */ -+ "Delete-SubscriberData-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "DSR-Flags", RULE_REQUIRED, -1, 1 } -+ ,{ "Context-Identifier", RULE_OPTIONAL, -1, -1 } -+ ,{ "Trace-Reference", RULE_OPTIONAL, -1, 1 } -+ ,{ "TS-Code", RULE_OPTIONAL, -1, -1 } -+ ,{ "SS-Code", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Delete-Subscriber-Data-Answer (DSA) Command - 3GPP TS 29.272 #7.2.12 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Answer (DSA) command, indicated by the -+ Command-Code field set to 320 and the 'R' bit -+ cleared in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Delete-Subscriber-Data-Answer> ::= < Diameter Header: 320, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ DSA-Flags ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 320, /* Code */ -+ "Delete-SubscriberData-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "DSA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Purge-UE-Request (PUR) Command - 3GPP TS 29.272 #7.2.13 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Request (DSR) command, indicated by -+ the Command-Code field set to 320 and the 'R' bit -+ set in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Purge-UE-Request> ::= < Diameter Header: 321, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ [ PUR-Flags ] -+ *[ Supported-Features ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 321, /* Code */ -+ "Purge-UE-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "PUR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Purge-UE-Answer (PUA) Command - 3GPP TS 29.272 #7.2.14 */ -+ { -+ /* -+ -+ The Purge-UE-Answer (PUA) command, indicated by the Command-Code -+ field set to 321 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Purge-UE-Answer> ::= < Diameter Header: 321, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ PUA-Flags ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 321, /* Code */ -+ "Purge-UE-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "PUA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Reset-Request (RSR) Command - 3GPP TS 29.272 #7.2.15 */ -+ { -+ /* -+ -+ The Reset-Request (RSR) command, indicated by the Command-Code -+ field set to 322 and the 'R' bit set in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Reset-Request> ::= < Diameter Header: 322, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ *[ Supported-Features ] -+ *[ User-Id ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 322, /* Code */ -+ "Reset-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "User-Id", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Reset-Answer (RSA) Command - 3GPP TS 29.272 #7.2.16 */ -+ { -+ /* -+ -+ The Authentication-Information-Answer (RSA) command, indicated by -+ the Command-Code field set to 322 and the 'R' -+ bit cleared in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Reset-Answer> ::= < Diameter Header: 322, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 322, /* Code */ -+ "Reset-Anwer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Notify-Request (NOR) Command - 3GPP TS 29.272 #7.2.17 */ -+ { -+ /* -+ -+ The Notify-Request (NOR) command, indicated by the Command-Code -+ field set to 323 and the 'R' bit set in the Command Flags field, -+ is sent from MME or SGSN to HSS. -+ -+ < Notify-Request> ::= < Diameter Header: 323, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Terminal-Information ] -+ [ MIP6-Agent-Info ] -+ [ Visited-Network-Identifier ] -+ [ Context-Identifier ] -+ [ Service-Selection ] -+ [ Alert-Reason ] -+ [ UE-SRVCC-Capability ] -+ [ NOR-Flags ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 323, /* Code */ -+ "Notify-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Context-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } -+ ,{ "Alert-Reason", RULE_OPTIONAL, -1, 1 } -+ ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "NOR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Notify-Answer (NOA) Command - 3GPP TS 29.272 #7.2.18 */ -+ { -+ /* -+ -+ The Notify-Answer (NOA) command, indicated by the Command-Code -+ field set to 323 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Notify-Answer> ::= < Diameter Header: 323, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 323, /* Code */ -+ "Notify-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* ME-Identity-Check-Request (ECR) Command - 3GPP TS 29.272 #7.2.19 */ -+ { -+ /* -+ -+ The ME-Identity-Check-Request (ECR) command, indicated by the -+ Command-Code field set to 324 and the 'R' bit set -+ in the Command Flags field, is sent from MME or SGSN to EIR. -+ -+ < ME-Identity-Check-Request > ::= < Diameter Header: 324, REQ, PXY, 16777252 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { Terminal-Information } -+ [ User-Name ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 324, /* Code */ -+ "ME-Identity-Check-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Terminal-Information", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* ME-Identity-Check-Answer (ECA) Command - 3GPP TS 29.272 #7.2.20 */ -+ { -+ /* -+ -+ The ME-Identity-Check-Answer (ECA) command, indicated by the -+ Command-Code field set to 324 and the 'R' bit -+ cleared in the Command Flags field, is sent from EIR to MME or SGSN. -+ -+ < ME-Identity-Check-Answer> ::= < Diameter Header: 324, PXY, 16777252 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Equipment-Status ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 324, /* Code */ -+ "ME-Identity-Check-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Equipment-Status", RULE_OPTIONAL, -1, 1 } -+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ } -+ -+ TRACE_DEBUG(INFO, "Dictionary Extension 'S6A from 3GPP standard v.10.5' initialized"); -+ return 0; -+} -+EXTENSION_ENTRY("dict_s6a", dict_s6a_init, "dict_nas_mipv6"); -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/include/freeDiameter/freeDiameter-host.h.in freeDiameter-1.1.5/include/freeDiameter/freeDiameter-host.h.in ---- freeDiameter-1.1.5-unmodified/include/freeDiameter/freeDiameter-host.h.in 2012-11-03 18:45:41.000000000 +0100 -+++ freeDiameter-1.1.5/include/freeDiameter/freeDiameter-host.h.in 2013-02-12 10:56:29.411429498 +0100 -@@ -37,6 +37,9 @@ - #ifndef FD_IS_CONFIG - #define FD_IS_CONFIG - -+#if HAVE_CONFIG_H -+# include "config.h" -+#else - #cmakedefine HAVE_NTOHLL - #cmakedefine HAVE_MALLOC_H - #cmakedefine HAVE_SIGNALENT_H -@@ -57,6 +60,7 @@ - #cmakedefine GNUTLS_VERSION_210 - #cmakedefine GNUTLS_VERSION_300 - #cmakedefine GNUTLS_VERSION_310 -+#endif /* !HAVE_CONFIG_H */ - - #cmakedefine ERRORS_ON_TODO - #cmakedefine DEBUG -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/include/freeDiameter/libfdproto.h freeDiameter-1.1.5/include/freeDiameter/libfdproto.h ---- freeDiameter-1.1.5-unmodified/include/freeDiameter/libfdproto.h 2012-11-03 18:45:41.000000000 +0100 -+++ freeDiameter-1.1.5/include/freeDiameter/libfdproto.h 2013-02-05 13:46:06.683419353 +0100 -@@ -499,7 +499,7 @@ - TRACE_DEBUG_ALL( "Check FCT: " #__call__ ); \ - __ret__ = (__call__); \ - if (__ret__ != 0) { \ -- TRACE_DEBUG_ERROR("ERROR: in '" #__call__ "':\t%s", strerror(__ret__)); \ -+ TRACE_DEBUG_ERROR("ERROR: in %s:%d'" #__call__ "':\t%s", __FILE__, __LINE__, strerror(__ret__)); \ - __fallback__; \ - } \ - } - -diff -NaurB -x '*~' -x build freeDiameter-1.1.5-unmodified/libfdproto/messages.c freeDiameter-1.1.5/libfdproto/messages.c ---- freeDiameter-1.1.5-unmodified/libfdproto/messages.c 2012-11-03 18:45:41.000000000 +0100 -+++ freeDiameter-1.1.5/libfdproto/messages.c 2013-02-14 14:41:42.281217289 +0100 -@@ -967,8 +967,12 @@ - - /* Check the parameters */ - CHECK_PARAMS( CHECK_MSG(msg) ); -- CHECK_PARAMS( msg->msg_public.msg_flags & CMD_FLAG_REQUEST ); /* we associate with requests only */ -+// CHECK_PARAMS( msg->msg_public.msg_flags & CMD_FLAG_REQUEST ); /* we associate with requests only */ - CHECK_PARAMS( (anscb == NULL) || (msg->msg_cb.fct == NULL) ); /* We are not overwritting a cb */ -+ /* No need to associate a callback with an answer. */ -+ if ((msg->msg_public.msg_flags & CMD_FLAG_REQUEST) == 0) { -+ return 0; -+ } - - /* Associate callback and data with the message, if any */ - msg->msg_cb.fct = anscb; diff --git a/openair-cn/S6A/freediameter/freediameter-1.2.0.patch b/openair-cn/S6A/freediameter/freediameter-1.2.0.patch deleted file mode 100644 index 1474f12138..0000000000 --- a/openair-cn/S6A/freediameter/freediameter-1.2.0.patch +++ /dev/null @@ -1,4245 +0,0 @@ -diff -rupN freeDiameter-1.2.0/extensions/CMakeLists.txt freeDiameter-1.2.0.yang/extensions/CMakeLists.txt ---- freeDiameter-1.2.0/extensions/CMakeLists.txt 2013-09-14 12:09:01.000000000 +0200 -+++ freeDiameter-1.2.0.yang/extensions/CMakeLists.txt 2015-03-17 15:47:15.237308388 +0100 -@@ -36,6 +36,7 @@ INCLUDE_DIRECTORIES(${LFDCORE_INCLUDES}) - #### - # Diameter applications dictionaries - -+FD_EXTENSION_SUBDIR(dict_s6a "3GPP S6A TS.29.279-990" ON) - FD_EXTENSION_SUBDIR(dict_nasreq "NASREQ (RFC4005) Dictionary definitions" ON) - FD_EXTENSION_SUBDIR(dict_eap "Diameter EAP (RFC4072) Dictionary definitions" ON) - -diff -rupN freeDiameter-1.2.0/extensions/dict_s6a/CMakeLists.txt freeDiameter-1.2.0.yang/extensions/dict_s6a/CMakeLists.txt ---- freeDiameter-1.2.0/extensions/dict_s6a/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 -+++ freeDiameter-1.2.0.yang/extensions/dict_s6a/CMakeLists.txt 2015-03-17 15:22:46.729309000 +0100 -@@ -0,0 +1,14 @@ -+# The dict_rfc5777 extension -+PROJECT("S6a protocol based on 3GPP 29.272-990" C) -+ -+# Compile as a module -+FD_ADD_EXTENSION(dict_s6a dict_s6a.c) -+ -+ -+#### -+## INSTALL section ## -+ -+INSTALL(TARGETS dict_s6a -+ LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX} -+ COMPONENT freeDiameter-dictionary-s6a) -+ -diff -rupN freeDiameter-1.2.0/extensions/dict_s6a/dict_s6a.c freeDiameter-1.2.0.yang/extensions/dict_s6a/dict_s6a.c ---- freeDiameter-1.2.0/extensions/dict_s6a/dict_s6a.c 1970-01-01 01:00:00.000000000 +0100 -+++ freeDiameter-1.2.0.yang/extensions/dict_s6a/dict_s6a.c 2015-03-17 15:22:46.729309000 +0100 -@@ -0,0 +1,4212 @@ -+/********************************************************************************************************* -+* Software License Agreement (BSD License) * -+* Author: Sebastien ROUX * -+* * -+* Copyright (c) 2013, Eurecom * -+* All rights reserved. * -+* * -+* Redistribution and use of this software 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 Teraoka Laboratory nor the * -+* names of its contributors may be used to endorse or * -+* promote products derived from this software without * -+* specific prior written permission of Teraoka Laboratory * -+* * -+* * -+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * -+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * -+* PARTICULAR PURPOSE 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 -+ -+/* The content of this file follows the same structure as dict_base_proto.c */ -+ -+#define CHECK_dict_new( _type, _data, _parent, _ref ) \ -+ CHECK_FCT( fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref)) ); -+ -+#define CHECK_dict_search( _type, _criteria, _what, _result ) \ -+ CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) ); -+ -+struct local_rules_definition { -+ char *avp_name; -+ enum rule_position position; -+ int min; -+ int max; -+}; -+ -+#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 ) -+ -+#define PARSE_loc_rules( _rulearray, _parent) { \ -+ int __ar; \ -+ for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \ -+ struct dict_rule_data __data = { NULL, \ -+ (_rulearray)[__ar].position, \ -+ 0, \ -+ (_rulearray)[__ar].min, \ -+ (_rulearray)[__ar].max}; \ -+ __data.rule_order = RULE_ORDER(__data.rule_position); \ -+ CHECK_FCT( fd_dict_search( \ -+ fd_g_config->cnf_dict, \ -+ DICT_AVP, \ -+ AVP_BY_NAME_ALL_VENDORS, \ -+ (_rulearray)[__ar].avp_name, \ -+ &__data.rule_avp, 0 ) ); \ -+ if ( !__data.rule_avp ) { \ -+ TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name ); \ -+ return ENOENT; \ -+ } \ -+ CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \ -+ { \ -+ TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \ -+ (_rulearray)[__ar].avp_name ); \ -+ return EINVAL; \ -+ } ); \ -+ } \ -+} -+ -+#define enumval_def_u32( _val_, _str_ ) \ -+ { _str_, { .u32 = _val_ }} -+ -+#define enumval_def_os( _len_, _val_, _str_ ) \ -+ { _str_, { .os = { .data = (unsigned char *)_val_, .len = _len_ }}} -+ -+/* Defines if there are any */ -+ -+/* Dictionary */ -+ -+int dict_s6a_init(char * conffile) -+{ -+#define VENDOR_3GPP_Id 10415 -+ -+ TRACE_ENTRY("%p", conffile); -+ -+ struct dict_object * vendor_dict; -+ { -+ struct dict_vendor_data vendor_data = { VENDOR_3GPP_Id, "3GPP" }; -+ CHECK_dict_new (DICT_VENDOR, &vendor_data, NULL, &vendor_dict); -+ } -+ -+ struct dict_object * s6a_dict; -+ { -+ struct dict_application_data data = { 16777251, "Diameter S6a 3GPP" }; -+ CHECK_dict_new( DICT_APPLICATION, &data , NULL, &s6a_dict); -+ } -+ -+ /* AVP section */ -+ { -+ /* Loading the derived data formats */ -+ -+ struct dict_object * Time_type; -+ struct dict_object * Address_type; -+ struct dict_object * UTF8String_type; -+ -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type); -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type); -+ CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type); -+ -+ /* 3GPP-Charging-Characteristics */ -+ { -+ struct dict_avp_data data = { -+ 13, /* Code */ -+ 0, /* Vendor */ -+ "3GPP-Charging-Characteristics", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Service-Selection - RFC 5778 */ -+ { -+ struct dict_avp_data data = { -+ 493, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor , EURECOM: with FD 1.2.0 does not work if vendor ID is 0 for this AVP*/ -+ "Service-Selection", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Max-Requested-Bandwidth-DL AVP - 3GPP TS 29.214 #5.3.14 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 515, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Max-Requested-Bandwidth-DL", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Max-Requested-Bandwidth-UL AVP - 3GPP TS 29.214 #5.3.15 */ -+ { -+ struct dict_avp_data data = { -+ 516, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Max-Requested-Bandwidth-UL", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Visited-Network-Identifier AVP - 3GPP TS 29.229 #6.3.1 */ -+ { -+ struct dict_avp_data data = { -+ 600, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Visited-Network-Identifier", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Confidentiality-Key AVP - 3GPP TS 29.229 #6.3.27 */ -+ { -+ struct dict_avp_data data = { -+ 625, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Confidentiality-Key", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Integrity-Key AVP - 3GPP TS 29.229 #6.3.28 */ -+ { -+ struct dict_avp_data data = { -+ 626, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Integrity-Key", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Feature-List-ID AVP - 3GPP TS 29.229 #6.3.29 */ -+ { -+ struct dict_avp_data data = { -+ 629, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Feature-List-ID", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Feature-List AVP - 3GPP TS 29.229 #6.3.30 */ -+ { -+ struct dict_avp_data data = { -+ 630, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Feature-List", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* MSISDN AVP - 3GPP TS 29.329 #6.3.2 */ -+ { -+ struct dict_avp_data data = { -+ 701, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MSISDN", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Served-Party-IP-Address AVP - 3GPP TS 32.299 #7.2.187 -+ * The Served-Party-IP-Address AVP (AVP code 848) is of type Address -+ * and holds the IP address of either the calling or called party, -+ * depending on whether the P-CSCF is in touch with the calling or the -+ * called party. This AVP is only provided by the P-CSCF. -+ */ -+ { -+ struct dict_avp_data data = { -+ 848, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Served-Party-IP-Address", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* QoS-Class-Identifier AVP - 3GPP TS 29.212 #5.3.17 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(QoS-Class-Identifier)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_1 = { "QCI_1", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "QCI_2", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "QCI_3", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "QCI_4", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "QCI_5", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "QCI_6", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "QCI_7", { .i32 = 7 }}; -+ struct dict_enumval_data t_8 = { "QCI_8", { .i32 = 8 }}; -+ struct dict_enumval_data t_9 = { "QCI_9", { .i32 = 9 }}; -+ -+ struct dict_avp_data data = { -+ 1028, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "QoS-Class-Identifier", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_8, avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_9, avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* RAT-Type AVP - 3GPP TS 29.212 #5.3.31 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(RAT-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "WLAN", { .u32 = 0 }}; -+ struct dict_enumval_data t_1 = { "VIRTUAL", { .u32 = 1 }}; -+ struct dict_enumval_data t_1000 = { "UTRAN", { .u32 = 1000 }}; -+ struct dict_enumval_data t_1001 = { "GERAN", { .u32 = 1001 }}; -+ struct dict_enumval_data t_1002 = { "GAN", { .u32 = 1002 }}; -+ struct dict_enumval_data t_1003 = { "HSPA_EVOLUTION", { .u32 = 1003 }}; -+ struct dict_enumval_data t_1004 = { "EUTRAN", { .u32 = 1004 }}; -+ struct dict_enumval_data t_2000 = { "CDMA2000_1X", { .u32 = 2000 }}; -+ struct dict_enumval_data t_2001 = { "HRPD", { .u32 = 2001 }}; -+ struct dict_enumval_data t_2002 = { "UMB", { .u32 = 2002 }}; -+ struct dict_enumval_data t_2003 = { "EHRPD", { .u32 = 2003 }}; -+ -+ struct dict_avp_data data = { -+ 1032, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAT-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1000 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1001 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1002 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1003 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1004 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2000 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2001 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2002 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2003 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Priority-Level AVP - 3GPP TS 29.272 #5.3.45 */ -+ { -+ struct dict_avp_data data = { -+ 1046, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Priority-Level", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Pre-emption-Capability AVP - 3GPP TS 29.212 #5.3.46 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Capability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PRE-EMPTION_CAPABILITY_ENABLED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "PRE-EMPTION_CAPABILITY_DISABLED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1047, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Pre-emption-Capability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Pre-emption-Vulnerability AVP - 3GPP TS 29.212 #5.3.47 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Pre-emption-Vulnerability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PRE-EMPTION_VULNERABILITY_ENABLED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "PRE-EMPTION_VULNERABILITY_DISABLED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1048, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Pre-emption-Vulnerability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Allocation-Retention-Priority AVP - 3GPP TS 29.272 #5.3.32 */ -+ { -+ /* -+ -+ Allocation-Retention-Priority ::= < AVP Header: 1034 > -+ { Priority-Level } -+ [ Pre-emption-Capability ] -+ [ Pre-emption-Vulnerability ] -+ -+ The Allocation-Retention-Priority AVP (AVP code 1034) is of type -+ Grouped, and it is used to indicate the priority of allocation and -+ retention, the pre-emption capability and pre-emption vulnerability -+ for the SDF if provided within the QoS-Information-AVP or for the -+ EPS default bearer if provided within the Default-EPS-Bearer-QoS AVP. -+ */ -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1034, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Allocation-Retention-Priority", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Priority-Level", RULE_REQUIRED, -1, 1 } -+ ,{ "Pre-emption-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "Pre-emption-Vulnerability", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* PDP-Address AVP - 3GPP TS 32.299 #6.3.2 */ -+ { -+ /* -+ * The PDP-Address-Prefix-Length AVP needs not be available for IPv6 -+ * typed IP-address prefix length of 64 bits. -+ */ -+ struct dict_avp_data data = { -+ 1227, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Address", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* Subscriber-Status - 3GPP TS 29.272 #7.3.29 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Subscriber-Status)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "SERVICE_GRANTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "OPERATOR_DETERMINED_BARRING", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1424, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscriber-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); -+ CHECK_dict_new( DICT_AVP, &data, NULL, &type); -+ } -+ -+ /* STN-SR AVP - 3GPP TS 29.272 #7.3.33 */ -+ { -+ struct dict_avp_data data = { -+ 1433, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "STN-SR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* ICS-Indicator AVP - 3GPP TS 29.272 #7.3.104 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(ICS-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "FALSE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "TRUE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1491, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ICS-Indicator", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* IMEI AVP - 3GPP TS 29.272 #7.3.4 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1402, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IMEI", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); -+ } -+ -+ /* 3GPP2-MEID AVP - 3GPP TS 29.272 #7.3.6 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1471, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "3GPP2-MEID", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Software Version - 3GPP TS 29.272 #7.3.5 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1403, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Software-Version", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, &avp); -+ } -+ -+ /* Terminal Information AVP - 3GPP TS 29.272 #7.3.3 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1401, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Terminal-Information", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "IMEI", RULE_REQUIRED, 1, 1 } -+ ,{ "3GPP2-MEID", RULE_REQUIRED, 1, 1 } -+ ,{ "Software-Version", RULE_REQUIRED, 1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* ULA-Flags - 3GPP TS 29.272 #7.3.8 */ -+ { -+ struct dict_avp_data data = { -+ 1406, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ULA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Visited-PLMN-Id AVP - 3GPP TS 29.272 #7.3.9 */ -+ { -+ struct dict_avp_data data = { -+ 1407, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Visited-PLMN-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Number-Of-Requested-Vectors - 3GPP TS 29.272 #7.3.14 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1410, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Number-Of-Requested-Vectors", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Re-Synchronization-Info - 3GPP TS 29.272 #7.3.15 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1411, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Re-Synchronization-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Immediate-Response-Preferred - 3GPP TS 29.272 #7.3.16 */ -+ { -+ struct dict_avp_data data = { -+ 1412, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Immediate-Response-Preferred", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Requested-EUTRAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.11 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1408, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Requested-EUTRAN-Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } -+ ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } -+ ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Requested-UTRAN-GERAN-Authentication-Info AVP - 3GPP TS 29.272 #7.3.12 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1409, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Requested-UTRAN-GERAN-Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Number-Of-Requested-Vectors", RULE_OPTIONAL, -1, 1 } -+ ,{ "Immediate-Response-Preferred", RULE_OPTIONAL, -1, 1 } -+ ,{ "Re-Synchronization-Info", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Item-Number AVP - 3GPP TS 29.272 #7.3.23 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1419, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Item-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* RAND AVP - 3GPP TS 29.272 #7.3.53 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1447, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAND", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* XRES AVP - 3GPP TS 29.272 #7.3.54 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1448, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "XRES", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* AUTN AVP - 3GPP TS 29.272 #7.3.55 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1449, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "AUTN", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* SRES AVP - 3GPP TS 29.272 #7.3.60 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1454, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SRES", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* KASME AVP - 3GPP TS 29.272 #7.3.56 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1450, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "KASME", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Kc AVP - 3GPP TS 29.272 #7.3.59 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1453, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Kc", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Collection-Entity AVP - 3GPP TS 29.272 #7.3.96 */ -+ { -+ struct dict_avp_data data = { -+ 1452, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Collection-Entity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); -+ } -+ -+ /* E-UTRAN-Vector - 3GPP TS 29.272 #7.3.18 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1414, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "E-UTRAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "XRES", RULE_REQUIRED, -1, 1 } -+ ,{ "AUTN", RULE_REQUIRED, -1, 1 } -+ ,{ "KASME", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* UTRAN-Vector - 3GPP TS 29.272 #7.3.19 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1415, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "UTRAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "XRES", RULE_REQUIRED, -1, 1 } -+ ,{ "AUTN", RULE_REQUIRED, -1, 1 } -+ ,{ "Confidentiality-Key", RULE_REQUIRED, -1, 1 } -+ ,{ "Integrity-Key", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* GERAN-Vector - 3GPP TS 29.272 #7.3.20 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1416, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GERAN-Vector", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Item-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAND", RULE_REQUIRED, -1, 1 } -+ ,{ "SRES", RULE_REQUIRED, -1, 1 } -+ ,{ "Kc", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Authentication-Info - 3GPP TS 29.272 #7.3.17 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1413, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Authentication-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "E-UTRAN-Vector", RULE_OPTIONAL, -1, -1 } -+ ,{ "UTRAN-Vector", RULE_OPTIONAL, -1, -1 } -+ ,{ "GERAN-Vector", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Network-Access-Mode - 3GPP TS 29.272 #7.3.21 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Network-Access-Mode)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "PACKET_AND_CIRCUIT", { .u32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ONLY_PACKET", { .u32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1417, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Network-Access-Mode", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); -+ CHECK_dict_new( DICT_AVP, &data , type, NULL); -+ } -+ -+ /* HPLMN-ODB AVP - 3GPP TS 29.272 #7.3.22 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1418, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "HPLMN-ODB", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Cancellation-Type - 3GPP TS 29.272 #7.3.24 */ -+ { -+ struct dict_object * type; -+ struct dict_type_data tdata = { AVP_TYPE_UNSIGNED32, "Enumerated(Cancellation-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "MME_UPDATE_PROCEDURE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SGSN_UPDATE_PROCEDURE", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "SUBSCRIPTION_WITHDRAWAL", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "UPDATE_PROCEDURE_IWF", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "INITIAL_ATTACH_PROCEDURE", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1420, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Cancellation-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata, NULL, &type); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3, type, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4, type, NULL); -+ CHECK_dict_new( DICT_AVP, &data, NULL, &type); -+ } -+ -+ /* DSR-Flags AVP - 3GPP TS 29.272 #7.3.25 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1421, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "DSR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* DSA-Flags AVP - 3GPP TS 29.272 #7.3.26 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1422, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "DSA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Context-Identifier AVP - 3GPP TS 29.272 #7.3.27 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1423, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Context-Identifier", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Operator-Determined-Barring AVP - 3GPP TS 29.272 #7.3.30 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1425, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Operator-Determined-Barring", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Access-Restriction-Data AVP - 3GPP TS 29.272 #7.3.31 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1426, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Access-Restriction-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* APN-OI-Replacement AVP - 3GPP TS 29.272 #7.3.32 */ -+ { -+ struct dict_avp_data data = { -+ 1427, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-OI-Replacement", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* All-APN-Configurations-Included-Indicator AVP - 3GPP TS 29.272 #7.3.33 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(All-APN-Configurations-Included-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "All_APN_CONFIGURATIONS_INCLUDED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "MODIFIED/ADDED_APN_CONFIGURATIONS_INCLUDED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1428, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "All-APN-Configurations-Included-Indicator", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDN-Type AVP - 3GPP TS 29.272 #7.3.62 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "IPv4", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "IPv6", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "IPv4v6", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "IPv4_OR_IPv6", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1456, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDN-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* EPS-Subscribed-QoS-Profile AVP - 3GPP TS 29.272 #7.3.37 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1431, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-Subscribed-QoS-Profile", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "QoS-Class-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Allocation-Retention-Priority", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* VPLMN-Dynamic-Address-Allowed AVP - 3GPP TS 29.272 #7.3.38 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-Dynamic-Address-Allowed)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOTALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1432, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "VPLMN-Dynamic-Address-Allowed", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Alert-Reason AVP - 3GPP TS 29.272 #7.3.83 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Alert-Reason)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "UE_PRESENT", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "UE_MEMORY_AVAILABLE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1434, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Alert-Reason", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDN-GW-Allocation-Type AVP - 3GPP TS 29.272 #7.3.44 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PDN-GW-Allocation-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "STATIC", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "DYNAMIC", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1438, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDN-GW-Allocation-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Expiration-Date AVP - 3GPP TS 29.272 #7.3.80 */ -+ { -+ struct dict_avp_data data = { -+ 1439, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Expiration-Date", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); -+ } -+ -+ /* CSG-Id AVP - 3GPP TS 29.272 #7.3.79 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1437, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "CSG-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* AMBR AVP - 3GPP TS 29.272 #7.3.41 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1435, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "AMBR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Max-Requested-Bandwidth-UL", RULE_REQUIRED, -1, 1 } -+ ,{ "Max-Requested-Bandwidth-DL", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Specific-APN-Info AVP - 3GPP TS 29.272 #7.3.82 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1472, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Specific-APN-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_REQUIRED, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SIPTO-Permission AVP - 3GPP TS 29.272 #7.3.135 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(SIPTO-Permission)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "SIPTO_ALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SIPTO_NOTALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1613, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SIPTO-Permission", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* LIPA-Permission AVP - 3GPP TS 29.272 #7.3.133 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(LIPA-Permission)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "LIPA-PROHIBITED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "LIPA-ONLY", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "LIPA-CONDITIONAL", { .i32 = 2 }}; -+ -+ struct dict_avp_data data = { -+ 1618, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LIPA-Permission", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* List-Of-Measurements AVP - 3GPP TS 29.272 #7.3.139 */ -+ { -+ struct dict_avp_data data = { -+ 1625, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "List-Of-Measurements", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Reporting-Trigger AVP - 3GPP TS 29.272 #7.3.140 */ -+ { -+ struct dict_avp_data data = { -+ 1626, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Reporting-Trigger", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Report-Interval AVP - 3GPP TS 29.272 #7.3.141 and TS 32.422 #5.10.5 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Interval)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "250ms", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "500ms", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "1000ms", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "2000ms", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "3000ms", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "4000ms", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "6000ms", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "8000ms", { .i32 = 7 }}; -+ struct dict_enumval_data t_8 = { "12000ms", { .i32 = 8 }}; -+ struct dict_enumval_data t_9 = { "16000ms", { .i32 = 9 }}; -+ struct dict_enumval_data t_10 = { "20000ms", { .i32 = 10 }}; -+ struct dict_enumval_data t_11 = { "24000ms", { .i32 = 11 }}; -+ struct dict_enumval_data t_12 = { "28000ms", { .i32 = 12 }}; -+ struct dict_enumval_data t_13 = { "32000ms", { .i32 = 13 }}; -+ struct dict_enumval_data t_14 = { "64000ms", { .i32 = 14 }}; -+ /* Possible in LTE */ -+ struct dict_enumval_data t_15 = { "120ms", { .i32 = 15 }}; -+ struct dict_enumval_data t_16 = { "240ms", { .i32 = 16 }}; -+ struct dict_enumval_data t_17 = { "480ms", { .i32 = 17 }}; -+ struct dict_enumval_data t_18 = { "640ms", { .i32 = 18 }}; -+ struct dict_enumval_data t_19 = { "1024ms", { .i32 = 19 }}; -+ struct dict_enumval_data t_20 = { "2048ms", { .i32 = 20 }}; -+ struct dict_enumval_data t_21 = { "5120ms", { .i32 = 21 }}; -+ struct dict_enumval_data t_22 = { "10240ms", { .i32 = 22 }}; -+ struct dict_enumval_data t_23 = { "1min", { .i32 = 23 }}; -+ struct dict_enumval_data t_24 = { "6min", { .i32 = 24 }}; -+ struct dict_enumval_data t_25 = { "12min", { .i32 = 25 }}; -+ struct dict_enumval_data t_26 = { "30min", { .i32 = 26 }}; -+ struct dict_enumval_data t_27 = { "60min", { .i32 = 27 }}; -+ -+ struct dict_avp_data data = { -+ 1627, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Report-Interval", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_8 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_9 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_10 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_11 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_12 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_13 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_14 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_15 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_16 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_17 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_18 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_19 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_20 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_21 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_22 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_23 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_24 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_25 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_26 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_27 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Report-Amount AVP - 3GPP TS 29.272 #7.3.142 and TS 32.422 #5.10.6 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Report-Amount)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "1", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "2", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "4", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "8", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "16", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "32", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "64", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "infinity", { .i32 = 7 }}; -+ -+ struct dict_avp_data data = { -+ 1628, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Report-Amount", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Event-Threshold-RSRP AVP - 3GPP TS 29.272 #7.3.143 */ -+ { -+ struct dict_avp_data data = { -+ 1629, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Event-Threshold-RSRP", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Event-Threshold-RSRQ AVP - 3GPP TS 29.272 #7.3.144 */ -+ { -+ struct dict_avp_data data = { -+ 1630, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Event-Threshold-RSRQ", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Logging-Interval AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.8 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Interval)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "1.28", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "2.56", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "5.12", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "10.24", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "20.48", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "30.72", { .i32 = 5 }}; -+ struct dict_enumval_data t_6 = { "40.96", { .i32 = 6 }}; -+ struct dict_enumval_data t_7 = { "61.44", { .i32 = 7 }}; -+ -+ struct dict_avp_data data = { -+ 1631, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Logging-Interval", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_6 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_7 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Logging-Duration AVP - 3GPP TS 29.272 #7.3.145 and TS 32.422 #5.10.9 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Logging-Duration)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "600sec", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "1200sec", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "2400sec", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "3600sec", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "5400sec", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "7200sec", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1632, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Logging-Duration", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* APN-Configuration AVP - 3GPP TS 29.272 #7.3.35 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1430, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-Configuration", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Served-Party-IP-Address", RULE_OPTIONAL, -1, 2 } -+ ,{ "PDN-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "EPS-Subscribed-QoS-Profile", RULE_OPTIONAL, -1, 1 } -+ ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "PDN-GW-Allocation-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } -+ ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } -+ ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* APN-Configuration-Profile AVP - 3GPP TS 29.272 #7.3.34 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1429, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "APN-Configuration-Profile", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "All-APN-Configurations-Included-Indicator", RULE_REQUIRED, -1, 1 } -+ ,{ "APN-Configuration", RULE_REQUIRED, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* CSG-Subscription-Data AVP - 3GPP TS 29.272 #7.3.78 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1436, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "CSG-Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "CSG-Id", RULE_REQUIRED, -1, 1 } -+ ,{ "Expiration-Date", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* RAT-Frequency-Selection-Priority-ID AVP - 3GPP TS 29.272 #7.3.46 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1440, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "RAT-Frequency-Selection-Priority-ID", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IDA-Flags AVP - 3GPP TS 29.272 #7.3.47 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1441, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IDA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* PUA-Flags AVP - 3GPP TS 29.272 #7.3.48 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1442, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PUA-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* NOR-Flags AVP - 3GPP TS 29.272 #7.3.49 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1443, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "NOR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* User-Id AVP - 3GPP TS 29.272 #7.3.50 */ -+ { -+ struct dict_avp_data data = { -+ 1444, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "User-Id", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL); -+ } -+ -+ /* Equipment-Status AVP - 3GPP TS 29.272 #7.3.51 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Equipment-Status)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "WHITELISTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "BLACKLISTED", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "GREYLISTED", { .i32 = 2 }}; -+ -+ struct dict_avp_data data = { -+ 1445, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Equipment-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Regional-Subscription-Zone-Code AVP - 3GPP TS 29.272 #7.3.52 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1446, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Regional-Subscription-Zone-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Roaming-Restricted-Due-To-Unsupported-Feature AVP - 3GPP TS 29.272 #7.3.81 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Roaming-Restricted-Due-To-Unsupported-Feature)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Roaming-Restricted-Due-To-Unsupported-Feature", { .i32 = 0 }}; -+ -+ struct dict_avp_data data = { -+ 1457, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Roaming-Restricted-Due-To-Unsupported-Feature", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Trace-Reference AVP - 3GPP TS 29.272 #7.3.64 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1459, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Reference", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Depth AVP - 3GPP TS 29.272 #7.3.67 and 3GPP TS 32.422 #5.3 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Trace-Depth)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Minimum", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "Medium", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "Maximum", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "MinimumWithoutVendorSpecificExtension", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "MediumWithoutVendorSpecificExtension", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "MaximumWithoutVendorSpecificExtension", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1462, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Depth", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Trace-NE-Type-List AVP - 3GPP TS 29.272 #7.3.68 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1463, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-NE-Type-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.69 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1464, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Interface-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Trace-Event-List AVP - 3GPP TS 29.272 #7.3.70 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1465, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Event-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* OMC-Id AVP - 3GPP TS 29.272 #7.3.71 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1466, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "OMC-Id", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Complete-Data-List-Included-Indicator AVP - 3GPP TS 29.272 #7.3.73 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Complete-Data-List-Included-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "All_PDP_CONTEXTS_INCLUDED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "MODIFIED/ADDED_PDP CONTEXTS_INCLUDED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1468, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Complete-Data-List-Included-Indicator", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PDP-Type AVP - 3GPP TS 29.272 #7.3.75 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1470, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* GMLC-Number AVP - 3GPP TS 29.272 #7.3.85 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1474, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* SS-Code AVP - 3GPP TS 29.272 #7.3.87 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1476, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SS-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* SS-Status AVP - 3GPP TS 29.272 #7.3.88 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1477, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SS-Status", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* Notification-To-UE-User AVP - 3GPP TS 29.272 #7.3.89 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Notification-To-UE-User)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOTIFY_LOCATION_ALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "LOCATION_NOT_ALLOWED", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1478, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Notification-To-UE-User", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* Client-Identity AVP - 3GPP TS 29.272 #7.3.91 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1480, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Client-Identity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* GMLC-Restriction AVP - 3GPP TS 29.272 #7.3.92 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(GMLC-Restriction)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "GMLC_LIST", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "HOME_COUNTRY", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1481, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Restriction", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* PLMN-Client AVP - 3GPP TS 29.272 #7.3.92 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(PLMN-Client)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "BROADCAST_SERVICE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "O_AND_M_HPLMN", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "O_AND_M_VPLMN", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "ANONYMOUS_LOCATION", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "TARGET_UE_SUBSCRIBED_SERVICE", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1482, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PLMN-Client", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* ServiceTypeIdentity AVP - 3GPP TS 29.272 #7.3.95 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1484, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ServiceTypeIdentity", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ } -+ -+ /* QoS-Subscribed - 3GPP TS 29.272 #7.3.77 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1404, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "QoS-Subscribed", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* ULR-Flags - 3GPP TS 29.272 #7.3.7 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1405, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "ULR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Ext-PDP-Type AVP - 3GPP TS 29.272 #7.3.75A */ -+ { -+ struct dict_avp_data data = { -+ 1620, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Ext-PDP-Type", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Ext-PDP-Address AVP - 3GPP TS 29.272 #7.3.129 */ -+ { -+ struct dict_avp_data data = { -+ 1621, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Ext-PDP-Address", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, Address_type, NULL); -+ } -+ -+ /* TS-Code AVP - 3GPP TS 29.272 #7.3.100 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1487, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "TS-Code", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* External-Client AVP - 3GPP TS 29.272 #7.3.90 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1479, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "External-Client", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Client-Identity", RULE_REQUIRED, -1, 1 } -+ ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Service-Type AVP - 3GPP TS 29.272 #7.3.94 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1483, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Service-Type", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "ServiceTypeIdentity", RULE_REQUIRED, -1, 1 } -+ ,{ "GMLC-Restriction", RULE_OPTIONAL, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* LCS-PrivacyException AVP - 3GPP TS 29.272 #7.3.86 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1475, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LCS-PrivacyException", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, -1, 1 } -+ ,{ "SS-Status", RULE_REQUIRED, -1, 1 } -+ ,{ "Notification-To-UE-User", RULE_OPTIONAL, -1, 1 } -+ ,{ "External-Client", RULE_OPTIONAL, -1, -1 } -+ ,{ "PLMN-Client", RULE_OPTIONAL, -1, -1 } -+ ,{ "Service-Type", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MO-LR AVP - 3GPP TS 29.272 #7.3.96 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1485, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MO-LR", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, -1, 1 } -+ ,{ "SS-Status", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* LCS-Info AVP - 3GPP TS 29.272 #7.3.84 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1473, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "LCS-Info", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "GMLC-Number", RULE_OPTIONAL, -1, -1 } -+ ,{ "LCS-PrivacyException", RULE_OPTIONAL, -1, -1 } -+ ,{ "MO-LR", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* PDP-Context AVP - 3GPP TS 29.272 #7.3.74 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1469, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PDP-Context", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "QoS-Subscribed", RULE_REQUIRED, -1, 1 } -+ ,{ "VPLMN-Dynamic-Address-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_REQUIRED, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "Ext-PDP-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "Ext-PDP-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "SIPTO-Permission", RULE_OPTIONAL, -1, 1 } -+ ,{ "LIPA-Permission", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* GPRS-Subscription-Data AVP - 3GPP TS 29.272 #7.3.72 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1467, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GPRS-Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Complete-Data-List-Included-Indicator", RULE_REQUIRED, -1, 1 } -+ ,{ "PDP-Context", RULE_REQUIRED, -1, 50 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Teleservice-List AVP - 3GPP TS 29.272 #7.3.99 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1486, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Teleservice-List", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "TS-Code", RULE_REQUIRED, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Call-Barring-Infor-List AVP - 3GPP TS 29.272 #7.3.101 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1488, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Call-Barring-Infor-List", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "SS-Code", RULE_REQUIRED, 1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1489, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-Number", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IDR-Flags AVP - 3GPP TS 29.272 #7.3.103 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1490, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IDR-Flags", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* IMS-Voice-Over-PS-Sessions-Supported AVP - 3GPP TS 29.272 #7.3.106 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(IMS-Voice-Over-PS-Sessions-Supported)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1492, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "IMS-Voice-Over-PS-Sessions-Supported", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ /* Create the Enumerated type, and then the AVP */ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , avp, NULL); -+ } -+ -+ /* SGSN-Number AVP - 3GPP TS 29.272 #7.3.102 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Homogeneous-Support-of-IMS-Voice-Over-PSSessions)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1493, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Last-UE-Activity-Time AVP - 3GPP TS 29.272 #7.3.108 */ -+ { -+ struct dict_avp_data data = { -+ 1494, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Last-UE-Activity-Time", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Time_type, NULL); -+ } -+ -+ /* E-UTRAN-Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.117 */ -+ { -+ struct dict_avp_data data = { -+ 1602, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "E-UTRAN-Cell-Global-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Tracking-Area-Identity AVP - 3GPP TS 29.272 #7.3.118 */ -+ { -+ struct dict_avp_data data = { -+ 1603, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Tracking-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Cell-Global-Identity AVP - 3GPP TS 29.272 #7.3.119 */ -+ { -+ struct dict_avp_data data = { -+ 1604, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Cell-Global-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Routing-Area-Identity AVP - 3GPP TS 29.272 #7.3.120 */ -+ { -+ struct dict_avp_data data = { -+ 1605, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Routing-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Location-Area-Identity AVP - 3GPP TS 29.272 #7.3.121 */ -+ { -+ struct dict_avp_data data = { -+ 1606, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Location-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Service-Area-Identity AVP - 3GPP TS 29.272 #7.3.122 */ -+ { -+ struct dict_avp_data data = { -+ 1607, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Service-Area-Identity", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Geographical-Information AVP - 3GPP TS 29.272 #7.3.123 */ -+ { -+ struct dict_avp_data data = { -+ 1608, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Geographical-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Geodetic-Information AVP - 3GPP TS 29.272 #7.3.124 */ -+ { -+ struct dict_avp_data data = { -+ 1609, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Geodetic-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, NULL); -+ } -+ -+ /* Current-Location-Retrieved AVP - 3GPP TS 29.272 #7.3.125 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Current-Location-Retrieved)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "ACTIVE-LOCATION-RETRIEVAL", { .i32 = 0 }}; -+ -+ struct dict_avp_data data = { -+ 1610, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Current-Location-Retrieved", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Age-Of-Location-Information AVP - 3GPP TS 29.272 #7.3.126 */ -+ { -+ struct dict_avp_data data = { -+ 1611, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Age-Of-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* UE-SRVCC-Capability AVP - 3GPP TS 29.272 #7.3.130 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(UE-SRVCC-Capability)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "UE-SRVCC-NOT-SUPPORTED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "UE-SRVCC-SUPPORTED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1615, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "UE-SRVCC-Capability", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MPS-Priority AVP - 3GPP TS 29.272 #7.3.131 */ -+ { -+ struct dict_avp_data data = { -+ 1616, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MPS-Priority", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* VPLMN-LIPA-Allowed AVP - 3GPP TS 29.272 #7.3.132 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(VPLMN-LIPA-Allowed)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "LIPA-NOTALLOWED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "LIPA-ALLOWED", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1617, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "VPLMN-LIPA-Allowed", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Subscribed-Periodic-RAU-TAU-Timer AVP - 3GPP TS 29.272 #7.3.134 */ -+ { -+ struct dict_avp_data data = { -+ 1619, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscribed-Periodic-RAU-TAU-Timer", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* Job-Type AVP - 3GPP TS 29.272 #7.3.132 and 3GPP TS 32.422 #5.10.1 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Job-Type)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "Immediate-MDT-Only", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "Logged-MDT-only", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "Trace-Only", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "Immediate-MDT-and-Trace", { .i32 = 3 }}; -+ -+ struct dict_avp_data data = { -+ 1623, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Job-Type", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* Relay-Node-Indicator AVP - 3GPP TS 29.272 #7.3.147 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Relay-Node-Indicator)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "NOT_RELAY_NODE", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "RELAY_NODE", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1633, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Relay-Node-Indicator", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MDT-User-Consent AVP - 3GPP TS 29.272 #7.3.148 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(MDT-User-Consent)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "CONSENT_NOT_GIVEN", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "CONSENT_GIVEN", { .i32 = 1 }}; -+ -+ struct dict_avp_data data = { -+ 1634, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MDT-User-Consent", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* PUR-Flags AVP - 3GPP TS 29.272 #7.3.149 */ -+ { -+ struct dict_avp_data data = { -+ 1635, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "PUR-Flags", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_UNSIGNED32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, NULL); -+ } -+ -+ /* User-State AVP - 3GPP TS 29.272 #7.3.114 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-State)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "DETACHED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "ATTACHED_NOT_REACHABLE_FOR_PAGING", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "ATTACHED_REACHABLE_FOR_PAGING", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "CONNECTED_NOT_REACHABLE_FOR_PAGING", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "CONNECTED_REACHABLE_FOR_PAGING", { .i32 = 4 }}; -+ struct dict_enumval_data t_5 = { "NETWORK_DETERMINED_NOT_REACHABLE", { .i32 = 5 }}; -+ -+ struct dict_avp_data data = { -+ 1499, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_5 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* MME-User-State AVP - 3GPP TS 29.272 #7.3.112 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1497, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MME-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-User-State AVP - 3GPP TS 29.272 #7.3.113 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1498, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* EPS-User-State AVP - 3GPP TS 29.272 #7.3.110 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1495, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-User-State", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "MME-User-State", RULE_OPTIONAL, -1, 1 } -+ ,{ "SGSN-User-State", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MME-Location-Information AVP - 3GPP TS 29.272 #7.3.115 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1600, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MME-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } -+ ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* SGSN-Location-Information AVP - 3GPP TS 29.272 #7.3.116 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1601, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "SGSN-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Cell-Global-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geographical-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Geodetic-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Current-Location-Retrieved", RULE_OPTIONAL, -1, 1 } -+ ,{ "Age-Of-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Area-Scope AVP - 3GPP TS 29.272 #7.3.138 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1624, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Area-Scope", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "E-UTRAN-Cell-Global-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Routing-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Location-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ ,{ "Tracking-Area-Identity", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* MDT-Configuration AVP - 3GPP TS 29.272 #7.3.136 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1622, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "MDT-Configuration", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Job-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Area-Scope", RULE_OPTIONAL, -1, 1 } -+ ,{ "List-Of-Measurements", RULE_OPTIONAL, -1, 1 } -+ ,{ "Reporting-Trigger", RULE_OPTIONAL, -1, 1 } -+ ,{ "Report-Interval", RULE_OPTIONAL, -1, 1 } -+ ,{ "Report-Amount", RULE_OPTIONAL, -1, 1 } -+ ,{ "Event-Threshold-RSRP", RULE_OPTIONAL, -1, 1 } -+ ,{ "Event-Threshold-RSRQ", RULE_OPTIONAL, -1, 1 } -+ ,{ "Logging-Interval", RULE_OPTIONAL, -1, 1 } -+ ,{ "Logging-Duration", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* EPS-Location-Information AVP - 3GPP TS 29.272 #7.3.111 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1496, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "EPS-Location-Information", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "MME-Location-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "SGSN-Location-Information", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Active-APN AVP - 3GPP TS 29.173 #7.3.127 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1612, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Active-APN", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Context-Identifier", RULE_REQUIRED, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Specific-APN-Info", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Error-Diagnostic AVP - 3GPP TS 29.272 #7.3.128 */ -+ { -+ struct dict_object * avp; -+ struct dict_type_data tdata = { AVP_TYPE_INTEGER32, "Enumerated(Error-Diagnostic)" , NULL, NULL, NULL }; -+ struct dict_enumval_data t_0 = { "GPRS_DATA_SUBSCRIBED", { .i32 = 0 }}; -+ struct dict_enumval_data t_1 = { "NO_GPRS_DATA_SUBSCRIBED", { .i32 = 1 }}; -+ struct dict_enumval_data t_2 = { "ODB-ALL-APN", { .i32 = 2 }}; -+ struct dict_enumval_data t_3 = { "ODB-HPLMN-APN", { .i32 = 3 }}; -+ struct dict_enumval_data t_4 = { "ODB-VPLMN-APN", { .i32 = 4 }}; -+ -+ struct dict_avp_data data = { -+ 1614, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Error-Diagnostic", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_INTEGER32 /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_TYPE, &tdata , NULL, &avp); -+ CHECK_dict_new( DICT_ENUMVAL, &t_0 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_1 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_2 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_3 , avp, NULL); -+ CHECK_dict_new( DICT_ENUMVAL, &t_4 , avp, NULL); -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ } -+ -+ /* GMLC-Address AVP - 3GPP TS 29.173 #6.4.7 */ -+ { -+ struct dict_avp_data data = { -+ 2405, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "GMLC-Address", /* Name */ -+ AVP_FLAG_VENDOR, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_OCTETSTRING /* base type of data */ -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , Address_type, NULL); -+ } -+ -+ /* Supported Features AVP - 3GPP TS 29.229 */ -+ { -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 628, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Supported-Features", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Vendor-Id", RULE_REQUIRED, 1, 1 } -+ ,{ "Feature-List-ID", RULE_REQUIRED, 1, 1 } -+ ,{ "Feature-List", RULE_REQUIRED, 1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Trace-Data AVP - 3GPP TS 29.272 #7.3.63 */ -+ { -+ struct dict_object * avp; -+ -+ struct dict_avp_data data = { -+ 1458, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Trace-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Trace-Reference", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-Depth", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-NE-Type-List", RULE_REQUIRED, -1, 1 } -+ ,{ "Trace-Interface-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Event-List", RULE_REQUIRED, -1, 1 } -+ ,{ "OMC-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Collection-Entity", RULE_REQUIRED, -1, 1 } -+ ,{ "MDT-Configuration", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data, NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* Subscription-Data AVP - 3GPP TS 29.272 #7.3.2 */ -+ { -+ /* -+ -+ * The Subscription-Data AVP is of type Grouped. It shall contain -+ * the information related to the user profile relevant for -+ * EPS and GERAN/UTRAN. -+ -+ Subscription-Data ::= -+ [ Subscriber-Status ] -+ [ MSISDN ] -+ [ STN-SR ] -+ [ ICS-Indicator ] -+ [ Network-Access-Mode ] -+ [ Operator-Determined-Barring ] -+ [ HPLMN-ODB ] -+ *10[ Regional-Subscription-Zone-Code] -+ [ Access-Restriction-Data ] -+ [ APN-OI-Replacement ] -+ [ LCS-Info ] -+ [ Teleservice-List ] -+ [ Call-Barring-Infor-List ] -+ [ 3GPP-Charging-Characteristics ] -+ [ AMBR ] -+ [ APN-Configuration-Profile ] -+ [ RAT-Frequency-Selection-Priority-ID ] -+ [ Trace-Data] -+ [ GPRS-Subscription-Data ] -+ *[ CSG-Subscription-Data ] -+ [ Roaming-Restricted-Due-To-Unsupported-Feature ] -+ [ Subscribed-Periodic-RAU-TAU-Timer ] -+ [ MPS-Priority ] -+ [ VPLMN-LIPA-Allowed ] -+ [ Relay-Node-Indicator ] -+ [ MDT-User-Consent ] -+ *[ AVP ] -+ -+ * The AMBR included in this grouped AVP shall include the AMBR -+ * associated to the user’s subscription (UE-AMBR); -+ * Max-Requested-Bandwidth-UL and Max-Requested-Bandwidth-DL within -+ * this AVP shall not both be set to "0". -+ * The APN-OI-Replacement included in this grouped AVP shall include -+ * the UE level APN-OI-Replacement associated to the user’s subscription. -+ */ -+ struct dict_object * avp; -+ struct dict_avp_data data = { -+ 1400, /* Code */ -+ VENDOR_3GPP_Id, /* Vendor */ -+ "Subscription-Data", /* Name */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flags */ -+ AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY, /* Fixed flag values */ -+ AVP_TYPE_GROUPED /* base type of data */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Subscriber-Status", RULE_OPTIONAL, -1, 1 } -+ ,{ "MSISDN", RULE_OPTIONAL, -1, 1 } -+ ,{ "STN-SR", RULE_OPTIONAL, -1, 1 } -+ ,{ "ICS-Indicator", RULE_OPTIONAL, -1, 1 } -+ ,{ "Network-Access-Mode", RULE_OPTIONAL, -1, 1 } -+ ,{ "Operator-Determined-Barring", RULE_OPTIONAL, -1, 1 } -+ ,{ "HPLMN-ODB", RULE_OPTIONAL, -1, 1 } -+ ,{ "Regional-Subscription-Zone-Code", RULE_OPTIONAL, -1, 10 } -+ ,{ "Access-Restriction-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "APN-OI-Replacement", RULE_OPTIONAL, -1, 1 } -+ ,{ "LCS-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Teleservice-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "Call-Barring-Infor-List", RULE_OPTIONAL, -1, 1 } -+ ,{ "3GPP-Charging-Characteristics", RULE_OPTIONAL, -1, 1 } -+ ,{ "AMBR", RULE_OPTIONAL, -1, 1 } -+ ,{ "APN-Configuration-Profile", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Frequency-Selection-Priority-ID", RULE_OPTIONAL, -1, 1 } -+ ,{ "Trace-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "GPRS-Subscription-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "CSG-Subscription-Data", RULE_OPTIONAL, -1, -1 } -+ ,{ "Roaming-Restricted-Due-To-Unsupported-Feature", RULE_OPTIONAL, -1, 1 } -+ ,{ "Subscribed-Periodic-RAU-TAU-Timer", RULE_OPTIONAL, -1, 1 } -+ ,{ "MPS-Priority", RULE_OPTIONAL, -1, 1 } -+ ,{ "VPLMN-LIPA-Allowed", RULE_OPTIONAL, -1, 1 } -+ ,{ "Relay-Node-Indicator", RULE_OPTIONAL, -1, 1 } -+ ,{ "MDT-User-Consent", RULE_OPTIONAL, -1, 1 } -+ }; -+ -+ CHECK_dict_new( DICT_AVP, &data , NULL, &avp); -+ PARSE_loc_rules( rules, avp ); -+ } -+ -+ /* S6A-Update Location Request - 3GPP TS 29.272 #7.2.3 */ -+ { -+ /* -+ -+ The Update-Location-Request (ULR) command, indicated by the -+ Command-Code field set to 316 and the "R" bit set in -+ the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Update-Location-Request> ::= < Diameter Header: 316, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Terminal-Information ] -+ { RAT-Type } -+ { ULR-Flags } -+ [ UE-SRVCC-Capability ] -+ { Visited-PLMN-Id } -+ [ SGSN-Number ] -+ [ Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ] -+ [ GMLC-Address ] -+ *[ Active-APN ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 316, /* Code */ -+ "Update-Location-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Type", RULE_REQUIRED, 1, 1 } -+ ,{ "ULR-Flags", RULE_REQUIRED, 1, 1 } -+ ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-PLMN-Id", RULE_REQUIRED, 1, 1 } -+ ,{ "SGSN-Number", RULE_OPTIONAL, -1, 1 } -+ ,{ "Homogeneous-Support-of-IMS-Voice-Over-PSSessions", RULE_OPTIONAL, -1, 1 } -+ ,{ "GMLC-Address", RULE_OPTIONAL, -1, 1 } -+ ,{ "Active-APN", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Update Location Answer - 3GPP TS 29.272 #7.2.4 */ -+ { -+ /* -+ -+ The Update-Location-Answer (ULA) command, indicated by the -+ Command-Code field set to 316 and the 'R' bit cleared -+ in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Update-Location-Answer> ::= < Diameter Header: 316, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ [ Error-Diagnostic ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ [ ULA-Flags ] -+ [ Subscription-Data ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 316, /* Code */ -+ "Update-Location-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "ULA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Subscription-Data", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Cancel-Location-Request - 3GPP TS 29.272 #7.2.7 */ -+ { -+ /* -+ -+ The Cancel-Location-Request (CLR) command, indicated by the -+ Command-Code field set to 317 and the 'R' bit set in -+ the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Cancel-Location-Request> ::= < Diameter Header: 317, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[Supported-Features ] -+ { Cancellation-Type } -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 317, /* Code */ -+ "Cancel-Location-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Cancellation-Type", RULE_REQUIRED, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Cancel-Location-Answer - 3GPP TS 29.272 #7.2.8 */ -+ { -+ /* -+ -+ The Cancel-Location-Answer (CLA) command, indicated by the -+ Command-Code field set to 317 and the 'R' bit cleared -+ in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Cancel-Location-Answer> ::= < Diameter Header: 317, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 317, /* Code */ -+ "Cancel-Location-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Authentication-Information-Request - 3GPP TS 29.272 #7.2.4 */ -+ { -+ /* -+ -+ The Authentication-Information-Request (AIR) command, indicated by -+ the Command-Code field set to 318 and the 'R' -+ bit set in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Authentication-Information-Request> ::= < Diameter Header: 318, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Requested-EUTRAN-Authentication-Info ] -+ [ Requested-UTRAN-GERAN-Authentication-Info ] -+ { Visited-PLMN-Id } -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 318, /* Code */ -+ "Authentication-Information-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Requested-EUTRAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Requested-UTRAN-GERAN-Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-PLMN-Id", RULE_REQUIRED, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* S6A-Authentication-Information-Answer - 3GPP TS 29.272 #7.2.6 */ -+ { -+ /* -+ -+ The Authentication-Information-Answer (AIA) command, indicated by -+ the Command-Code field set to318 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Authentication-Information-Answer> ::= < Diameter Header: 318, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ [ Error-Diagnostic ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ [ Authentication-Info ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 318, /* Code */ -+ "Authentication-Information-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Error-Diagnostic", RULE_OPTIONAL, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Authentication-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Insert-Subscriber-Data-Request IDR Command - 3GPP TS 29.272 #7.2.9 */ -+ { -+ /* -+ -+ The Insert-Subscriber-Data-Request (IDR) command, indicated by the -+ Command-Code field set to 319 and the 'R' bit set in the Command -+ Flags field, is sent from HSS to MME or SGSN. -+ -+ < Insert-Subscriber-Data-Request> ::= < Diameter Header: 319, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features] -+ { Subscription-Data} -+ [IDR- Flags ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 319, /* Code */ -+ "Insert-Subscriber-Data-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Subscription-Data", RULE_REQUIRED, -1, 1 } -+ ,{ "IDR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Insert-Subscriber-Data-Answer IDA Command - 3GPP TS 29.272 #7.2.10 */ -+ { -+ /* -+ -+ The Insert-Subscriber-Data-Request (IDR) command, indicated by the -+ Command-Code field set to 319 and the 'R' bit set in the Command -+ Flags field, is sent from HSS to MME or SGSN. -+ -+ < Insert-Subscriber-Data-Answer> ::= < Diameter Header: 319, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ IMS-Voice-Over-PS-Sessions-Supported ] -+ [ Last-UE-Activity-Time ] -+ [ RAT-Type ] -+ [ IDA-Flags ] -+ [ EPS-User-State ] -+ [ EPS-Location-Information ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 319, /* Code */ -+ "Insert-Subscriber-Data-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "IMS-Voice-Over-PS-Sessions-Supported", RULE_OPTIONAL, -1, 1 } -+ ,{ "Last-UE-Activity-Time", RULE_OPTIONAL, -1, 1 } -+ ,{ "RAT-Type", RULE_OPTIONAL, -1, 1 } -+ ,{ "IDA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "EPS-User-State", RULE_OPTIONAL, -1, 1 } -+ ,{ "EPS-Location-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Delete-Subscriber-Data-Request (DSR) Command - 3GPP TS 29.272 #7.2.11 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Request (DSR) command, indicated by -+ the Command-Code field set to 320 and the 'R' bit -+ set in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Delete-Subscriber-Data-Request > ::= < Diameter Header: 320, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ { DSR-Flags } -+ *[ Context-Identifier ] -+ [ Trace-Reference ] -+ *[ TS-Code ] -+ *[ SS-Code ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 320, /* Code */ -+ "Delete-SubscriberData-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "DSR-Flags", RULE_REQUIRED, -1, 1 } -+ ,{ "Context-Identifier", RULE_OPTIONAL, -1, -1 } -+ ,{ "Trace-Reference", RULE_OPTIONAL, -1, 1 } -+ ,{ "TS-Code", RULE_OPTIONAL, -1, -1 } -+ ,{ "SS-Code", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Delete-Subscriber-Data-Answer (DSA) Command - 3GPP TS 29.272 #7.2.12 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Answer (DSA) command, indicated by the -+ Command-Code field set to 320 and the 'R' bit -+ cleared in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Delete-Subscriber-Data-Answer> ::= < Diameter Header: 320, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ DSA-Flags ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 320, /* Code */ -+ "Delete-SubscriberData-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "DSA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Purge-UE-Request (PUR) Command - 3GPP TS 29.272 #7.2.13 */ -+ { -+ /* -+ -+ The Delete-SubscriberData-Request (DSR) command, indicated by -+ the Command-Code field set to 320 and the 'R' bit -+ set in the Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Purge-UE-Request> ::= < Diameter Header: 321, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ [ PUR-Flags ] -+ *[ Supported-Features ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 321, /* Code */ -+ "Purge-UE-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "PUR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Purge-UE-Answer (PUA) Command - 3GPP TS 29.272 #7.2.14 */ -+ { -+ /* -+ -+ The Purge-UE-Answer (PUA) command, indicated by the Command-Code -+ field set to 321 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Purge-UE-Answer> ::= < Diameter Header: 321, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ PUA-Flags ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 321, /* Code */ -+ "Purge-UE-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "PUA-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Reset-Request (RSR) Command - 3GPP TS 29.272 #7.2.15 */ -+ { -+ /* -+ -+ The Reset-Request (RSR) command, indicated by the Command-Code -+ field set to 322 and the 'R' bit set in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Reset-Request> ::= < Diameter Header: 322, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ { Destination-Host } -+ { Destination-Realm } -+ *[ Supported-Features ] -+ *[ User-Id ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 322, /* Code */ -+ "Reset-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "User-Id", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Reset-Answer (RSA) Command - 3GPP TS 29.272 #7.2.16 */ -+ { -+ /* -+ -+ The Authentication-Information-Answer (RSA) command, indicated by -+ the Command-Code field set to 322 and the 'R' -+ bit cleared in the Command Flags field, is sent from MME or SGSN to HSS. -+ -+ < Reset-Answer> ::= < Diameter Header: 322, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ *[ Supported-Features ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 322, /* Code */ -+ "Reset-Anwer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Notify-Request (NOR) Command - 3GPP TS 29.272 #7.2.17 */ -+ { -+ /* -+ -+ The Notify-Request (NOR) command, indicated by the Command-Code -+ field set to 323 and the 'R' bit set in the Command Flags field, -+ is sent from MME or SGSN to HSS. -+ -+ < Notify-Request> ::= < Diameter Header: 323, REQ, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { User-Name } -+ *[ Supported-Features ] -+ [ Terminal-Information ] -+ [ MIP6-Agent-Info ] -+ [ Visited-Network-Identifier ] -+ [ Context-Identifier ] -+ [ Service-Selection ] -+ [ Alert-Reason ] -+ [ UE-SRVCC-Capability ] -+ [ NOR-Flags ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 323, /* Code */ -+ "Notify-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Terminal-Information", RULE_OPTIONAL, -1, 1 } -+ ,{ "MIP6-Agent-Info", RULE_OPTIONAL, -1, 1 } -+ ,{ "Visited-Network-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Context-Identifier", RULE_OPTIONAL, -1, 1 } -+ ,{ "Service-Selection", RULE_OPTIONAL, -1, 1 } -+ ,{ "Alert-Reason", RULE_OPTIONAL, -1, 1 } -+ ,{ "UE-SRVCC-Capability", RULE_OPTIONAL, -1, 1 } -+ ,{ "NOR-Flags", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* Notify-Answer (NOA) Command - 3GPP TS 29.272 #7.2.18 */ -+ { -+ /* -+ -+ The Notify-Answer (NOA) command, indicated by the Command-Code -+ field set to 323 and the 'R' bit cleared in the -+ Command Flags field, is sent from HSS to MME or SGSN. -+ -+ < Notify-Answer> ::= < Diameter Header: 323, PXY, 16777251 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ *[ Supported-Features ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 323, /* Code */ -+ "Notify-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Supported-Features", RULE_OPTIONAL, -1, -1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* ME-Identity-Check-Request (ECR) Command - 3GPP TS 29.272 #7.2.19 */ -+ { -+ /* -+ -+ The ME-Identity-Check-Request (ECR) command, indicated by the -+ Command-Code field set to 324 and the 'R' bit set -+ in the Command Flags field, is sent from MME or SGSN to EIR. -+ -+ < ME-Identity-Check-Request > ::= < Diameter Header: 324, REQ, PXY, 16777252 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Destination-Host ] -+ { Destination-Realm } -+ { Terminal-Information } -+ [ User-Name ] -+ *[ AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 324, /* Code */ -+ "ME-Identity-Check-Request", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Destination-Host", RULE_OPTIONAL, -1, 1 } -+ ,{ "Destination-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Terminal-Information", RULE_REQUIRED, -1, 1 } -+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ -+ /* ME-Identity-Check-Answer (ECA) Command - 3GPP TS 29.272 #7.2.20 */ -+ { -+ /* -+ -+ The ME-Identity-Check-Answer (ECA) command, indicated by the -+ Command-Code field set to 324 and the 'R' bit -+ cleared in the Command Flags field, is sent from EIR to MME or SGSN. -+ -+ < ME-Identity-Check-Answer> ::= < Diameter Header: 324, PXY, 16777252 > -+ < Session-Id > -+ [ Vendor-Specific-Application-Id ] -+ [ Result-Code ] -+ [ Experimental-Result ] -+ { Auth-Session-State } -+ { Origin-Host } -+ { Origin-Realm } -+ [ Equipment-Status ] -+ *[ AVP ] -+ *[ Failed-AVP ] -+ *[ Proxy-Info ] -+ *[ Route-Record ] -+ */ -+ struct dict_object * cmd; -+ struct dict_cmd_data data = { -+ 324, /* Code */ -+ "ME-Identity-Check-Answer", /* Name */ -+ CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */ -+ CMD_FLAG_PROXIABLE /* Fixed flag values */ -+ }; -+ -+ struct local_rules_definition rules[] = -+ { -+ { "Session-Id", RULE_FIXED_HEAD, -1, 1 } -+ ,{ "Vendor-Specific-Application-Id", RULE_OPTIONAL, -1, 1 } -+ ,{ "Result-Code", RULE_OPTIONAL, -1, 1 } -+ ,{ "Experimental-Result", RULE_OPTIONAL, -1, 1 } -+ ,{ "Auth-Session-State", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Host", RULE_REQUIRED, -1, 1 } -+ ,{ "Origin-Realm", RULE_REQUIRED, -1, 1 } -+ ,{ "Equipment-Status", RULE_OPTIONAL, -1, 1 } -+ ,{ "User-Name", RULE_OPTIONAL, -1, 1 } -+ ,{ "Failed-AVP", RULE_OPTIONAL, -1, -1 } -+ ,{ "Proxy-Info", RULE_OPTIONAL, -1, -1 } -+ ,{ "Route-Record", RULE_OPTIONAL, -1, -1 } -+ }; -+ -+ CHECK_dict_new( DICT_COMMAND, &data, s6a_dict, &cmd); -+ PARSE_loc_rules( rules, cmd ); -+ } -+ } -+ -+ TRACE_DEBUG(INFO, "Dictionary Extension 'S6A from 3GPP standard v.10.5' initialized"); -+ return 0; -+} -+EXTENSION_ENTRY("dict_s6a", dict_s6a_init, "dict_nas_mipv6"); diff --git a/openair-cn/S6A/freediameter/install_freediameter.sh b/openair-cn/S6A/freediameter/install_freediameter.sh deleted file mode 100755 index 9a9c4899cf..0000000000 --- a/openair-cn/S6A/freediameter/install_freediameter.sh +++ /dev/null @@ -1,113 +0,0 @@ -# !/bin/sh -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ - -CURRENT_PATH=`pwd` - -sudo apt-get install autoconf automake gawk cmake make gcc flex bison libsctp1 libsctp-dev libidn2-0-dev \ -libidn11-dev libmysqlclient-dev libxml2-dev swig python-dev cmake-curses-gui \ -valgrind guile-2.0-dev libgmp-dev libgcrypt11-dev gdb unzip libtasn1-3-dev g++ \ -linux-headers-`uname -r` build-essential -y -source ../../SCRIPTS/utils.bash - -if [ -f install_log.txt ] - then - rm -f install_log.txt -fi - -if [ ! -d /usr/local/src/ ] - then - echo "/usr/local/src/ doesn't exist please create one" - exit -1 -fi - -if [ ! -w /usr/local/src/ ] - then - echo "You don't have permissions to write to /usr/local/src/" -# exit -1 -fi - -cd /usr/local/src/ - -# L.GAUTHIER: GNUTLS 3.1.23 compiles on 14.04 x64 with nettle comming with ubuntu -# see http://www.bauer-power.net/2014/06/how-to-install-gnutls-3123-from-source.html#.VD6LI4VxOPI -# if we have ubuntu 14.10 the default packages are ok - -[ -f /etc/os-release ] && source /etc/os-release -if echo $NAME $VERSION_ID | awk '{version=$2+0; if (version>14 && $1=="Ubuntu") exit 0} {exit 1}' - then - apt-get install -y gnutls-bin nettle-bin nettle-dev libssl-dev -else - echo "Downloading nettle archive" - - rm -rf nettle-2.5.tar.gz nettle-2.5.tar nettle-2.5 2> /dev/null - wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz > install_log.txt - echo "Uncompressing nettle archive" - tar xf nettle-2.5.tar.gz - cd nettle-2.5/ - ./configure --disable-openssl --enable-shared --prefix=/usr > install_log.txt || exit -1 - echo "Compiling nettle" - make -j4 > install_log.txt 2>&1 - make check > install_log.txt - sudo make install > install_log.txt - cd ../ - - echo "Downloading gnutls archive" - rm -rf gnutls-3.1.0.tar.xz gnutls-3.1.0 2> /dev/null - wget ftp://ftp.gnutls.org/gcrypt/gnutls/stable/gnutls-3.1.0.tar.xz > install_log.txt - echo "Uncompressing gnutls archive" - tar xf gnutls-3.1.0.tar.xz - cd gnutls-3.1.0/ - ./configure --prefix=/usr || exit -1 - echo "Compiling gnutls" - make -j2 > install_log.txt 2>&1 - sudo make install > install_log.txt - cd ../ -fi - -echo "Downloading freeDiameter archive" -apt-get install -y mercurial -rm -rf latest.tar.gz freeDiameter -wget http://www.freediameter.net/latest.tar.gz -echo "Uncompressing freeDiameter archive" -tar -xzf latest.tar.gz -cd freeDiameter -hg update 1.1.5 -patch -p1 < $OPENAIRCN_DIR/S6A/freediameter/freediameter-1.1.5.patch > install_log.txt -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ > install_log.txt || exit -1 -echo "Compiling freeDiameter" -sudo make -j2 > install_log.txt 2>&1 -#make help -sudo make test > install_log.txt -sudo make install > install_log.txt - -cd $CURRENT_PATH -./make_certs.sh diff --git a/openair-cn/S6A/freediameter/make_certs.sh b/openair-cn/S6A/freediameter/make_certs.sh deleted file mode 100755 index cf176940d3..0000000000 --- a/openair-cn/S6A/freediameter/make_certs.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.frARG is -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ - -# ARG is REALM -# BY DEFAULT REALM IS "eur" - -DEFAULTREALMVALUE="eur" -REALM=${1:-$DEFAULTREALMVALUE} - -rm -rf demoCA -mkdir demoCA -echo 01 > demoCA/serial -touch demoCA/index.txt - -user=$(whoami) -HOSTNAME=$(hostname -f) - -echo "Creating MME certificate for user '$HOSTNAME'.'$REALM'" - -# CA self certificate -openssl req -new -batch -x509 -days 3650 -nodes -newkey rsa:1024 -out mme.cacert.pem -keyout mme.cakey.pem -subj /CN=$REALM/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM - -openssl genrsa -out mme.key.pem 1024 -openssl req -new -batch -out mme.csr.pem -key mme.key.pem -subj /CN=$HOSTNAME.$REALM/C=FR/ST=PACA/L=Aix/O=Eurecom/OU=CM -openssl ca -cert mme.cacert.pem -keyfile mme.cakey.pem -in mme.csr.pem -out mme.cert.pem -outdir . -batch - -if [ ! -d /usr/local/etc/freeDiameter ] -then - echo "Creating non existing directory: /usr/local/etc/freeDiameter/" - sudo mkdir /usr/local/etc/freeDiameter/ -fi - -sudo cp -uv mme.key.pem mme.cert.pem mme.cacert.pem mme.cakey.pem /usr/local/etc/freeDiameter/ - -# openssl genrsa -out ubuntu.key.pem 1024 -# openssl req -new -batch -x509 -out ubuntu.csr.pem -key ubuntu.key.pem -subj /CN=ubuntu.localdomain/C=FR/ST=BdR/L=Aix/O=fD/OU=Tests -# openssl ca -cert cacert.pem -keyfile cakey.pem -in ubuntu.csr.pem -out ubuntu.cert.pem -outdir . -batch diff --git a/openair-cn/S6A/freediameter/s6a.conf b/openair-cn/S6A/freediameter/s6a.conf deleted file mode 100644 index fbf1fdf345..0000000000 --- a/openair-cn/S6A/freediameter/s6a.conf +++ /dev/null @@ -1,61 +0,0 @@ -# -------- Local --------- - -# Uncomment if the framework cannot resolv it. -Identity = "roux.test.fr"; -Realm = "test.fr"; - -# TLS configuration (see previous section) -TLS_Cred = "/homes/roux/lte-epc/openair3/OPENAIRHSS/conf/roux.cert.pem", -"/homes/roux/lte-epc/openair3/OPENAIRHSS/conf/roux.key.pem"; -TLS_CA = "/homes/roux/lte-epc/openair3/OPENAIRHSS/conf/cacert.pem"; - -# Disable use of TCP protocol (only listen and connect in SCTP) -# Default : TCP enabled -No_TCP; -#No_SCTP; - -# Limit the number of SCTP streams -SCTP_streams = 15; - -NoRelay; -TLS_old_method; -AppServThreads = 1; - -# -------- Extensions --------- - -# Uncomment (and create rtd.conf) to specify routing table for this peer. -#LoadExtension = "rt_default.fdx" : "rtd.conf"; - -# Uncomment (and create acl.conf) to allow incoming connections from other peers. -#LoadExtension = "acl_wl.fdx" : "acl.conf"; - -# Uncomment to display periodic state information -#LoadExtension = "dbg_monitor.fdx"; - -# Uncomment to enable an interactive Python interpreter session. -# (see doc/dbg_interactive.py.sample for more information) -#LoadExtension = "dbg_interactive.fdx"; - -# Load the RFC4005 dictionary objects -#LoadExtension = "dict_nasreq.fdx"; - -LoadExtension = "dict_nas_mipv6.fdx"; -LoadExtension = "dict_s6a.fdx"; - -# Load RFC4072 dictionary objects -#LoadExtension = "dict_eap.fdx"; - -# Load the Diameter EAP server extension (requires diameap.conf) -#LoadExtension = "app_diameap.fdx" : "diameap.conf"; - -# Load the Accounting Server extension (requires app_acct.conf) -#LoadExtension = "app_acct.fdx" : "app_acct.conf"; - -# -------- Peers --------- - -# The framework will actively attempt to establish and maintain a connection -# with the peers listed here. -# For only accepting incoming connections, see the acl_wl.fx extension. - -# ConnectPeer = "hss.test.fr" { ConnectTo = "192.168.56.101"; No_IPv6; No_TCP; Port = 3868; Realm = "test.fr"; }; -# ConnectPeer = "hss.test.fr" { ConnectTo = "192.168.56.1"; No_TLS; }; diff --git a/openair-cn/S6A/s6a_apn_conf.c b/openair-cn/S6A/s6a_apn_conf.c deleted file mode 100644 index cfa84e8777..0000000000 --- a/openair-cn/S6A/s6a_apn_conf.c +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ diff --git a/openair-cn/S6A/s6a_auth_info.c b/openair-cn/S6A/s6a_auth_info.c deleted file mode 100644 index 499eacb4ee..0000000000 --- a/openair-cn/S6A/s6a_auth_info.c +++ /dev/null @@ -1,454 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "mme_config.h" - -#include "assertions.h" -#include "conversions.h" - -#include "intertask_interface.h" -#include "security_types.h" -#include "s6a_defs.h" -#include "s6a_messages.h" -#include "msc.h" - -static -int s6a_parse_rand(struct avp_hdr *hdr, uint8_t *rand_p) -{ - int ret = 0; - DevCheck(hdr->avp_value->os.len == RAND_LENGTH_OCTETS, RAND_LENGTH_OCTETS, - hdr->avp_value->os.len, 0); - DevAssert(rand_p != NULL); - - STRING_TO_RAND(hdr->avp_value->os.data, rand_p, ret); - return ret; -} - -static -int s6a_parse_xres(struct avp_hdr *hdr, res_t *xres) -{ - int ret = 0; - DevCheck(hdr->avp_value->os.len >= XRES_LENGTH_MIN && - hdr->avp_value->os.len <= XRES_LENGTH_MAX, XRES_LENGTH_MIN, - XRES_LENGTH_MAX, hdr->avp_value->os.len); - DevAssert(xres != NULL); - - STRING_TO_XRES(hdr->avp_value->os.data, hdr->avp_value->os.len, xres, ret); - return ret; -} - -static -int s6a_parse_autn(struct avp_hdr *hdr, uint8_t *autn) -{ - int ret = 0; - DevCheck(hdr->avp_value->os.len == AUTN_LENGTH_OCTETS, AUTN_LENGTH_OCTETS, - hdr->avp_value->os.len, 0); - DevAssert(autn != NULL); - - STRING_TO_AUTN(hdr->avp_value->os.data, autn, ret); - return ret; -} - -static -int s6a_parse_kasme(struct avp_hdr *hdr, uint8_t *kasme) -{ - int ret = 0; - DevCheck(hdr->avp_value->os.len == KASME_LENGTH_OCTETS, KASME_LENGTH_OCTETS, - hdr->avp_value->os.len, 0); - DevAssert(kasme != NULL); - - STRING_TO_KASME(hdr->avp_value->os.data, kasme, ret); - return ret; -} - -static inline -int s6a_parse_e_utran_vector(struct avp *avp_vector, eutran_vector_t *vector) -{ - int ret = 0x0f; - struct avp *avp; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_avp_hdr(avp_vector, &hdr)); - - DevCheck(hdr->avp_code == AVP_CODE_E_UTRAN_VECTOR, - hdr->avp_code, AVP_CODE_E_UTRAN_VECTOR, 0); - - CHECK_FCT(fd_msg_browse(avp_vector, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_RAND: - CHECK_FCT(s6a_parse_rand(hdr, vector->rand)); - ret &= ~0x01; - break; - - case AVP_CODE_XRES: - CHECK_FCT(s6a_parse_xres(hdr, &vector->xres)); - ret &= ~0x02; - break; - - case AVP_CODE_AUTN: - CHECK_FCT(s6a_parse_autn(hdr, vector->autn)); - ret &= ~0x04; - break; - - case AVP_CODE_KASME: - CHECK_FCT(s6a_parse_kasme(hdr, vector->kasme)); - ret &= ~0x08; - break; - - default: - /* Unexpected AVP */ - S6A_ERROR("Unexpected AVP with code %d\n", hdr->avp_code); - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - if (ret) { - S6A_ERROR("Missing AVP for E-UTRAN vector: %c%c%c%c\n", - ret & 0x01 ? 'R':'-', ret & 0x02 ? 'X':'-', - ret & 0x04 ? 'A':'-', ret & 0x08 ? 'K':'-'); - return -1; - } - - return 0; -} - -static inline -int s6a_parse_authentication_info_avp(struct avp *avp_auth_info, - authentication_info_t *authentication_info) -{ - struct avp *avp; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_avp_hdr(avp_auth_info, &hdr)); - - DevCheck(hdr->avp_code == AVP_CODE_AUTHENTICATION_INFO, - hdr->avp_code, AVP_CODE_AUTHENTICATION_INFO, 0); - - authentication_info->nb_of_vectors = 0; - - CHECK_FCT(fd_msg_browse(avp_auth_info, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_E_UTRAN_VECTOR: { - DevAssert(authentication_info->nb_of_vectors == 0); - CHECK_FCT(s6a_parse_e_utran_vector(avp, &authentication_info->eutran_vector)); - authentication_info->nb_of_vectors ++; - } - break; - - default: - /* We should only receive E-UTRAN-Vectors */ - S6A_ERROR("Unexpected AVP with code %d\n", hdr->avp_code); - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -int s6a_aia_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act) -{ - struct msg *ans = NULL; - struct msg *qry = NULL; - struct avp *avp = NULL; - struct avp_hdr *hdr = NULL; - - MessageDef *message_p = NULL; - s6a_auth_info_ans_t *s6a_auth_info_ans_p = NULL; - - int skip_auth_res = 0; - - DevAssert(msg != NULL); - - ans = *msg; - /* Retrieve the original query associated with the asnwer */ - CHECK_FCT(fd_msg_answ_getq(ans, &qry)); - - DevAssert(qry != NULL); - - message_p = itti_alloc_new_message(TASK_S6A, S6A_AUTH_INFO_ANS); - s6a_auth_info_ans_p = &message_p->ittiMsg.s6a_auth_info_ans; - - S6A_DEBUG("Received S6A Authentication Information Answer (AIA)\n"); - - CHECK_FCT(fd_msg_search_avp(qry, s6a_fd_cnf.dataobj_s6a_user_name, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - sprintf(s6a_auth_info_ans_p->imsi, "%*s", (int)hdr->avp_value->os.len, - hdr->avp_value->os.data); - } else { - DevMessage("Query has been freed before we received the answer\n"); - } - - /* Retrieve the result-code */ - CHECK_FCT(fd_msg_search_avp(ans, s6a_fd_cnf.dataobj_s6a_result_code, &avp)); - - if (avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - s6a_auth_info_ans_p->result.present = S6A_RESULT_BASE; - s6a_auth_info_ans_p->result.choice.base = hdr->avp_value->u32; - - MSC_LOG_TX_MESSAGE( - MSC_S6A_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S6A_AUTH_INFO_ANS imsi %s %s", - s6a_auth_info_ans_p->imsi, - retcode_2_string(s6a_auth_info_ans_p->result.choice.base)); - - if (hdr->avp_value->u32 != ER_DIAMETER_SUCCESS) { - S6A_ERROR("Got error %u:%s\n", hdr->avp_value->u32, - retcode_2_string(hdr->avp_value->u32)); - goto err; - } else { - S6A_DEBUG("Received S6A Result code %u:%s\n", - s6a_auth_info_ans_p->result.choice.base, - retcode_2_string(s6a_auth_info_ans_p->result.choice.base)); - } - } else { - /* The result-code is not present, may be it is an experimental result - * avp indicating a 3GPP specific failure. - */ - CHECK_FCT(fd_msg_search_avp(ans, s6a_fd_cnf.dataobj_s6a_experimental_result, &avp)); - - if (avp) { - /* The procedure has failed within the HSS. - * NOTE: contrary to result-code, the experimental-result is a grouped - * AVP and requires parsing its childs to get the code back. - */ - s6a_auth_info_ans_p->result.present = S6A_RESULT_EXPERIMENTAL; - s6a_parse_experimental_result(avp, &s6a_auth_info_ans_p->result.choice.experimental); - - MSC_LOG_TX_MESSAGE( - MSC_S6A_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S6A_AUTH_INFO_ANS imsi %s %s", - s6a_auth_info_ans_p->imsi, - experimental_retcode_2_string(s6a_auth_info_ans_p->result.choice.experimental)); - - skip_auth_res = 1; - } else { - /* Neither result-code nor experimental-result is present -> - * totally incorrect behaviour here. - */ - MSC_LOG_TX_MESSAGE_FAILED( - MSC_S6A_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S6A_AUTH_INFO_ANS imsi %s", - s6a_auth_info_ans_p->imsi); - - S6A_ERROR("Experimental-Result and Result-Code are absent: " - "This is not a correct behaviour\n"); - goto err; - } - } - - if (skip_auth_res == 0) { - CHECK_FCT(fd_msg_search_avp(ans, s6a_fd_cnf.dataobj_s6a_authentication_info, &avp)); - - if (avp) { - CHECK_FCT(s6a_parse_authentication_info_avp(avp, &s6a_auth_info_ans_p->auth_info)); - } else { - DevMessage("We requested E-UTRAN vectors with an immediate response...\n"); - } - } - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); -err: - return 0; -} - -int s6a_generate_authentication_info_req(s6a_auth_info_req_t *air_p) -{ - struct avp *avp; - struct msg *msg; - struct session *sess; - - union avp_value value; - - DevAssert(air_p != NULL); - - /* Create the new update location request message */ - CHECK_FCT(fd_msg_new(s6a_fd_cnf.dataobj_s6a_air, 0, &msg)); - - /* Create a new session */ - CHECK_FCT(fd_sess_new(&sess, fd_g_config->cnf_diamid, - fd_g_config->cnf_diamid_len, (os0_t)"apps6a", 6)); - { - os0_t sid; - size_t sidlen; - CHECK_FCT(fd_sess_getsid(sess, &sid, &sidlen)); - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_session_id, 0, &avp)); - value.os.data = sid; - value.os.len = sidlen; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_FIRST_CHILD, avp)); - } - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_auth_session_state, 0, &avp)); - /* No State maintained */ - value.i32 = 1; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - - /* Add Origin_Host & Origin_Realm */ - CHECK_FCT(fd_msg_add_origin(msg, 0)); - - config_read_lock(&mme_config); - - /* Destination Host */ - { - char host[100]; - size_t hostlen; - - memset(host, 0, 100); - strcat(host, mme_config.s6a_config.hss_host_name); - strcat(host, "."); - strcat(host, mme_config.realm); - - hostlen = strlen(host); - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_destination_host, 0, &avp)); - value.os.data = (unsigned char *)host; - value.os.len = hostlen; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - } - /* Destination_Realm */ - { - char *realm = mme_config.realm; - size_t realmlen = strlen(realm); - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_destination_realm, 0, &avp)); - value.os.data = (unsigned char *)realm; - value.os.len = realmlen; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - } - - config_unlock(&mme_config); - - /* Adding the User-Name (IMSI) */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_user_name, 0, &avp)); - value.os.data = (unsigned char *)air_p->imsi; - value.os.len = strlen(air_p->imsi); - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - - /* Adding the visited plmn id */ - { - uint8_t plmn[3] = { 0x00, 0x00, 0x00 }; //{ 0x02, 0xF8, 0x29 }; - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_visited_plmn_id, 0, &avp)); - - - PLMN_T_TO_TBCD(air_p->visited_plmn, - plmn, - mme_config_find_mnc_length(air_p->visited_plmn.MCCdigit1, - air_p->visited_plmn.MCCdigit2, - air_p->visited_plmn.MCCdigit3, - air_p->visited_plmn.MNCdigit1, - air_p->visited_plmn.MNCdigit2, - air_p->visited_plmn.MNCdigit3 - ) - ); - value.os.data = plmn; - value.os.len = 3; - CHECK_FCT(fd_msg_avp_setvalue(avp, &value)); - - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - S6A_DEBUG("%s plmn: %02X%02X%02X\n", - __FUNCTION__, - plmn[0], - plmn[1], - plmn[2]); - S6A_DEBUG("%s visited_plmn: %02X%02X%02X\n", - __FUNCTION__, - value.os.data[0], - value.os.data[1], - value.os.data[2]); - } - /* Adding the requested E-UTRAN authentication info AVP */ - { - struct avp *child_avp; - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_req_eutran_auth_info, 0, &avp)); - - /* Add the number of requested vectors */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_number_of_requested_vectors, 0, &child_avp)); - value.u32 = air_p->nb_of_vectors; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - - /* We want to use the vectors immediately in HSS so we have to add - * the Immediate-Response-Preferred AVP. - * Value of this AVP is not significant. - */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_immediate_response_pref, 0, &child_avp)); - value.u32 = 0; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - - /* Re-synchronization information containing the AUTS computed at USIM */ - if (air_p->re_synchronization) { - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_re_synchronization_info, 0, &child_avp)); - value.os.len = AUTS_LENGTH; - value.os.data = air_p->auts; - CHECK_FCT(fd_msg_avp_setvalue(child_avp, &value)); - CHECK_FCT(fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, child_avp)); - } - - CHECK_FCT(fd_msg_avp_add(msg, MSG_BRW_LAST_CHILD, avp)); - } - CHECK_FCT(fd_msg_send(&msg, NULL, NULL)); - - return 0; -} diff --git a/openair-cn/S6A/s6a_defs.h b/openair-cn/S6A/s6a_defs.h deleted file mode 100644 index c1a138b23e..0000000000 --- a/openair-cn/S6A/s6a_defs.h +++ /dev/null @@ -1,203 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include - -#include "mme_config.h" -#include "queue.h" - -#ifndef S6A_DEFS_H_ -#define S6A_DEFS_H_ - -#ifndef S6A_DEBUG -# define S6A_DEBUG(x, args...) do { fprintf(stdout, "[S6A] [D]"x, ##args); } while(0) -#endif -#ifndef S6A_ERROR -# define S6A_ERROR(x, args...) do { fprintf(stderr, "[S6A] [E]"x, ##args); } while(0) -#endif - -#define VENDOR_3GPP (10415) -#define APP_S6A (16777251) - -/* Errors that fall within the Permanent Failures category shall be used to - * inform the peer that the request has failed, and should not be attempted - * again. The Result-Code AVP values defined in Diameter Base Protocol RFC 3588 - * shall be applied. When one of the result codes defined here is included in a - * response, it shall be inside an Experimental-Result AVP and the Result-Code - * AVP shall be absent. - */ -#define DIAMETER_ERROR_USER_UNKNOWN (5001) -#define DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004) -#define DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420) -#define DIAMETER_ERROR_RAT_NOT_ALLOWED (5421) -#define DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422) -#define DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423) - -/* Result codes that fall within the transient failures category shall be used - * to inform a peer that the request could not be satisfied at the time it was - * received, but may be able to satisfy the request in the future. The - * Result-Code AVP values defined in Diameter Base Protocol RFC 3588 shall be - * applied. When one of the result codes defined here is included in a response, - * it shall be inside an Experimental-Result AVP and the Result-Code AVP shall - * be absent. - */ -#define DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181) - -#define DIAMETER_ERROR_IS_VENDOR(x) \ - ((x == DIAMETER_ERROR_USER_UNKNOWN) || \ - (x == DIAMETER_ERROR_ROAMING_NOT_ALLOWED) || \ - (x == DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION) || \ - (x == DIAMETER_ERROR_RAT_NOT_ALLOWED) || \ - (x == DIAMETER_ERROR_EQUIPMENT_UNKNOWN) || \ - (x == DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE) || \ - (x == DIAMETER_ERROR_UNKOWN_SERVING_NODE)) - -typedef struct { - struct dict_object *dataobj_s6a_vendor; /* s6a vendor object */ - struct dict_object *dataobj_s6a_app; /* s6a application object */ - - /* Commands */ - struct dict_object *dataobj_s6a_air; /* s6a authentication request */ - struct dict_object *dataobj_s6a_aia; /* s6a authentication answer */ - struct dict_object *dataobj_s6a_ulr; /* s6a update location request */ - struct dict_object *dataobj_s6a_ula; /* s6a update location asnwer */ - struct dict_object *dataobj_s6a_pur; /* s6a purge ue request */ - struct dict_object *dataobj_s6a_pua; /* s6a purge ue answer */ - struct dict_object *dataobj_s6a_clr; /* s6a Cancel Location req */ - struct dict_object *dataobj_s6a_cla; /* s6a Cancel Location ans */ - - /* Some standard basic AVPs */ - struct dict_object *dataobj_s6a_destination_host; - struct dict_object *dataobj_s6a_destination_realm; - struct dict_object *dataobj_s6a_user_name; - struct dict_object *dataobj_s6a_session_id; - struct dict_object *dataobj_s6a_auth_session_state; - struct dict_object *dataobj_s6a_result_code; - struct dict_object *dataobj_s6a_experimental_result; - - /* S6A specific AVPs */ - struct dict_object *dataobj_s6a_visited_plmn_id; - struct dict_object *dataobj_s6a_rat_type; - struct dict_object *dataobj_s6a_ulr_flags; - struct dict_object *dataobj_s6a_ula_flags; - struct dict_object *dataobj_s6a_subscription_data; - struct dict_object *dataobj_s6a_req_eutran_auth_info; - struct dict_object *dataobj_s6a_number_of_requested_vectors; - struct dict_object *dataobj_s6a_immediate_response_pref; - struct dict_object *dataobj_s6a_authentication_info; - struct dict_object *dataobj_s6a_re_synchronization_info; - struct dict_object *dataobj_s6a_service_selection; - struct dict_object *dataobj_s6a_ue_srvcc_cap; - - /* Handlers */ - struct disp_hdl *aia_hdl; /* Authentication Information Answer Handle */ - struct disp_hdl *ula_hdl; /* Update Location Answer Handle */ - struct disp_hdl *pua_hdl; /* Purge UE Answer Handle */ - struct disp_hdl *clr_hdl; /* Cancel Location Request Handle */ -} s6a_fd_cnf_t; - -extern s6a_fd_cnf_t s6a_fd_cnf; - -#define ULR_SINGLE_REGISTRATION_IND (1U) -#define ULR_S6A_S6D_INDICATOR (1U << 1) -#define ULR_SKIP_SUBSCRIBER_DATA (1U << 2) -#define ULR_GPRS_SUBSCRIPTION_DATA_IND (1U << 3) -#define ULR_NODE_TYPE_IND (1U << 4) -#define ULR_INITIAL_ATTACH_IND (1U << 5) -#define ULR_PS_LCS_SUPPORTED_BY_UE (1U << 6) - -#define ULA_SEPARATION_IND (1U) - -#define FLAG_IS_SET(x, flag) \ - ((x) & (flag)) - -#define FLAGS_SET(x, flags) \ - ((x) |= (flags)) - -#define FLAGS_CLEAR(x, flags) \ - ((x) = (x) & ~(flags)) - -/* IANA defined IP address type */ -#define IANA_IPV4 (0x1) -#define IANA_IPV6 (0x2) - -#define AVP_CODE_VENDOR_ID (266) -#define AVP_CODE_EXPERIMENTAL_RESULT (297) -#define AVP_CODE_EXPERIMENTAL_RESULT_CODE (298) -#define AVP_CODE_SERVICE_SELECTION (493) -#define AVP_CODE_BANDWIDTH_UL (516) -#define AVP_CODE_BANDWIDTH_DL (515) -#define AVP_CODE_MSISDN (701) -#define AVP_CODE_SERVED_PARTY_IP_ADDRESS (848) -#define AVP_CODE_QCI (1028) -#define AVP_CODE_ALLOCATION_RETENTION_PRIORITY (1034) -#define AVP_CODE_PRIORITY_LEVEL (1046) -#define AVP_CODE_PRE_EMPTION_CAPABILITY (1047) -#define AVP_CODE_PRE_EMPTION_VULNERABILITY (1048) -#define AVP_CODE_SUBSCRIPTION_DATA (1400) -#define AVP_CODE_AUTHENTICATION_INFO (1413) -#define AVP_CODE_E_UTRAN_VECTOR (1414) -#define AVP_CODE_NETWORK_ACCESS_MODE (1417) -#define AVP_CODE_CONTEXT_IDENTIFIER (1423) -#define AVP_CODE_SUBSCRIBER_STATUS (1424) -#define AVP_CODE_ACCESS_RESTRICTION_DATA (1426) -#define AVP_CODE_ALL_APN_CONFIG_INC_IND (1428) -#define AVP_CODE_APN_CONFIGURATION_PROFILE (1429) -#define AVP_CODE_APN_CONFIGURATION (1430) -#define AVP_CODE_EPS_SUBSCRIBED_QOS_PROFILE (1431) -#define AVP_CODE_AMBR (1435) -#define AVP_CODE_RAND (1447) -#define AVP_CODE_XRES (1448) -#define AVP_CODE_AUTN (1449) -#define AVP_CODE_KASME (1450) -#define AVP_CODE_PDN_TYPE (1456) -#define AVP_CODE_SUBSCRIBED_PERIODIC_RAU_TAU_TIMER (1619) - -int s6a_init(const mme_config_t *mme_config); - -int s6a_fd_new_peer(void); - -void s6a_peer_connected_cb(struct peer_info *info, void *arg); - -int s6a_fd_init_dict_objs(void); - -int s6a_parse_subscription_data(struct avp *avp_subscription_data, - subscription_data_t *subscription_data); - -int s6a_parse_experimental_result(struct avp *avp, s6a_experimental_result_t *ptr); -char *experimental_retcode_2_string(uint32_t ret_code); -char *retcode_2_string(uint32_t ret_code); - - -#endif /* S6A_DEFS_H_ */ diff --git a/openair-cn/S6A/s6a_dict.c b/openair-cn/S6A/s6a_dict.c deleted file mode 100644 index 20a43a67e5..0000000000 --- a/openair-cn/S6A/s6a_dict.c +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "intertask_interface.h" -#include "s6a_defs.h" -#include "s6a_messages.h" -#include "assertions.h" - -#define CHECK_FD_FCT(fCT) DevAssert(fCT == 0); - -/*! \file s6a_dict.c - * \brief Initialize s6a dictionnary and setup callbacks for procedures - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -int s6a_fd_init_dict_objs(void) -{ - struct disp_when when; - - vendor_id_t vendor_3gpp = VENDOR_3GPP; - application_id_t app_s6a = APP_S6A; - - /* Pre-loading vendor object */ - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, - DICT_VENDOR, - VENDOR_BY_ID, - (void *)&vendor_3gpp, - &s6a_fd_cnf.dataobj_s6a_vendor, - ENOENT)); - - /* Pre-loading application object */ - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_APPLICATION, - APPLICATION_BY_ID, (void *)&app_s6a, - &s6a_fd_cnf.dataobj_s6a_app, ENOENT)); - - /* Pre-loading commands objects */ - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Authentication-Information-Request", - &s6a_fd_cnf.dataobj_s6a_air, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Authentication-Information-Answer", - &s6a_fd_cnf.dataobj_s6a_aia, ENOENT)); - - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Update-Location-Request", - &s6a_fd_cnf.dataobj_s6a_ulr, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Update-Location-Answer", - &s6a_fd_cnf.dataobj_s6a_ula, ENOENT)); - - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Purge-UE-Request", - &s6a_fd_cnf.dataobj_s6a_pur, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Purge-UE-Answer", - &s6a_fd_cnf.dataobj_s6a_pua, ENOENT)); - - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Cancel-Location-Request", - &s6a_fd_cnf.dataobj_s6a_clr, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_COMMAND, - CMD_BY_NAME, "Cancel-Location-Answer", - &s6a_fd_cnf.dataobj_s6a_cla, ENOENT)); - - /* Pre-loading base avps */ - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Destination-Host", - &s6a_fd_cnf.dataobj_s6a_destination_host, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Destination-Realm", - &s6a_fd_cnf.dataobj_s6a_destination_realm, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "User-Name", - &s6a_fd_cnf.dataobj_s6a_user_name, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Session-Id", - &s6a_fd_cnf.dataobj_s6a_session_id, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Auth-Session-State", - &s6a_fd_cnf.dataobj_s6a_auth_session_state, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Result-Code", - &s6a_fd_cnf.dataobj_s6a_result_code, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME, "Experimental-Result", - &s6a_fd_cnf.dataobj_s6a_experimental_result, ENOENT)); - - /* Pre-loading S6A specifics AVPs */ - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Visited-PLMN-Id", - &s6a_fd_cnf.dataobj_s6a_visited_plmn_id, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "RAT-Type", - &s6a_fd_cnf.dataobj_s6a_rat_type, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", - &s6a_fd_cnf.dataobj_s6a_ulr_flags, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", - &s6a_fd_cnf.dataobj_s6a_ula_flags, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Subscription-Data", - &s6a_fd_cnf.dataobj_s6a_subscription_data, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Requested-EUTRAN-Authentication-Info", - &s6a_fd_cnf.dataobj_s6a_req_eutran_auth_info, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Number-Of-Requested-Vectors", - &s6a_fd_cnf.dataobj_s6a_number_of_requested_vectors, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Immediate-Response-Preferred", - &s6a_fd_cnf.dataobj_s6a_immediate_response_pref, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Authentication-Info", - &s6a_fd_cnf.dataobj_s6a_authentication_info, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Re-Synchronization-Info", - &s6a_fd_cnf.dataobj_s6a_re_synchronization_info, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "Service-Selection", - &s6a_fd_cnf.dataobj_s6a_service_selection, ENOENT)); - CHECK_FD_FCT(fd_dict_search(fd_g_config->cnf_dict, DICT_AVP, - AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", - &s6a_fd_cnf.dataobj_s6a_ue_srvcc_cap, ENOENT)); - - /* Register callbacks */ - memset(&when, 0, sizeof(when)); - - when.command = s6a_fd_cnf.dataobj_s6a_ula; - when.app = s6a_fd_cnf.dataobj_s6a_app; - - /* Register the callback for Update Location Answer S6A Application */ - CHECK_FD_FCT(fd_disp_register(s6a_ula_cb, DISP_HOW_CC, &when, NULL, - &s6a_fd_cnf.ula_hdl)); - DevAssert(s6a_fd_cnf.ula_hdl != NULL); - - when.command = s6a_fd_cnf.dataobj_s6a_aia; - when.app = s6a_fd_cnf.dataobj_s6a_app; - - /* Register the callback for Authentication Information Answer S6A Application */ - CHECK_FD_FCT(fd_disp_register(s6a_aia_cb, DISP_HOW_CC, &when, NULL, - &s6a_fd_cnf.aia_hdl)); - DevAssert(s6a_fd_cnf.aia_hdl != NULL); - - /* Advertise the support for the test application in the peer */ - CHECK_FD_FCT(fd_disp_app_support(s6a_fd_cnf.dataobj_s6a_app, - s6a_fd_cnf.dataobj_s6a_vendor, 1, 0)); - - return 0; -} diff --git a/openair-cn/S6A/s6a_error.c b/openair-cn/S6A/s6a_error.c deleted file mode 100644 index 28bf5dd4e2..0000000000 --- a/openair-cn/S6A/s6a_error.c +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include - -#include "common_types.h" -#include "s6a_defs.h" - -#include "assertions.h" - -int s6a_parse_experimental_result(struct avp *avp, s6a_experimental_result_t *ptr) -{ - struct avp_hdr *hdr; - struct avp *child_avp = NULL; - - if (!avp) { - return EINVAL; - } - - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - DevAssert(hdr->avp_code == AVP_CODE_EXPERIMENTAL_RESULT); - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_FIRST_CHILD, &child_avp, NULL)); - - while(child_avp) { - CHECK_FCT(fd_msg_avp_hdr(child_avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_EXPERIMENTAL_RESULT_CODE: - S6A_ERROR("Got experimental error %u:%s\n", hdr->avp_value->u32, - experimental_retcode_2_string(hdr->avp_value->u32)); - - if (ptr) { - *ptr = (s6a_experimental_result_t)hdr->avp_value->u32; - } - - break; - - case AVP_CODE_VENDOR_ID: - DevCheck(hdr->avp_value->u32 == 10415, hdr->avp_value->u32, - AVP_CODE_VENDOR_ID, 10415); - break; - - default: - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(child_avp, MSG_BRW_NEXT, &child_avp, NULL)); - } - - return 0; -} - -char *experimental_retcode_2_string(uint32_t ret_code) -{ - switch(ret_code) { - /* Experimental-Result-Codes */ - case DIAMETER_ERROR_USER_UNKNOWN: - return "DIAMETER_ERROR_USER_UNKNOWN"; - - case DIAMETER_ERROR_ROAMING_NOT_ALLOWED: - return "DIAMETER_ERROR_ROAMING_NOT_ALLOWED"; - - case DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION: - return "DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION"; - - case DIAMETER_ERROR_RAT_NOT_ALLOWED: - return "DIAMETER_ERROR_RAT_NOT_ALLOWED"; - - case DIAMETER_ERROR_EQUIPMENT_UNKNOWN: - return "DIAMETER_ERROR_EQUIPMENT_UNKNOWN"; - - case DIAMETER_ERROR_UNKOWN_SERVING_NODE: - return "DIAMETER_ERROR_UNKOWN_SERVING_NODE"; - - case DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE: - return "DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE"; - - default: - break; - } - - return "DIAMETER_AVP_UNSUPPORTED"; -} - -char *retcode_2_string(uint32_t ret_code) -{ - switch(ret_code) { - case ER_DIAMETER_SUCCESS: - return "DIAMETER_SUCCESS"; - - case ER_DIAMETER_MISSING_AVP: - return "DIAMETER_MISSING_AVP"; - - case ER_DIAMETER_INVALID_AVP_VALUE: - return "DIAMETER_INVALID_AVP_VALUE"; - - default: - break; - } - - return "DIAMETER_AVP_UNSUPPORTED"; -} diff --git a/openair-cn/S6A/s6a_messages.h b/openair-cn/S6A/s6a_messages.h deleted file mode 100644 index f98b4f827a..0000000000 --- a/openair-cn/S6A/s6a_messages.h +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#ifndef S6A_MESSAGES_H_ -#define S6A_MESSAGES_H_ - -int s6a_generate_update_location(s6a_update_location_req_t *ulr_p); -int s6a_generate_authentication_info_req(s6a_auth_info_req_t *uar_p); - -int s6a_ula_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act); -int s6a_aia_cb(struct msg **msg, struct avp *paramavp, - struct session *sess, void *opaque, - enum disp_action *act); - -int s6a_parse_subscription_data(struct avp *avp_subscription_data, - subscription_data_t *subscription_data); - -#endif /* S6A_MESSAGES_H_ */ diff --git a/openair-cn/S6A/s6a_peer.c b/openair-cn/S6A/s6a_peer.c deleted file mode 100644 index c611cb6981..0000000000 --- a/openair-cn/S6A/s6a_peer.c +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file s6a_peers.c - * \brief Add a new entity to the list of peers to connect - * \author Sebastien ROUX - * \date 2013 - * \version 0.1 - */ - -#include -#include - -#include "common_types.h" -#include "intertask_interface.h" -#include "s6a_defs.h" -#include "s6a_messages.h" - -#include "assertions.h" - -void s6a_peer_connected_cb(struct peer_info *info, void *arg) -{ - if (info == NULL) { - S6A_ERROR("Failed to connect to HSS entity\n"); - } else { - MessageDef *message_p; - - S6A_DEBUG("Peer %*s is now connected...\n", - (int)info->pi_diamidlen, info->pi_diamid); - - /* Inform S1AP that connection to HSS is established */ - message_p = itti_alloc_new_message(TASK_S6A, ACTIVATE_MESSAGE); - - itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); - - } - - /* For test */ -#if 0 - s6a_auth_info_req_t s6a_air; - - memset(&s6a_air, 0, sizeof(s6a_auth_info_req_t)); - sprintf(s6a_air.imsi, "%14llu", 20834123456789ULL); - - s6a_air.nb_of_vectors = 1; - s6a_air.visited_plmn.MCCdigit2 = 0, - s6a_air.visited_plmn.MCCdigit1 = 8, - s6a_air.visited_plmn.MCCdigit3 = 2, - s6a_air.visited_plmn.MNCdigit1 = 0, - s6a_air.visited_plmn.MNCdigit2 = 3, - s6a_air.visited_plmn.MNCdigit3 = 4, - - s6a_generate_authentication_info_req(&s6a_air); - // #else - // s6a_update_location_req_t s6a_ulr; - // - // memset(&s6a_ulr, 0, sizeof(s6a_update_location_req_t)); - // - // sprintf(s6a_ulr.imsi, "%14llu", 20834123456789ULL); - // s6a_ulr.initial_attach = INITIAL_ATTACH; - // s6a_ulr.rat_type = RAT_EUTRAN; - // s6a_generate_update_location(&s6a_ulr); -#endif -} - -int s6a_fd_new_peer(void) -{ - char host_name[100]; - size_t host_name_len; - char *hss_name; - - int ret = 0; - struct peer_info info; - - memset(&info, 0, sizeof(struct peer_info)); - - if (config_read_lock(&mme_config) != 0) { - S6A_ERROR("Failed to lock configuration for reading\n"); - return -1; - } - - if(fd_g_config->cnf_diamid != NULL) { - free(fd_g_config->cnf_diamid); - fd_g_config->cnf_diamid_len = 0; - } - - DevAssert(gethostname(host_name, 100) == 0); - - host_name_len = strlen(host_name); - host_name[host_name_len] = '.'; - host_name[host_name_len+1] = '\0'; - - strcat(host_name, mme_config.realm); - fd_g_config->cnf_diamid = strdup(host_name); - fd_g_config->cnf_diamid_len = strlen(fd_g_config->cnf_diamid); - - S6A_DEBUG("Diameter identity of MME: %s with length: %zd\n", - fd_g_config->cnf_diamid, fd_g_config->cnf_diamid_len); - - hss_name = calloc(1,100); - strcat(hss_name, mme_config.s6a_config.hss_host_name); - strcat(hss_name, "."); - strcat(hss_name, mme_config.realm); - info.pi_diamid = hss_name; - info.pi_diamidlen = strlen(info.pi_diamid); - - S6A_DEBUG("Diameter identity of HSS: %s with length: %zd\n", - info.pi_diamid, info.pi_diamidlen); - - info.config.pic_flags.sec = PI_SEC_NONE; - info.config.pic_flags.pro4 = PI_P4_SCTP; - - info.config.pic_flags.persist = PI_PRST_NONE; - - CHECK_FCT(fd_peer_add(&info, "", s6a_peer_connected_cb, NULL)); - - if (config_unlock(&mme_config) != 0) { - S6A_ERROR("Failed to unlock configuration\n"); - return -1; - } - - return ret; -} diff --git a/openair-cn/S6A/s6a_subscription_data.c b/openair-cn/S6A/s6a_subscription_data.c deleted file mode 100644 index 75aed74b69..0000000000 --- a/openair-cn/S6A/s6a_subscription_data.c +++ /dev/null @@ -1,446 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include - -#include "common_types.h" -#include "s6a_defs.h" - -#include "assertions.h" - -static inline -int s6a_parse_subscriber_status(struct avp_hdr *hdr_sub_status, - subscriber_status_t *sub_status) -{ - DevCheck(hdr_sub_status->avp_value->u32 < SS_MAX, - hdr_sub_status->avp_value->u32, SS_MAX, 0); - - *sub_status = hdr_sub_status->avp_value->u32; - - return 0; -} - -static inline -int s6a_parse_msisdn(struct avp_hdr *hdr_msisdn, char *msisdn, uint8_t *length) -{ - int ret; - - DevCheck(hdr_msisdn->avp_value->os.len <= MSISDN_LENGTH, - hdr_msisdn->avp_value->os.len, MSISDN_LENGTH, 0); - - if (hdr_msisdn->avp_value->os.len == 0) - return 0; - - ret = sprintf(msisdn, "%*s", (int)hdr_msisdn->avp_value->os.len, - hdr_msisdn->avp_value->os.data); - - *length = ret; - - return 0; -} - -static inline -int s6a_parse_network_access_mode(struct avp_hdr *hdr_network_am, - network_access_mode_t *access_mode) -{ - DevCheck(hdr_network_am->avp_value->u32 < NAM_MAX && - hdr_network_am->avp_value->u32 != NAM_RESERVED, - hdr_network_am->avp_value->u32, NAM_MAX, NAM_RESERVED); - - *access_mode = hdr_network_am->avp_value->u32; - - return 0; -} - -static inline -int s6a_parse_access_restriction_data(struct avp_hdr *hdr_access_restriction, - access_restriction_t *access_restriction) -{ - DevCheck(hdr_access_restriction->avp_value->u32 < ARD_MAX, - hdr_access_restriction->avp_value->u32, ARD_MAX, 0); - *access_restriction = hdr_access_restriction->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_bitrate(struct avp_hdr *hdr_bitrate, bitrate_t *bitrate) -{ - *bitrate = hdr_bitrate->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_ambr(struct avp *avp_ambr, ambr_t *ambr) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_browse(avp_ambr, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - if (!avp) { - /* Child avps for ambr are mandatory */ - return -1; - } - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_BANDWIDTH_UL: - CHECK_FCT(s6a_parse_bitrate(hdr, &ambr->br_ul)); - break; - - case AVP_CODE_BANDWIDTH_DL: - CHECK_FCT(s6a_parse_bitrate(hdr, &ambr->br_dl)); - break; - - default: - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -static inline -int s6a_parse_all_apn_conf_inc_ind(struct avp_hdr *hdr, all_apn_conf_ind_t *ptr) -{ - DevCheck(hdr->avp_value->u32 < ALL_APN_MAX, - hdr->avp_value->u32, ALL_APN_MAX, 0); - *ptr = hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_pdn_type(struct avp_hdr *hdr, pdn_type_t *pdn_type) -{ - DevCheck(hdr->avp_value->u32 < IP_MAX, - hdr->avp_value->u32, IP_MAX, 0); - *pdn_type = hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_service_selection(struct avp_hdr *hdr_service_selection, - char *service_selection, int *length) -{ - DevCheck(hdr_service_selection->avp_value->os.len <= APN_MAX_LENGTH, - hdr_service_selection->avp_value->os.len, APN_MAX_LENGTH, 0); - *length = sprintf(service_selection, "%*s", - (int)hdr_service_selection->avp_value->os.len, - hdr_service_selection->avp_value->os.data); - return 0; -} - -static inline -int s6a_parse_qci(struct avp_hdr *hdr, qci_t *qci) -{ - DevCheck(hdr->avp_value->u32 < QCI_MAX, - hdr->avp_value->u32, QCI_MAX, 0); - *qci = hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_priority_level(struct avp_hdr *hdr, priority_level_t *priority_level) -{ - DevCheck(hdr->avp_value->u32 <= PRIORITY_LEVEL_MAX && - hdr->avp_value->u32 >= PRIORITY_LEVEL_MIN, hdr->avp_value->u32, - PRIORITY_LEVEL_MAX, PRIORITY_LEVEL_MIN); - *priority_level = (priority_level_t)hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_pre_emp_capability(struct avp_hdr *hdr, pre_emp_capability_t *pre_emp_capability) -{ - DevCheck(hdr->avp_value->u32 < PRE_EMPTION_CAPABILITY_MAX, hdr->avp_value->u32, - PRE_EMPTION_CAPABILITY_MAX, 0); - *pre_emp_capability = hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_pre_emp_vulnerability(struct avp_hdr *hdr, pre_emp_vulnerability_t *pre_emp_vulnerability) -{ - DevCheck(hdr->avp_value->u32 < PRE_EMPTION_VULNERABILITY_MAX, hdr->avp_value->u32, - PRE_EMPTION_VULNERABILITY_MAX, 0); - *pre_emp_vulnerability = hdr->avp_value->u32; - return 0; -} - -static inline -int s6a_parse_allocation_retention_priority(struct avp *avp_arp, - allocation_retention_priority_t *ptr) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - /* If the Pre-emption-Capability AVP is not present in the - * Allocation-Retention-Priority AVP, the default value shall be - * PRE-EMPTION_CAPABILITY_DISABLED (1). - */ - ptr->pre_emp_capability = PRE_EMPTION_CAPABILITY_DISABLED; - - /* If the Pre-emption-Vulnerability AVP is not present in the - * Allocation-Retention-Priority AVP, the default value shall be - * PRE-EMPTION_VULNERABILITY_ENABLED (0). - */ - ptr->pre_emp_vulnerability = PRE_EMPTION_VULNERABILITY_ENABLED; - - CHECK_FCT(fd_msg_browse(avp_arp, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_PRIORITY_LEVEL: - CHECK_FCT(s6a_parse_priority_level(hdr, &ptr->priority_level)); - break; - - case AVP_CODE_PRE_EMPTION_CAPABILITY: - CHECK_FCT(s6a_parse_pre_emp_capability(hdr, &ptr->pre_emp_capability)); - break; - - case AVP_CODE_PRE_EMPTION_VULNERABILITY: - CHECK_FCT(s6a_parse_pre_emp_vulnerability(hdr, &ptr->pre_emp_vulnerability)); - break; - - default: - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -static inline -int s6a_parse_eps_subscribed_qos_profile(struct avp *avp_qos, - eps_subscribed_qos_profile_t *ptr) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_browse(avp_qos, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_QCI: - CHECK_FCT(s6a_parse_qci(hdr, &ptr->qci)); - break; - - case AVP_CODE_ALLOCATION_RETENTION_PRIORITY: - CHECK_FCT(s6a_parse_allocation_retention_priority(avp, &ptr->allocation_retention_priority)); - break; - - default: - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -static inline -int s6a_parse_ip_address(struct avp_hdr *hdr, ip_address_t *ip_address) -{ - uint16_t ip_type; - - DevCheck(hdr->avp_value->os.len >= 2, hdr->avp_value->os.len, 2, 0); - - ip_type = (hdr->avp_value->os.data[0] << 8) | (hdr->avp_value->os.data[1]); - - if (ip_type == IANA_IPV4) { - /* This is an IPv4 address */ - ip_address->pdn_type = IPv4; - DevCheck(hdr->avp_value->os.len == 6, hdr->avp_value->os.len, 6, ip_type); - memcpy(ip_address->address.ipv4_address, &hdr->avp_value->os.data[2], 4); - } else if (ip_type == IANA_IPV6) { - /* This is an IPv6 address */ - ip_address->pdn_type = IPv6; - DevCheck(hdr->avp_value->os.len == 18, hdr->avp_value->os.len, 18, ip_type); - memcpy(ip_address->address.ipv6_address, &hdr->avp_value->os.data[2], 16); - } else { - /* unhandled case... */ - return -1; - } - - return 0; -} - -static inline -int s6a_parse_apn_configuration(struct avp *avp_apn_conf_prof, apn_configuration_t *apn_config) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_browse(avp_apn_conf_prof, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_CONTEXT_IDENTIFIER: - apn_config->context_identifier = hdr->avp_value->u32; - break; - - case AVP_CODE_SERVED_PARTY_IP_ADDRESS: - if (apn_config->nb_ip_address == 2) { - DevMessage("Only two IP addresses can be provided"); - } - - CHECK_FCT(s6a_parse_ip_address(hdr, &apn_config->ip_address[apn_config->nb_ip_address])); - apn_config->nb_ip_address++; - break; - - case AVP_CODE_PDN_TYPE: - CHECK_FCT(s6a_parse_pdn_type(hdr, &apn_config->pdn_type)); - break; - - case AVP_CODE_SERVICE_SELECTION: - CHECK_FCT(s6a_parse_service_selection(hdr, apn_config->service_selection, - &apn_config->service_selection_length)); - break; - - case AVP_CODE_EPS_SUBSCRIBED_QOS_PROFILE: - CHECK_FCT(s6a_parse_eps_subscribed_qos_profile(avp, &apn_config->subscribed_qos)); - break; - - case AVP_CODE_AMBR: - CHECK_FCT(s6a_parse_ambr(avp, &apn_config->ambr)); - break; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -static inline -int s6a_parse_apn_configuration_profile(struct avp *avp_apn_conf_prof, - apn_config_profile_t *apn_config_profile) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_browse(avp_apn_conf_prof, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_CONTEXT_IDENTIFIER: - apn_config_profile->context_identifier = hdr->avp_value->u32; - break; - - case AVP_CODE_ALL_APN_CONFIG_INC_IND: - CHECK_FCT(s6a_parse_all_apn_conf_inc_ind(hdr, &apn_config_profile->all_apn_conf_ind)); - break; - - case AVP_CODE_APN_CONFIGURATION: { - DevCheck(apn_config_profile->nb_apns < MAX_APN_PER_UE, - apn_config_profile->nb_apns, MAX_APN_PER_UE, 0); - CHECK_FCT(s6a_parse_apn_configuration( - avp, &apn_config_profile->apn_configuration[apn_config_profile->nb_apns])); - apn_config_profile->nb_apns++; - } - break; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} - -int s6a_parse_subscription_data(struct avp *avp_subscription_data, - subscription_data_t *subscription_data) -{ - struct avp *avp = NULL; - struct avp_hdr *hdr; - - CHECK_FCT(fd_msg_browse(avp_subscription_data, MSG_BRW_FIRST_CHILD, &avp, NULL)); - - while(avp) { - CHECK_FCT(fd_msg_avp_hdr(avp, &hdr)); - - switch(hdr->avp_code) { - case AVP_CODE_SUBSCRIBER_STATUS: - CHECK_FCT(s6a_parse_subscriber_status(hdr, &subscription_data->subscriber_status)); - break; - - case AVP_CODE_MSISDN: - CHECK_FCT(s6a_parse_msisdn(hdr, subscription_data->msisdn, - &subscription_data->msisdn_length)); - break; - - case AVP_CODE_NETWORK_ACCESS_MODE: - CHECK_FCT(s6a_parse_network_access_mode(hdr, &subscription_data->access_mode)); - break; - - case AVP_CODE_ACCESS_RESTRICTION_DATA: - CHECK_FCT(s6a_parse_access_restriction_data(hdr, &subscription_data->access_restriction)); - break; - - case AVP_CODE_AMBR: - CHECK_FCT(s6a_parse_ambr(avp, &subscription_data->subscribed_ambr)); - break; - - case AVP_CODE_APN_CONFIGURATION_PROFILE: - CHECK_FCT(s6a_parse_apn_configuration_profile(avp, &subscription_data->apn_config_profile)); - break; - - case AVP_CODE_SUBSCRIBED_PERIODIC_RAU_TAU_TIMER: - subscription_data->rau_tau_timer = hdr->avp_value->u32; - break; - - default: - return -1; - } - - /* Go to next AVP in the grouped AVP */ - CHECK_FCT(fd_msg_browse(avp, MSG_BRW_NEXT, &avp, NULL)); - } - - return 0; -} diff --git a/openair-cn/S6A/s6a_task.c b/openair-cn/S6A/s6a_task.c deleted file mode 100644 index 2ee79ac3ab..0000000000 --- a/openair-cn/S6A/s6a_task.c +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include -#include -#include -#include - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include - -#include "intertask_interface.h" -#include "s6a_defs.h" -#include "s6a_messages.h" - -#include "assertions.h" -#include "msc.h" - -#if defined(DISABLE_USE_HSS) -# error "Disabling HSS support is currently not supported \ -Reconfigure with --enable-hss option to disable this error" -#endif - -static int gnutls_debug = 0; -struct session_handler *ts_sess_hdl; - -s6a_fd_cnf_t s6a_fd_cnf; - -void *s6a_thread(void *args); -static void fd_gnutls_debug(int level, const char *str); - -static void fd_gnutls_debug(int level, const char *str) -{ - S6A_DEBUG("[GTLS] %s", str); -} - -void *s6a_thread(void *args) -{ - itti_mark_task_ready(TASK_S6A); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p = NULL; - /* Trying to fetch a message from the message queue. - * If the queue is empty, this function will block till a - * message is sent to the task. - */ - itti_receive_msg(TASK_S6A, &received_message_p); - DevAssert(received_message_p != NULL); - - switch (ITTI_MSG_ID(received_message_p)) - { - case S6A_UPDATE_LOCATION_REQ: { - s6a_generate_update_location(&received_message_p->ittiMsg.s6a_update_location_req); - } break; - case S6A_AUTH_INFO_REQ: { - s6a_generate_authentication_info_req(&received_message_p->ittiMsg.s6a_auth_info_req); - } break; - case TERMINATE_MESSAGE: { - itti_exit_task(); - } break; - default: { - S6A_DEBUG("Unkwnon message ID %d: %s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } break; - } - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - return NULL; -} - -int s6a_init(const mme_config_t *mme_config_p) -{ - int ret; - - S6A_DEBUG("Initializing S6a interface\n"); - - memset(&s6a_fd_cnf, 0, sizeof(s6a_fd_cnf_t)); - - /*if (strcmp(fd_core_version(), FREE_DIAMETER_MINIMUM_VERSION) != 0) { - S6A_ERROR("Freediameter version %s found, expecting %s\n", fd_core_version(), - FREE_DIAMETER_MINIMUM_VERSION); - return -1; - } else { - S6A_DEBUG("Freediameter version %s\n", fd_core_version()); - }*/ - - - /* Initializing freeDiameter core */ - S6A_DEBUG("Initializing freeDiameter core...\n"); - ret = fd_core_initialize(); - if (ret != 0) { - S6A_ERROR("An error occurred during freeDiameter core library initialization: %d\n",ret); - return ret; - } else { - S6A_DEBUG("Initializing freeDiameter core done\n"); - } - - - - S6A_DEBUG("Default ext path: %s\n", DEFAULT_EXTENSIONS_PATH); - - ret = fd_core_parseconf(mme_config_p->s6a_config.conf_file); - if (ret != 0) { - S6A_ERROR("An error occurred during fd_core_parseconf file : %s.\n", mme_config_p->s6a_config.conf_file); - return ret; - } else { - S6A_DEBUG("fd_core_parseconf done\n"); - } - - /* Set gnutls debug level ? */ - if (gnutls_debug) { - gnutls_global_set_log_function((gnutls_log_func)fd_gnutls_debug); - gnutls_global_set_log_level (gnutls_debug); - S6A_DEBUG("Enabled GNUTLS debug at level %d", gnutls_debug); - } - - /* Starting freeDiameter core */ - ret = fd_core_start(); - if (ret != 0) { - S6A_ERROR("An error occurred during freeDiameter core library start\n"); - return ret; - } else { - S6A_DEBUG("fd_core_start done\n"); - } - - - - ret = fd_core_waitstartcomplete(); - if (ret != 0) { - S6A_ERROR("An error occurred during fd_core_waitstartcomplete.\n"); - return ret; - } else { - S6A_DEBUG("fd_core_waitstartcomplete done\n"); - } - - ret = s6a_fd_init_dict_objs(); - if (ret != 0) { - S6A_ERROR("An error occurred during s6a_fd_init_dict_objs.\n"); - return ret; - } else { - S6A_DEBUG("s6a_fd_init_dict_objs done\n"); - } - - /* Trying to connect to peers */ - CHECK_FCT(s6a_fd_new_peer()); - - if (itti_create_task(TASK_S6A, &s6a_thread, NULL) < 0) { - S6A_ERROR("s6a create task\n"); - return -1; - } - S6A_DEBUG("Initializing S6a interface: DONE\n"); - - return 0; -} diff --git a/openair-cn/S6A/s6a_up_loc.c b/openair-cn/S6A/s6a_up_loc.c deleted file mode 100644 index d1d2931d70..0000000000 --- a/openair-cn/S6A/s6a_up_loc.c +++ /dev/null @@ -1,317 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -#include -#include - -#include "mme_config.h" - -#include "assertions.h" -#include "conversions.h" - -#include "intertask_interface.h" -#include "s6a_defs.h" -#include "s6a_messages.h" -#include "msc.h" - - -int s6a_ula_cb( - struct msg **msg_pP, - struct avp *paramavp_pP, - struct session *sess_pP, - void *opaque_pP, - enum disp_action *act_pP) -{ - struct msg *ans_p = NULL; - struct msg *qry_p = NULL; - struct avp *avp_p = NULL; - struct avp_hdr *hdr_p = NULL; - MessageDef *message_p = NULL; - s6a_update_location_ans_t *s6a_update_location_ans_p = NULL; - - DevAssert(msg_pP != NULL); - - ans_p = *msg_pP; - /* Retrieve the original query associated with the asnwer */ - CHECK_FCT(fd_msg_answ_getq(ans_p, &qry_p)); - - DevAssert(qry_p != NULL); - - message_p = itti_alloc_new_message(TASK_S6A, S6A_UPDATE_LOCATION_ANS); - - s6a_update_location_ans_p = &message_p->ittiMsg.s6a_update_location_ans; - - CHECK_FCT(fd_msg_search_avp(qry_p, s6a_fd_cnf.dataobj_s6a_user_name, &avp_p)); - - if (avp_p) { - CHECK_FCT(fd_msg_avp_hdr(avp_p, &hdr_p)); - memcpy(s6a_update_location_ans_p->imsi, hdr_p->avp_value->os.data, hdr_p->avp_value->os.len); - s6a_update_location_ans_p->imsi[hdr_p->avp_value->os.len] = '\0'; - s6a_update_location_ans_p->imsi_length = hdr_p->avp_value->os.len; - S6A_DEBUG("Received s6a ula for imsi=%*s\n", - (int)hdr_p->avp_value->os.len, - hdr_p->avp_value->os.data); - } else { - DevMessage("Query has been freed before we received the answer\n"); - } - - /* Retrieve the result-code */ - CHECK_FCT(fd_msg_search_avp(ans_p, s6a_fd_cnf.dataobj_s6a_result_code, &avp_p)); - - if (avp_p) { - CHECK_FCT(fd_msg_avp_hdr(avp_p, &hdr_p)); - - s6a_update_location_ans_p->result.present = S6A_RESULT_BASE; - s6a_update_location_ans_p->result.choice.base = hdr_p->avp_value->u32; - - MSC_LOG_TX_MESSAGE( - MSC_S6A_MME, - MSC_MMEAPP_MME, - NULL,0, - "0 S6A_UPDATE_LOCATION_ANS imsi %SCNu64 %s", - s6a_update_location_ans_p->imsi, - retcode_2_string(hdr_p->avp_value->u32)); - - if (hdr_p->avp_value->u32 != ER_DIAMETER_SUCCESS) { - S6A_ERROR("Got error %u:%s\n", hdr_p->avp_value->u32, - retcode_2_string(hdr_p->avp_value->u32)); - goto err; - } - } else { - /* The result-code is not present, may be it is an experimental result - * avp_p indicating a 3GPP specific failure. - */ - CHECK_FCT(fd_msg_search_avp(ans_p, s6a_fd_cnf.dataobj_s6a_experimental_result, &avp_p)); - - if (avp_p) { - /* The procedure has failed within the HSS. - * NOTE: contrary to result-code, the experimental-result is a grouped - * AVP and requires parsing its childs to get the code back. - */ - s6a_update_location_ans_p->result.present = S6A_RESULT_EXPERIMENTAL; - s6a_parse_experimental_result(avp_p, &s6a_update_location_ans_p->result.choice.experimental); - - goto err; - } else { - /* Neither result-code nor experimental-result is present -> - * totally incorrect behaviour here. - */ - S6A_ERROR("Experimental-Result and Result-Code are absent: " - "This is not a correct behaviour\n"); - goto err; - } - } - - /* Retrieving the ULA flags */ - CHECK_FCT(fd_msg_search_avp(ans_p, s6a_fd_cnf.dataobj_s6a_ula_flags, &avp_p)); - - if (avp_p) { - CHECK_FCT(fd_msg_avp_hdr(avp_p, &hdr_p)); - - /* This bit, when set, indicates that the HSS stores SGSN number - * and MME number in separate memory. A Rel-8 HSS shall set - * the bit. - */ - if (!FLAG_IS_SET(hdr_p->avp_value->u32, ULA_SEPARATION_IND)) { - S6A_ERROR("ULA-Flags does not indicate the HSS is post Rel.8: " - "This behaviour is not compliant\n"); - goto err; - } - } else { - /* ULA-Flags is absent while the error code indicates DIAMETER_SUCCESS: - * this is not a compliant behaviour... - * TODO: handle this case. - */ - S6A_ERROR("ULA-Flags AVP is absent while result code indicates " - "DIAMETER_SUCCESS\n"); - goto err; - } - - CHECK_FCT(fd_msg_search_avp(ans_p, s6a_fd_cnf.dataobj_s6a_subscription_data, &avp_p)); - - if (avp_p) { - CHECK_FCT(s6a_parse_subscription_data(avp_p, &s6a_update_location_ans_p->subscription_data)); - -#if defined(DISABLE_USE_NAS) - -#else - // LG COMMENTED THIS (2014/04/01)-> DevParam(0, 0, 0); -#endif - } - -err: - - ans_p = NULL; - - itti_send_msg_to_task(TASK_MME_APP, INSTANCE_DEFAULT, message_p); - - S6A_DEBUG("Sending S6A_UPDATE_LOCATION_ANS to task MME_APP\n"); - - return 0; -} - - - -int s6a_generate_update_location(s6a_update_location_req_t *ulr_pP) -{ - struct avp *avp_p = NULL; - struct msg *msg_p = NULL; - struct session *sess_p = NULL; - - union avp_value value; - - DevAssert(ulr_pP != NULL); - - /* Create the new update location request message */ - CHECK_FCT(fd_msg_new(s6a_fd_cnf.dataobj_s6a_ulr, 0, &msg_p)); - - /* Create a new session */ - CHECK_FCT(fd_sess_new(&sess_p, fd_g_config->cnf_diamid, - fd_g_config->cnf_diamid_len, (os0_t)"apps6a", 6)); - { - os0_t sid; - size_t sidlen; - CHECK_FCT(fd_sess_getsid(sess_p, &sid, &sidlen)); - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_session_id, 0, &avp_p)); - value.os.data = sid; - value.os.len = sidlen; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_FIRST_CHILD, avp_p)); - } - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_auth_session_state, 0, &avp_p)); - /* No State maintained */ - value.i32 = 1; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - - /* Add Origin_Host & Origin_Realm */ - CHECK_FCT(fd_msg_add_origin(msg_p, 0)); - - config_read_lock(&mme_config); - - /* Destination Host */ - { - char host[100]; - size_t hostlen; - - memset(host, 0, 100); - strcat(host, mme_config.s6a_config.hss_host_name); - strcat(host, "."); - strcat(host, mme_config.realm); - - hostlen = strlen(host); - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_destination_host, 0, &avp_p)); - value.os.data = (unsigned char *)host; - value.os.len = hostlen; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - } - /* Destination_Realm */ - { - char *realm = mme_config.realm; - size_t realmlen = strlen(realm); - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_destination_realm, 0, &avp_p)); - value.os.data = (unsigned char *)realm; - value.os.len = realmlen; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - } - - config_unlock(&mme_config); - - /* Adding the User-Name (IMSI) */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_user_name, 0, &avp_p)); - value.os.data = (unsigned char *)ulr_pP->imsi; - value.os.len = strlen(ulr_pP->imsi); - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - - /* Adding the visited plmn id */ - { - uint8_t plmn[3]; - - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_visited_plmn_id, 0, &avp_p)); - - PLMN_T_TO_TBCD(ulr_pP->visited_plmn, - plmn, - mme_config_find_mnc_length(ulr_pP->visited_plmn.MCCdigit1, - ulr_pP->visited_plmn.MCCdigit2, - ulr_pP->visited_plmn.MCCdigit3, - ulr_pP->visited_plmn.MNCdigit1, - ulr_pP->visited_plmn.MNCdigit2, - ulr_pP->visited_plmn.MNCdigit3 - ) - ); - - printf("PLMN: %3s\n", plmn); - - value.os.data = plmn; - value.os.len = 3; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - } - - /* Adding the RAT-Type */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_rat_type, 0, &avp_p)); - DevCheck(ulr_pP->rat_type == RAT_EUTRAN, ulr_pP->rat_type, 0, 0); - value.u32 = ulr_pP->rat_type; - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - - /* Adding ULR-Flags */ - CHECK_FCT(fd_msg_avp_new(s6a_fd_cnf.dataobj_s6a_ulr_flags, 0, &avp_p)); - value.u32 = 0; - - /* Identify the ULR as coming from S6A interface (i.e. from MME) */ - FLAGS_SET(value.u32, ULR_S6A_S6D_INDICATOR); - - /* Set the ulr-flags as indicated by upper layer */ - if (ulr_pP->skip_subscriber_data) { - FLAGS_SET(value.u32, ULR_SKIP_SUBSCRIBER_DATA); - } - - if (ulr_pP->initial_attach) { - FLAGS_SET(value.u32, ULR_INITIAL_ATTACH_IND); - } - - CHECK_FCT(fd_msg_avp_setvalue(avp_p, &value)); - CHECK_FCT(fd_msg_avp_add(msg_p, MSG_BRW_LAST_CHILD, avp_p)); - - CHECK_FCT(fd_msg_send(&msg_p, NULL, NULL)); - - S6A_DEBUG("Sending s6a ulr for imsi=%s\n", ulr_pP->imsi); - - return 0; -} diff --git a/openair-cn/SCTP/Makefile.am b/openair-cn/SCTP/Makefile.am deleted file mode 100644 index 6cdc16d869..0000000000 --- a/openair-cn/SCTP/Makefile.am +++ /dev/null @@ -1,52 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -noinst_LTLIBRARIES = libsctpserver.la libsctpclient.la -libsctpclient_la_LDFLAGS = -all-static -libsctpserver_la_LDFLAGS = -all-static - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/UTILS - -libsctpserver_la_SOURCES= \ - sctp_common.c sctp_common.h \ - sctp_itti_messaging.h sctp_itti_messaging.c \ - sctp_primitives_server.h sctp_primitives_server.c - -libsctpclient_la_SOURCES= \ - sctp_common.c sctp_common.h \ - sctp_primitives_client.h sctp_primitives_client.c \ No newline at end of file diff --git a/openair-cn/SCTP/Makefile.eNB b/openair-cn/SCTP/Makefile.eNB deleted file mode 100644 index c41d2911e2..0000000000 --- a/openair-cn/SCTP/Makefile.eNB +++ /dev/null @@ -1,71 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# include $(OPENAIR_TARGETS)/SIMU/USER/Makerules - -OUTDIR = . - -libsctp_OBJECTS = \ - sctp_common.o \ - sctp_eNB_task.o \ - sctp_eNB_itti_messaging.o - -# pull in dependency info for *existing* .o files --include $(OUTDIR)/*.d - -CFLAGS = \ - -Wall \ - $(S1AP_CFLAGS) \ - -DENB_MODE \ - -Werror=uninitialized \ - -Werror=implicit-function-declaration - -$(OUTDIR)/%.o : %.c - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -objsdir: - @if [ ! -d $(OUTDIR) ]; then mkdir -p $(OUTDIR); fi; - -$(OUTDIR)/libsctp.a: $(addprefix $(OUTDIR)/,$(libsctp_OBJECTS)) - @echo Creating SCTP archive - @$(AR) rcs $@ $(addprefix $(OUTDIR)/,$(libsctp_OBJECTS)) - -clean: - @$(RM_F_V) $(OUTDIR)/*.o - @$(RM_F_V) $(OUTDIR)/*.d - @$(RM_F_V) $(OUTDIR)/libsctp.a - -cleanall: clean diff --git a/openair-cn/SCTP/sctp_common.c b/openair-cn/SCTP/sctp_common.c index 5f29ef5c37..8e26679e6a 100644 --- a/openair-cn/SCTP/sctp_common.c +++ b/openair-cn/SCTP/sctp_common.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /*! \file sctp_common.c * \brief eNB/MME SCTP related common procedures diff --git a/openair-cn/SCTP/sctp_common.h b/openair-cn/SCTP/sctp_common.h index 337f1fa90c..bffc61a919 100644 --- a/openair-cn/SCTP/sctp_common.h +++ b/openair-cn/SCTP/sctp_common.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /*! \file sctp_common.h * \brief eNB/MME SCTP related common procedures diff --git a/openair-cn/SCTP/sctp_default_values.h b/openair-cn/SCTP/sctp_default_values.h index 28b6cc1fbf..4eaa4e88c2 100644 --- a/openair-cn/SCTP/sctp_default_values.h +++ b/openair-cn/SCTP/sctp_default_values.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef SCTP_DEFAULT_VALUES_H_ #define SCTP_DEFAULT_VALUES_H_ diff --git a/openair-cn/SCTP/sctp_eNB_defs.h b/openair-cn/SCTP/sctp_eNB_defs.h index 8f79d7f15f..6844b1be31 100644 --- a/openair-cn/SCTP/sctp_eNB_defs.h +++ b/openair-cn/SCTP/sctp_eNB_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_eNB_itti_messaging.c b/openair-cn/SCTP/sctp_eNB_itti_messaging.c index 5f27f88759..6e26b2c56d 100644 --- a/openair-cn/SCTP/sctp_eNB_itti_messaging.c +++ b/openair-cn/SCTP/sctp_eNB_itti_messaging.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_eNB_itti_messaging.h b/openair-cn/SCTP/sctp_eNB_itti_messaging.h index 184c1b0095..37af2a9b19 100644 --- a/openair-cn/SCTP/sctp_eNB_itti_messaging.h +++ b/openair-cn/SCTP/sctp_eNB_itti_messaging.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c index c9039f714d..c1e7d989e9 100644 --- a/openair-cn/SCTP/sctp_eNB_task.c +++ b/openair-cn/SCTP/sctp_eNB_task.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_eNB_task.h b/openair-cn/SCTP/sctp_eNB_task.h index 4397f7e42b..0953b63826 100644 --- a/openair-cn/SCTP/sctp_eNB_task.h +++ b/openair-cn/SCTP/sctp_eNB_task.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_itti_messaging.c b/openair-cn/SCTP/sctp_itti_messaging.c deleted file mode 100644 index 9782c43d7d..0000000000 --- a/openair-cn/SCTP/sctp_itti_messaging.c +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#include - -#include "intertask_interface.h" - -#include "sctp_itti_messaging.h" - -int sctp_itti_send_new_association(uint32_t assoc_id, uint16_t instreams, - uint16_t outstreams) -{ - MessageDef *message_p; - sctp_new_peer_t *sctp_new_peer_p; - - message_p = itti_alloc_new_message(TASK_SCTP, SCTP_NEW_ASSOCIATION); - - sctp_new_peer_p = &message_p->ittiMsg.sctp_new_peer; - - sctp_new_peer_p->assoc_id = assoc_id; - sctp_new_peer_p->instreams = instreams; - sctp_new_peer_p->outstreams = outstreams; - - return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - -int sctp_itti_send_new_message_ind(int n, uint8_t *buffer, uint32_t assoc_id, - uint16_t stream, - uint16_t instreams, uint16_t outstreams) -{ - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_SCTP, SCTP_DATA_IND); - - SCTP_DATA_IND(message_p).buffer = malloc(sizeof(uint8_t) * n); - - memcpy((void *)SCTP_DATA_IND(message_p).buffer, (void *)buffer, n); - - SCTP_DATA_IND(message_p).stream = stream; - SCTP_DATA_IND(message_p).buf_length = n; - SCTP_DATA_IND(message_p).assoc_id = assoc_id; - SCTP_DATA_IND(message_p).instreams = instreams; - SCTP_DATA_IND(message_p).outstreams = outstreams; - - return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - -int sctp_itti_send_com_down_ind(uint32_t assoc_id) -{ - MessageDef *message_p; - sctp_close_association_t *sctp_close_association_p; - - message_p = itti_alloc_new_message(TASK_SCTP, SCTP_CLOSE_ASSOCIATION); - - sctp_close_association_p = &message_p->ittiMsg.sctp_close_association; - - sctp_close_association_p->assoc_id = assoc_id; - - return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} diff --git a/openair-cn/SCTP/sctp_itti_messaging.h b/openair-cn/SCTP/sctp_itti_messaging.h deleted file mode 100644 index 69f06cb5ef..0000000000 --- a/openair-cn/SCTP/sctp_itti_messaging.h +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -#ifndef SCTP_ITTI_MESSAGING_H_ -#define SCTP_ITTI_MESSAGING_H_ - -int sctp_itti_send_new_association(uint32_t assoc_id, uint16_t instreams, - uint16_t outstreams); - -int sctp_itti_send_new_message_ind(int n, uint8_t *buffer, uint32_t assoc_id, - uint16_t stream, - uint16_t instreams, uint16_t outstreams); - -int sctp_itti_send_com_down_ind(uint32_t assoc_id); - -#endif /* SCTP_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/SCTP/sctp_primitives_client.c b/openair-cn/SCTP/sctp_primitives_client.c index b10848898d..762629d405 100644 --- a/openair-cn/SCTP/sctp_primitives_client.c +++ b/openair-cn/SCTP/sctp_primitives_client.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_primitives_client.h b/openair-cn/SCTP/sctp_primitives_client.h index 37d55ecb9f..89cf9f1db2 100644 --- a/openair-cn/SCTP/sctp_primitives_client.h +++ b/openair-cn/SCTP/sctp_primitives_client.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SCTP/sctp_primitives_server.c b/openair-cn/SCTP/sctp_primitives_server.c deleted file mode 100644 index 654d0b6f4d..0000000000 --- a/openair-cn/SCTP/sctp_primitives_server.c +++ /dev/null @@ -1,697 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file sctp_primitives_server.c - * \brief Main server primitives - * \author Sebastien ROUX - * \date 2013 - * \version 1.0 - * @ingroup _sctp - */ - -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include - -#include "assertions.h" - -#include "intertask_interface.h" -#include "sctp_primitives_server.h" -#include "mme_config.h" -#include "conversions.h" - -#include "sctp_common.h" -#include "sctp_itti_messaging.h" -#include "msc.h" - -#define SCTP_DUMP_LIST - -#define SCTP_RC_ERROR -1 -#define SCTP_RC_NORMAL_READ 0 -#define SCTP_RC_DISCONNECT 1 - -struct sctp_association_s { - struct sctp_association_s *next_assoc; ///< Next association in the list - struct sctp_association_s *previous_assoc; ///< Previous association in the list - int sd; ///< Socket descriptor - uint32_t ppid; ///< Payload protocol Identifier - uint16_t instreams; ///< Number of input streams negociated for this connection - uint16_t outstreams; ///< Number of output strams negotiated for this connection - int32_t assoc_id; ///< SCTP association id for the connection - uint32_t messages_recv; ///< Number of messages received on this connection - uint32_t messages_sent; ///< Number of messages sent on this connection - - struct sockaddr *peer_addresses; ///< A list of peer addresses - int nb_peer_addresses; -}; - -struct sctp_descriptor_s { - // List of connected peers - struct sctp_association_s *available_connections_head; - struct sctp_association_s *available_connections_tail; - - uint32_t number_of_connections; - uint16_t nb_instreams; - uint16_t nb_outstreams; -}; - -struct sctp_arg_s { - int sd; - uint32_t ppid; -}; - -static struct sctp_descriptor_s sctp_desc; - -// Thread used to handle sctp messages -static pthread_t assoc_thread; - -// LOCAL FUNCTIONS prototypes -void *sctp_receiver_thread(void *args_p); -static int sctp_send_msg(int32_t sctp_assoc_id, uint16_t stream, - const uint8_t *buffer, const uint32_t length); - -// Association list related local functions prototypes -static struct sctp_association_s *sctp_is_assoc_in_list(int32_t assoc_id); -static struct sctp_association_s *sctp_add_new_peer(void); -static int sctp_handle_com_down(uint32_t assoc_id); -static void sctp_dump_list(void); - -static struct sctp_association_s *sctp_add_new_peer(void) -{ - struct sctp_association_s *new_sctp_descriptor = NULL; - - new_sctp_descriptor = calloc(1, sizeof(struct sctp_association_s)); - - if (new_sctp_descriptor == NULL) { - SCTP_ERROR("Failed to allocate memory for new peer (%s:%d)\n", - __FILE__, __LINE__); - return NULL; - } - - new_sctp_descriptor->next_assoc = NULL; - new_sctp_descriptor->previous_assoc = NULL; - - if (sctp_desc.available_connections_tail == NULL) { - sctp_desc.available_connections_head = new_sctp_descriptor; - sctp_desc.available_connections_tail = sctp_desc.available_connections_head; - } else { - new_sctp_descriptor->previous_assoc = sctp_desc.available_connections_tail; - sctp_desc.available_connections_tail->next_assoc = new_sctp_descriptor; - sctp_desc.available_connections_tail = new_sctp_descriptor; - } - - sctp_desc.number_of_connections++; - - sctp_dump_list(); - - return new_sctp_descriptor; -} - -static struct sctp_association_s *sctp_is_assoc_in_list(int32_t assoc_id) -{ - struct sctp_association_s *assoc_desc; - - if (assoc_id < 0) { - return NULL; - } - - for (assoc_desc = sctp_desc.available_connections_head; - assoc_desc; - assoc_desc = assoc_desc->next_assoc) { - if (assoc_desc->assoc_id == assoc_id) { - break; - } - } - - return assoc_desc; -} - -static int sctp_remove_assoc_from_list(int32_t assoc_id) -{ - struct sctp_association_s *assoc_desc; - - /* Association not in the list */ - if ((assoc_desc = sctp_is_assoc_in_list(assoc_id)) == NULL) { - return -1; - } - - if (assoc_desc->next_assoc == NULL) { - if (assoc_desc->previous_assoc == NULL) { - /* Head and tail */ - sctp_desc.available_connections_head = sctp_desc.available_connections_tail = NULL; - } else { - /* Not head but tail */ - sctp_desc.available_connections_tail = assoc_desc->previous_assoc; - assoc_desc->previous_assoc->next_assoc = NULL; - } - } else { - if (assoc_desc->previous_assoc == NULL) { - /* Head but not tail */ - sctp_desc.available_connections_head = assoc_desc->next_assoc; - assoc_desc->next_assoc->previous_assoc = NULL; - } else { - /* Not head and not tail */ - assoc_desc->previous_assoc->next_assoc = assoc_desc->next_assoc; - assoc_desc->next_assoc->previous_assoc = assoc_desc->previous_assoc; - } - } - - free(assoc_desc); - assoc_desc = NULL; - sctp_desc.number_of_connections --; - return 0; -} - -static void sctp_dump_assoc(struct sctp_association_s *sctp_assoc_p) -{ -#if defined(SCTP_DUMP_LIST) - int i; - - if (sctp_assoc_p == NULL) { - return; - } - - SCTP_DEBUG("sd : %d\n", sctp_assoc_p->sd); - SCTP_DEBUG("input streams: %d\n", sctp_assoc_p->instreams); - SCTP_DEBUG("out streams : %d\n", sctp_assoc_p->outstreams); - SCTP_DEBUG("assoc_id : %d\n", sctp_assoc_p->assoc_id); - SCTP_DEBUG("peer address :\n"); - - for (i = 0; i < sctp_assoc_p->nb_peer_addresses; i++) { - char address[40]; - - memset(address, 0, sizeof(address)); - - if (inet_ntop(sctp_assoc_p->peer_addresses[i].sa_family, - sctp_assoc_p->peer_addresses[i].sa_data, address, sizeof(address)) != NULL) { - SCTP_DEBUG(" - [%s]\n", address); - } - } - -#else - sctp_assoc_p = sctp_assoc_p; -#endif -} - -static void sctp_dump_list(void) -{ -#if defined(SCTP_DUMP_LIST) - struct sctp_association_s *sctp_assoc_p; - - sctp_assoc_p = sctp_desc.available_connections_head; - - SCTP_DEBUG("SCTP list contains %d associations\n", sctp_desc.number_of_connections); - - while (sctp_assoc_p != NULL) { - sctp_dump_assoc(sctp_assoc_p); - sctp_assoc_p = sctp_assoc_p->next_assoc; - } - -#else - sctp_dump_assoc(NULL); -#endif -} - -static int sctp_send_msg(int32_t sctp_assoc_id, uint16_t stream, - const uint8_t *buffer, const uint32_t length) -{ - struct sctp_association_s *assoc_desc = NULL; - - DevAssert(buffer != NULL); - - if ((assoc_desc = sctp_is_assoc_in_list(sctp_assoc_id)) == NULL) { - SCTP_DEBUG("This assoc id has not been fount in list (%d)\n", - sctp_assoc_id); - return -1; - } - - if (assoc_desc->sd == -1) { - /* The socket is invalid may be closed. - */ - return -1; - } - - SCTP_DEBUG("[%d][%d] Sending buffer %p of %d bytes on stream %d with ppid %d\n", - assoc_desc->sd, sctp_assoc_id, buffer, - length, stream, assoc_desc->ppid); - - /* Send message_p on specified stream of the sd association */ - if (sctp_sendmsg(assoc_desc->sd, - (const void *)buffer, - length, - NULL, - 0, - assoc_desc->ppid, 0, stream, 0, 0) < 0) { - SCTP_ERROR("send: %s:%d", strerror(errno), errno); - return -1; - } - - assoc_desc->messages_sent++; - - SCTP_DEBUG("Successfully sent %d bytes on stream %d\n", length, stream); - - return 0; -} - -static int sctp_create_new_listener(SctpInit *init_p) -{ - struct sctp_event_subscribe event; - struct sockaddr *addr; - - struct sctp_arg_s *sctp_arg_p; - - uint16_t i = 0, j; - int sd; - int used_addresses = 0; - - DevAssert(init_p != NULL); - - if (init_p->ipv4 == 0 && init_p->ipv6 == 0) { - SCTP_ERROR("Illegal IP configuration upper layer should request at" - "least ipv4 and/or ipv6 config\n"); - return -1; - } - - if ((used_addresses = init_p->nb_ipv4_addr + init_p->nb_ipv6_addr) == 0) { - SCTP_WARN("No address provided...\n"); - return -1; - } - - addr = calloc(used_addresses, sizeof(struct sockaddr)); - - SCTP_DEBUG("Creating new listen socket on port %u with\n", init_p->port); - - if (init_p->ipv4 == 1) { - struct sockaddr_in *ip4_addr; - - SCTP_DEBUG("ipv4 addresses:\n"); - - for (i = 0; i < init_p->nb_ipv4_addr; i++) { - SCTP_DEBUG("\t- "IPV4_ADDR"\n", - IPV4_ADDR_FORMAT(init_p->ipv4_address[i])); - ip4_addr = (struct sockaddr_in *)&addr[i]; - ip4_addr->sin_family = AF_INET; - ip4_addr->sin_port = htons(init_p->port); - ip4_addr->sin_addr.s_addr = init_p->ipv4_address[i]; - } - } - - if (init_p->ipv6 == 1) { - struct sockaddr_in6 *ip6_addr; - - SCTP_DEBUG("ipv6 addresses:\n"); - - for (j = 0; j < init_p->nb_ipv6_addr; j++) { - SCTP_DEBUG("\t- %s\n", init_p->ipv6_address[j]); - ip6_addr = (struct sockaddr_in6 *)&addr[i + j]; - ip6_addr->sin6_family = AF_INET6; - ip6_addr->sin6_port = htons(init_p->port); - - if (inet_pton(AF_INET6, init_p->ipv6_address[j], - ip6_addr->sin6_addr.s6_addr) <= 0) { - SCTP_WARN("Provided ipv6 address %s is not valid\n", - init_p->ipv6_address[j]); - } - } - } - - if ((sd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) < 0) { - SCTP_ERROR("socket: %s:%d\n", strerror(errno), errno); - return -1; - } - - memset((void *)&event, 1, sizeof(struct sctp_event_subscribe)); - - if (setsockopt(sd, IPPROTO_SCTP, SCTP_EVENTS, &event, - sizeof(struct sctp_event_subscribe)) < 0) { - SCTP_ERROR("setsockopt: %s:%d\n", strerror(errno), errno); - return -1; - } - - /* Some pre-bind socket configuration */ - if (sctp_set_init_opt(sd, sctp_desc.nb_instreams, sctp_desc.nb_outstreams, - 0, 0) < 0) { - goto err; - } - - if (sctp_bindx(sd, addr, used_addresses, SCTP_BINDX_ADD_ADDR) != 0) { - SCTP_ERROR("sctp_bindx: %s:%d\n", strerror(errno), errno); - return -1; - } - - if (listen(sd, 5) < 0) { - SCTP_ERROR("listen: %s:%d\n", strerror(errno), errno); - return -1; - } - - if ((sctp_arg_p = malloc(sizeof(struct sctp_arg_s))) == NULL) { - return -1; - } - - sctp_arg_p->sd = sd; - sctp_arg_p->ppid = init_p->ppid; - - if (pthread_create(&assoc_thread, NULL, &sctp_receiver_thread, - (void *)sctp_arg_p) < 0) { - SCTP_ERROR("pthread_create: %s:%d\n", strerror(errno), errno); - return -1; - } - - return sd; -err: - - if (sd != -1) { - close(sd); - sd = -1; - } - - return -1; -} - -static -inline int sctp_read_from_socket(int sd, int ppid) -{ - int flags = 0, n; - socklen_t from_len; - struct sctp_sndrcvinfo sinfo; - - struct sockaddr_in addr; - uint8_t buffer[SCTP_RECV_BUFFER_SIZE]; - - if (sd < 0) { - return -1; - } - - memset((void *)&addr, 0, sizeof(struct sockaddr_in)); - from_len = (socklen_t)sizeof(struct sockaddr_in); - memset((void *)&sinfo, 0, sizeof(struct sctp_sndrcvinfo)); - n = sctp_recvmsg(sd, (void *)buffer, SCTP_RECV_BUFFER_SIZE, - (struct sockaddr *)&addr, &from_len, - &sinfo, &flags); - - if (n < 0) { - SCTP_DEBUG("An error occured during read\n"); - SCTP_ERROR("sctp_recvmsg: %s:%d\n", strerror(errno), errno); - return SCTP_RC_ERROR; - } - - if (flags & MSG_NOTIFICATION) { - union sctp_notification *snp; - snp = (union sctp_notification *)buffer; - - /* Client deconnection */ - if (SCTP_SHUTDOWN_EVENT == snp->sn_header.sn_type) { - SCTP_DEBUG("SCTP_SHUTDOWN_EVENT received\n"); - return sctp_handle_com_down(snp->sn_shutdown_event.sse_assoc_id); - } - /* Association has changed. */ - else if (SCTP_ASSOC_CHANGE == snp->sn_header.sn_type) { - struct sctp_assoc_change *sctp_assoc_changed; - sctp_assoc_changed = &snp->sn_assoc_change; - - SCTP_DEBUG("Client association changed: %d\n", sctp_assoc_changed->sac_state); - - /* New physical association requested by a peer */ - switch (sctp_assoc_changed->sac_state) { - case SCTP_COMM_UP: { - struct sctp_association_s *new_association; - - sctp_get_sockinfo(sd, NULL, NULL, NULL); - - SCTP_DEBUG("New connection\n"); - - if ((new_association = sctp_add_new_peer()) == NULL) { - // TODO: handle this case - DevMessage("Unexpected error...\n"); - return SCTP_RC_ERROR; - } else { - new_association->sd = sd; - new_association->ppid = ppid; - new_association->instreams = sctp_assoc_changed->sac_inbound_streams; - new_association->outstreams = sctp_assoc_changed->sac_outbound_streams; - new_association->assoc_id = sctp_assoc_changed->sac_assoc_id; - - sctp_get_localaddresses(sd, NULL, NULL); - sctp_get_peeraddresses(sd, &new_association->peer_addresses, - &new_association->nb_peer_addresses); - - if (sctp_itti_send_new_association( - new_association->assoc_id, new_association->instreams, - new_association->outstreams) < 0) { - SCTP_ERROR("Failed to send message to S1AP\n"); - return SCTP_RC_ERROR; - } - } - } - break; - - default: - break; - } - } - } else { - /* Data payload received */ - struct sctp_association_s *association; - - if ((association = sctp_is_assoc_in_list(sinfo.sinfo_assoc_id)) == NULL) { - // TODO: handle this case - return SCTP_RC_ERROR; - } - - association->messages_recv++; - - if (ntohl(sinfo.sinfo_ppid) != association->ppid) { - /* Mismatch in Payload Protocol Identifier, - * may be we received unsollicited traffic from stack other than S1AP. - */ - SCTP_ERROR("Received data from peer with unsollicited PPID %d, expecting %d\n", - ntohl(sinfo.sinfo_ppid), association->ppid); - return SCTP_RC_ERROR; - } - - SCTP_DEBUG("[%d][%d] Msg of length %d received from port %u, on stream %d, PPID %d\n", - sinfo.sinfo_assoc_id, sd, n, ntohs(addr.sin_port), - sinfo.sinfo_stream, ntohl(sinfo.sinfo_ppid)); - - sctp_itti_send_new_message_ind(n, buffer, sinfo.sinfo_assoc_id, sinfo.sinfo_stream, - association->instreams, association->outstreams); - } - - return SCTP_RC_NORMAL_READ; -} - -static int sctp_handle_com_down(uint32_t assoc_id) -{ - SCTP_DEBUG("Sending close connection for assoc_id %u\n", assoc_id); - - if (sctp_itti_send_com_down_ind(assoc_id) < 0) { - SCTP_ERROR("Failed to send message to TASK_S1AP\n"); - } - - if (sctp_remove_assoc_from_list(assoc_id) < 0) { - SCTP_ERROR("Failed to find client in list\n"); - } - - return SCTP_RC_DISCONNECT; -} - -void *sctp_receiver_thread(void *args_p) -{ - struct sctp_arg_s *sctp_arg_p; - - /* maximum file descriptor number */ - int fdmax, clientsock, i; - /* master file descriptor list */ - fd_set master; - /* temp file descriptor list for select() */ - fd_set read_fds; - - if ((sctp_arg_p = (struct sctp_arg_s *)args_p) == NULL) { - pthread_exit(NULL); - } - - /* clear the master and temp sets */ - FD_ZERO(&master); - FD_ZERO(&read_fds); - - FD_SET(sctp_arg_p->sd, &master); - fdmax = sctp_arg_p->sd; /* so far, it's this one*/ - MSC_START_USE(); - - while(1) { - - memcpy(&read_fds, &master, sizeof(master)); - - if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) { - SCTP_ERROR("[%d] Select() error: %s", - sctp_arg_p->sd, strerror(errno)); - free(args_p); - args_p = NULL; - pthread_exit(NULL); - } - - for (i = 0; i <= fdmax; i++) { - if (FD_ISSET(i, &read_fds)) { - if (i == sctp_arg_p->sd) { - /* There is data to read on listener socket. This means we have to accept - * the connection. - */ - if ((clientsock = accept(sctp_arg_p->sd, NULL, NULL)) < 0) { - SCTP_ERROR("[%d] accept: %s:%d\n", sctp_arg_p->sd, strerror(errno), errno); - free(args_p); - args_p = NULL; - pthread_exit(NULL); - } else { - FD_SET(clientsock, &master); /* add to master set */ - - if(clientsock > fdmax) { - /* keep track of the maximum */ - fdmax = clientsock; - } - } - } else { - int ret; - - /* Read from socket */ - ret = sctp_read_from_socket(i, sctp_arg_p->ppid); - - /* When the socket is disconnected we have to update - * the fd_set. - */ - if (ret == SCTP_RC_DISCONNECT) { - /* Remove the socket from the FD set and update the max sd */ - FD_CLR(i, &master); - - if (i == fdmax) { - while (FD_ISSET(fdmax, &master) == FALSE) - fdmax -= 1; - } - } - } - } - } - } - - free(args_p); - args_p = NULL; - return NULL; -} - -static void *sctp_intertask_interface(void *args_p) -{ - itti_mark_task_ready(TASK_SCTP); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p; - itti_receive_msg(TASK_SCTP, &received_message_p); - - switch (ITTI_MSG_ID(received_message_p)) { - case SCTP_INIT_MSG: { - SCTP_DEBUG("Received SCTP_INIT_MSG\n"); - - /* We received a new connection request */ - if (sctp_create_new_listener(&received_message_p->ittiMsg.sctpInit) < 0) { - /* SCTP socket creation or bind failed... */ - SCTP_ERROR("Failed to create new SCTP listener\n"); - } - } - break; - - case SCTP_CLOSE_ASSOCIATION: { - - } break; - - case SCTP_DATA_REQ: { - if (sctp_send_msg(SCTP_DATA_REQ(received_message_p).assocId, - SCTP_DATA_REQ(received_message_p).stream, - SCTP_DATA_REQ(received_message_p).buffer, - SCTP_DATA_REQ(received_message_p).bufLen) < 0) { - SCTP_ERROR("Failed to send message over SCTP\n"); - } - } - break; - - case MESSAGE_TEST: { - // int i = 10000; - // while(i--); - } break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); - } - break; - - default: { - SCTP_DEBUG("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), - ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - -int sctp_init(const mme_config_t *mme_config_p) -{ - SCTP_DEBUG("Initializing SCTP task interface\n"); - - memset(&sctp_desc, 0, sizeof(struct sctp_descriptor_s)); - - /* Number of streams from configuration */ - sctp_desc.nb_instreams = mme_config_p->sctp_config.in_streams; - sctp_desc.nb_outstreams = mme_config_p->sctp_config.out_streams; - - if (itti_create_task(TASK_SCTP, &sctp_intertask_interface, - NULL) < 0) { - SCTP_ERROR("create task failed"); - SCTP_DEBUG("Initializing SCTP task interface: FAILED\n"); - return -1; - } - - SCTP_DEBUG("Initializing SCTP task interface: DONE\n"); - return 0; -} diff --git a/openair-cn/SCTP/sctp_primitives_server.h b/openair-cn/SCTP/sctp_primitives_server.h deleted file mode 100644 index 60d3178dc9..0000000000 --- a/openair-cn/SCTP/sctp_primitives_server.h +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ - -/*! \file sctp_primitives_server.c - * \brief Main server primitives - * \author Sebastien ROUX - * \date 2013 - * \version 1.0 - * @ingroup _sctp - * @{ - */ - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include "mme_config.h" - -#if !defined(HAVE_LIBSCTP) -# error "You must install libsctp-dev" -#endif - -#include -#include - -#ifndef SCTP_PRIMITIVES_SERVER_H_ -#define SCTP_PRIMITIVES_SERVER_H_ - -/** \brief SCTP data received callback - \param buffer pointer to buffer received - \param length pointer to the length of buffer - **/ -typedef void (*sctp_recv_callback)(uint8_t *buffer, uint32_t length); - -/** \brief SCTP Init function. Initialize SCTP layer - \param mme_config The global MME configuration structure - @returns -1 on error, 0 otherwise. - **/ -int sctp_init(const mme_config_t *mme_config_p); - -#endif /* SCTP_PRIMITIVES_SERVER_H_ */ - -/* @} */ diff --git a/openair-cn/SECU/Makefile.am b/openair-cn/SECU/Makefile.am deleted file mode 100644 index 5fd67b18fe..0000000000 --- a/openair-cn/SECU/Makefile.am +++ /dev/null @@ -1,48 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/COMMON - -noinst_LTLIBRARIES = libsecu.la - -libsecu_la_LDFLAGS = -all-static -lm -libsecu_la_SOURCES = \ - kdf.c \ - key_nas_deriver.c \ - nas_stream_eea1.c \ - nas_stream_eia1.c \ - nas_stream_eea2.c \ - nas_stream_eia2.c \ - rijndael.c \ - rijndael.h \ - snow3g.c \ - snow3g.h \ - secu_defs.h \ No newline at end of file diff --git a/openair-cn/SECU/Makefile.eNB b/openair-cn/SECU/Makefile.eNB deleted file mode 100644 index cd8ba01189..0000000000 --- a/openair-cn/SECU/Makefile.eNB +++ /dev/null @@ -1,77 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# include $(OPENAIR_TARGETS)/SIMU/USER/Makerules - -OUTDIR = . - - -libsecu_OBJECTS = \ - kdf.o \ - rijndael.o \ - snow3g.o \ - key_nas_deriver.o \ - nas_stream_eea1.o \ - nas_stream_eia1.o \ - nas_stream_eea2.o \ - nas_stream_eia2.o - -# pull in dependency info for *existing* .o files --include $(OUTDIR)/*.d - -CFLAGS = \ - -Wall \ - $(SECU_CFLAGS) \ - -DENB_MODE \ - -Werror=uninitialized \ - -Werror=implicit-function-declaration - -$(OUTDIR)/%.o : %.c - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -objsdir: - @if [ ! -d $(OUTDIR) ]; then mkdir -p $(OUTDIR); fi; - -$(OUTDIR)/libsecu.a: $(addprefix $(OUTDIR)/,$(libsecu_OBJECTS)) - @echo Creating SECU archive - @$(AR) rcs $@ $(addprefix $(OUTDIR)/,$(libsecu_OBJECTS)) - -clean: - @$(RM_F_V) $(OUTDIR)/*.o - @$(RM_F_V) $(OUTDIR)/*.d - @$(RM_F_V) $(OUTDIR)/libsecu.a - -cleanall: clean diff --git a/openair-cn/SECU/kdf.c b/openair-cn/SECU/kdf.c index 35066d0b60..13bd680ccb 100644 --- a/openair-cn/SECU/kdf.c +++ b/openair-cn/SECU/kdf.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/key_nas_deriver.c b/openair-cn/SECU/key_nas_deriver.c index c5c9d28266..6653d05ee7 100644 --- a/openair-cn/SECU/key_nas_deriver.c +++ b/openair-cn/SECU/key_nas_deriver.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/key_nas_encryption.c b/openair-cn/SECU/key_nas_encryption.c index 4aeba21dec..70e6ed6895 100644 --- a/openair-cn/SECU/key_nas_encryption.c +++ b/openair-cn/SECU/key_nas_encryption.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/nas_stream_eea1.c b/openair-cn/SECU/nas_stream_eea1.c index d658f6ecc7..4b69ae8231 100755 --- a/openair-cn/SECU/nas_stream_eea1.c +++ b/openair-cn/SECU/nas_stream_eea1.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/nas_stream_eea2.c b/openair-cn/SECU/nas_stream_eea2.c index 6a98beb011..25ef340f4e 100644 --- a/openair-cn/SECU/nas_stream_eea2.c +++ b/openair-cn/SECU/nas_stream_eea2.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/nas_stream_eia1.c b/openair-cn/SECU/nas_stream_eia1.c index 4442670e48..a0712754f6 100755 --- a/openair-cn/SECU/nas_stream_eia1.c +++ b/openair-cn/SECU/nas_stream_eia1.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/nas_stream_eia2.c b/openair-cn/SECU/nas_stream_eia2.c index 8300bb3a68..f1f64dd90a 100644 --- a/openair-cn/SECU/nas_stream_eia2.c +++ b/openair-cn/SECU/nas_stream_eia2.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/rijndael.h b/openair-cn/SECU/rijndael.h index 23c06b2b50..8014e828ef 100644 --- a/openair-cn/SECU/rijndael.h +++ b/openair-cn/SECU/rijndael.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/secu_defs.h b/openair-cn/SECU/secu_defs.h index 50fcfc7a0e..0f27d8d309 100644 --- a/openair-cn/SECU/secu_defs.h +++ b/openair-cn/SECU/secu_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/snow3g.c b/openair-cn/SECU/snow3g.c index 6983f98ee0..78184af9c1 100644 --- a/openair-cn/SECU/snow3g.c +++ b/openair-cn/SECU/snow3g.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SECU/snow3g.h b/openair-cn/SECU/snow3g.h index 71a86e1784..d278db2dcf 100644 --- a/openair-cn/SECU/snow3g.h +++ b/openair-cn/SECU/snow3g.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/SGW-LITE/COPYING b/openair-cn/SGW-LITE/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/SGW-LITE/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/SGW-LITE/Makefile.am b/openair-cn/SGW-LITE/Makefile.am deleted file mode 100644 index 54a36c14c7..0000000000 --- a/openair-cn/SGW-LITE/Makefile.am +++ /dev/null @@ -1,53 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/GTPV1-U \ - -I$(top_srcdir)/MME_APP \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/UTILS/HASHTABLE - -noinst_LTLIBRARIES = libsgw_lite.la -libsgw_lite_la_LDFLAGS = -all-static -lconfig - -libsgw_lite_la_SOURCES= \ - spgw_config.c spgw_config.h \ - s11_causes.c s11_causes.h \ - sgw_lite_task.c \ - sgw_lite_handlers.c sgw_lite_handlers.h \ - sgw_lite_context_manager.c sgw_lite_context_manager.h \ - sgw_lite.h sgw_lite_defs.h sgw_lite_ie_defs.h \ - pgw_lite_paa.c pgw_lite_paa.h diff --git a/openair-cn/SGW-LITE/pgw_lite_paa.c b/openair-cn/SGW-LITE/pgw_lite_paa.c deleted file mode 100755 index 9a681162af..0000000000 --- a/openair-cn/SGW-LITE/pgw_lite_paa.c +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file pgw_lite_paa.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include -#include -#include -#include - -#include "intertask_interface.h" -#include "assertions.h" -#include "queue.h" - -#include "pgw_lite_paa.h" -#include "sgw_lite_defs.h" -#include "spgw_config.h" -#include "sgw_lite.h" - - -//#define PGW_LITE_FREE_ADDR_POOL_CONFIG 1 - -extern pgw_app_t pgw_app; - - -// Load in PGW pool, configured PAA address pool -void pgw_lite_load_pool_ip_addresses(void) -{ - struct pgw_lite_conf_ipv4_list_elm_s *conf_ipv4_p = NULL; - struct pgw_lite_ipv4_list_elm_s *ipv4_p = NULL; - - struct pgw_lite_conf_ipv6_list_elm_s *conf_ipv6_p = NULL; - struct pgw_lite_ipv6_list_elm_s *ipv6_p = NULL; - char print_buffer[INET6_ADDRSTRLEN]; - - STAILQ_INIT(&pgw_app.pgw_lite_ipv4_list_free); - STAILQ_INIT(&pgw_app.pgw_lite_ipv4_list_allocated); - STAILQ_INIT(&pgw_app.pgw_lite_ipv6_list_free); - STAILQ_INIT(&pgw_app.pgw_lite_ipv6_list_allocated); - - STAILQ_FOREACH(conf_ipv4_p, &spgw_config.pgw_config.pgw_lite_ipv4_pool_list, ipv4_entries) { - ipv4_p = calloc(1, sizeof(struct pgw_lite_ipv4_list_elm_s)); - ipv4_p->addr.s_addr = ntohl(conf_ipv4_p->addr.s_addr); - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv4_list_free, ipv4_p, ipv4_entries); - //SPGW_APP_DEBUG("Loaded IPv4 PAA address in pool: %s\n", - // inet_ntoa(conf_ipv4_p->addr)); - } - STAILQ_FOREACH(conf_ipv6_p, &spgw_config.pgw_config.pgw_lite_ipv6_pool_list, ipv6_entries) { - ipv6_p = calloc(1, sizeof(struct pgw_lite_ipv6_list_elm_s)); - ipv6_p->addr = conf_ipv6_p->addr; - ipv6_p->prefix_len = conf_ipv6_p->prefix_len; - ipv6_p->num_allocated = 0; - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv6_list_free, ipv6_p, ipv6_entries); - - if (inet_ntop(AF_INET6, &ipv6_p->addr, print_buffer, INET6_ADDRSTRLEN) == NULL) { - SPGW_APP_ERROR("Could not Load IPv6 PAA address in pool: %s\n", strerror(errno)); - } /*else { - - SPGW_APP_DEBUG("Loaded IPv6 PAA prefix in pool: %s\n",print_buffer); - }*/ - } -#if defined(PGW_LITE_FREE_ADDR_POOL_CONFIG) - - while ((conf_ipv4_p = STAILQ_FIRST(&spgw_config.pgw_config.pgw_lite_ipv4_pool_list))) { - STAILQ_REMOVE_HEAD(&spgw_config.pgw_config.pgw_lite_ipv4_pool_list, ipv4_entries); - free(conf_ipv4_p); - } - - while ((conf_ipv6_p = STAILQ_FIRST(&spgw_config.pgw_config.pgw_lite_ipv6_pool_list))) { - STAILQ_REMOVE_HEAD(&spgw_config.pgw_config.pgw_lite_ipv6_pool_list, ipv6_entries); - free(conf_ipv6_p); - } - -#endif - -} - - - -int pgw_lite_get_free_ipv4_paa_address(struct in_addr * const addr_pP) -{ - struct pgw_lite_ipv4_list_elm_s *ipv4_p = NULL; - - if (STAILQ_EMPTY(&pgw_app.pgw_lite_ipv4_list_free)) { - addr_pP->s_addr = INADDR_ANY; - return -1; - } - - ipv4_p = STAILQ_FIRST(&pgw_app.pgw_lite_ipv4_list_free); - STAILQ_REMOVE(&pgw_app.pgw_lite_ipv4_list_free, ipv4_p, pgw_lite_ipv4_list_elm_s, ipv4_entries); - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv4_list_allocated, ipv4_p, ipv4_entries); - addr_pP->s_addr = ipv4_p->addr.s_addr; - return 0; -} - -int pgw_lite_release_free_ipv4_paa_address(const struct in_addr * const addr_pP) -{ - struct pgw_lite_ipv4_list_elm_s *ipv4_p = NULL; - - STAILQ_FOREACH(ipv4_p, &pgw_app.pgw_lite_ipv4_list_allocated, ipv4_entries) { - if (ipv4_p->addr.s_addr == addr_pP->s_addr) { - STAILQ_REMOVE(&pgw_app.pgw_lite_ipv4_list_allocated, ipv4_p, pgw_lite_ipv4_list_elm_s, ipv4_entries); - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv4_list_free, ipv4_p, ipv4_entries); - return 0; - } - } - return -1; -} - -int pgw_lite_get_free_ipv6_paa_prefix(struct in6_addr * const addr_pP) -{ - struct pgw_lite_ipv6_list_elm_s *ipv6_p = NULL; - - if (STAILQ_EMPTY(&pgw_app.pgw_lite_ipv6_list_free)) { - *addr_pP = in6addr_any; - return -1; - } - - ipv6_p = STAILQ_FIRST(&pgw_app.pgw_lite_ipv6_list_free); - ipv6_p->num_allocated += 1; - ipv6_p->num_free -= 1; - - if (ipv6_p->num_free == 0) { - STAILQ_REMOVE(&pgw_app.pgw_lite_ipv6_list_free, ipv6_p, pgw_lite_ipv6_list_elm_s, ipv6_entries); - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv6_list_allocated, ipv6_p, ipv6_entries); - } - - *addr_pP = ipv6_p->addr; - return 0; -} - -int pgw_lite_release_free_ipv6_paa_prefix(const struct in6_addr * const addr_pP) -{ - struct pgw_lite_ipv6_list_elm_s *ipv6_p = NULL; - - ipv6_p = STAILQ_FIRST(&pgw_app.pgw_lite_ipv6_list_free); - - if (IN6_ARE_ADDR_EQUAL(&ipv6_p->addr, addr_pP)) { - ipv6_p->num_allocated -= 1; - ipv6_p->num_free += 1; - } - - STAILQ_FOREACH(ipv6_p, &pgw_app.pgw_lite_ipv6_list_allocated, ipv6_entries) { - if (IN6_ARE_ADDR_EQUAL(&ipv6_p->addr, addr_pP)) { - STAILQ_REMOVE(&pgw_app.pgw_lite_ipv6_list_allocated, ipv6_p, pgw_lite_ipv6_list_elm_s, ipv6_entries); - ipv6_p->num_allocated -= 1; - ipv6_p->num_free += 1; - STAILQ_INSERT_TAIL(&pgw_app.pgw_lite_ipv6_list_free, ipv6_p, ipv6_entries); - return 0; - } - } - return -1; -} - - - - diff --git a/openair-cn/SGW-LITE/pgw_lite_paa.h b/openair-cn/SGW-LITE/pgw_lite_paa.h deleted file mode 100755 index 0bab08514b..0000000000 --- a/openair-cn/SGW-LITE/pgw_lite_paa.h +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file pgw_lite_paa.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#ifndef PGW_LITE_PAA_H_ -#define PGW_LITE_PAA_H_ - -void pgw_lite_load_pool_ip_addresses (void); -int pgw_lite_get_free_ipv4_paa_address (struct in_addr * const addr_P); -int pgw_lite_release_free_ipv4_paa_address (const struct in_addr * const addr_P); -int pgw_lite_get_free_ipv6_paa_prefix (struct in6_addr * const addr_pP); -int pgw_lite_release_free_ipv6_paa_prefix (const struct in6_addr * const addr_pP); - -#endif diff --git a/openair-cn/SGW-LITE/s11_causes.c b/openair-cn/SGW-LITE/s11_causes.c deleted file mode 100644 index b74d9bf987..0000000000 --- a/openair-cn/SGW-LITE/s11_causes.c +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file s11_causes.c -* \brief -* \author Sebastien ROUX, Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#define SGW_LITE -#define S11_CAUSES_C - -#include -#include -#include - -#include "s11_causes.h" -#include "common_types.h" -#include "sgw_lite_ie_defs.h" - -static const SGWCauseMapping_t causes[] = { - { LOCAL_DETACH, "Local detach", 0, 0, 0, 0 }, - { COMPLETE_DETACH, "Complete detach", 0, 0, 0, 0 }, - { RAT_CHANGE_3GPP_TO_NON_3GPP, "From 3GPP to non 3GPP RAT change", 0, 0, 0, 0 }, - { ISR_DEACTIVATION, "ISR deactivation", 0, 0, 0, 0 }, - { ERROR_IND_FROM_RNC_ENB_SGSN, "Error ind received from RNC/eNB/SGSN", 0, 0, 0, 0 }, - { IMSI_DETACH_ONLY, "IMSI detach only", 0, 0, 0, 0 }, - { REQUEST_ACCEPTED, "Request accepted", 1, 1, 1, 1 }, - { REQUEST_ACCEPTED_PARTIALLY, "Request accepted partially", 1, 1, 1, 0 }, - { NEW_PDN_TYPE_NW_PREF, "New PDN type network preference", 1, 0, 0, 0 }, - { NEW_PDN_TYPE_SAB_ONLY, "New PDN type single address bearer only", 1, 0, 0, 0 }, - { CONTEXT_NOT_FOUND, "Context not found", 0, 1, 1, 1 }, - { INVALID_MESSAGE_FORMAT, "Invalid message format", 1, 1, 1, 1 }, - { INVALID_LENGTH, "Invalid length", 1, 1, 1, 0 }, - { SERVICE_NOT_SUPPORTED, "Service not supported", 0, 0, 1, 0 }, - { SYSTEM_FAILURE, "System failure", 1, 1, 1, 0 }, - { NO_RESOURCES_AVAILABLE, "No resources available", 1, 0, 0, 0 }, - { MISSING_OR_UNKNOWN_APN, "Missing or unknown APN", 1, 0, 0, 0 }, - { GRE_KEY_NOT_FOUND, "GRE KEY not found", 1, 0, 0, 0 }, - { DENIED_IN_RAT, "Denied in RAT", 1, 1, 0, 0 }, - { UE_NOT_RESPONDING, "UE not responding", 0, 1, 0, 0 }, - { SERVICE_DENIED, "Service Denied", 0, 0, 0, 0 }, - { UNABLE_TO_PAGE_UE, "Unable to page UE", 0, 1, 0, 0 }, - { NO_MEMORY_AVAILABLE, "No memory available", 1, 1, 1, 0 }, - { REQUEST_REJECTED, "Request rejected", 1, 1, 1, 0 }, - { INVALID_PEER, "Invalid peer", 0, 0, 0, 1 }, - { TEMP_REJECT_HO_IN_PROGRESS, "Temporarily rejected due to HO in progress",0, 0, 0, 0 }, - { M_PDN_APN_NOT_ALLOWED, "Multiple PDN for a given APN not allowed", 1, 0, 0, 0 }, - { 0, NULL, 0, 0, 0, 0 }, -}; - -static int compare_cause_id(const void *m1, const void *m2) -{ - struct SGWCauseMapping_e *scm1 = (struct SGWCauseMapping_e*)m1; - struct SGWCauseMapping_e *scm2 = (struct SGWCauseMapping_e*)m2; - - return (scm1->value - scm2->value); -} - -char *sgw_cause_2_string(uint8_t cause_value) -{ - SGWCauseMapping_t *res, key; - key.value = cause_value; - res = bsearch(&key, causes, sizeof(causes), sizeof(SGWCauseMapping_t), compare_cause_id); - - if (res == NULL) { - return "Unknown cause"; - } else { - return res->name; - } -} diff --git a/openair-cn/SGW-LITE/s11_causes.h b/openair-cn/SGW-LITE/s11_causes.h deleted file mode 100644 index 2ae49d0cd7..0000000000 --- a/openair-cn/SGW-LITE/s11_causes.h +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file s11_causes.h -* \brief -* \author Sebastien ROUX, Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#ifndef S11_CAUSES_H_ -#define S11_CAUSES_H_ - -typedef struct SGWCauseMapping_e { - uint8_t value; - /* Displayable cause name */ - char *name; - /* Possible cause in message? */ - unsigned create_session_response:1; - unsigned create_bearer_response:1; - unsigned modify_bearer_response:1; - unsigned delete_session_response:1; -} SGWCauseMapping_t; - -char *sgw_cause_2_string(uint8_t cause_value); - -#endif /* S11_CAUSES_H_ */ diff --git a/openair-cn/SGW-LITE/sgw_lite.h b/openair-cn/SGW-LITE/sgw_lite.h deleted file mode 100755 index d71db77257..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite.h +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#ifndef SGW_LITE_H_ -#define SGW_LITE_H_ -#include -#include "hashtable.h" -#include "tree.h" -#include "commonDef.h" -#include "common_types.h" -#include "sgw_lite_context_manager.h" - -typedef struct sgw_app_s { - - char *sgw_interface_name_for_S1u_S12_S4_up; - uint32_t sgw_ip_address_for_S1u_S12_S4_up; - - char *sgw_interface_name_for_S11_S4; // unused now - uint32_t sgw_ip_address_for_S11_S4; // unused now - - uint32_t sgw_ip_address_for_S5_S8_up; // unused now - - // key is S11 S-GW local teid - hash_table_t *s11teid2mme_hashtable; - - // key is S1-U S-GW local teid - hash_table_t *s1uteid2enb_hashtable; - - // the key of this hashtable is the S11 s-gw local teid. - hash_table_t *s11_bearer_context_information_hashtable; - - -} sgw_app_t; - - -struct pgw_lite_ipv4_list_elm_s { - STAILQ_ENTRY(pgw_lite_ipv4_list_elm_s) ipv4_entries; - struct in_addr addr; -}; - - -struct pgw_lite_ipv6_list_elm_s { - STAILQ_ENTRY(pgw_lite_ipv6_list_elm_s) ipv6_entries; - struct in6_addr addr; - int prefix_len; - int num_allocated; - int num_free; -} ; - - -typedef struct pgw_app_s { - - STAILQ_HEAD(pgw_lite_ipv4_list_free_head_s, pgw_lite_ipv4_list_elm_s) pgw_lite_ipv4_list_free; - STAILQ_HEAD(pgw_lite_ipv4_list_allocated_head_s, pgw_lite_ipv4_list_elm_s) pgw_lite_ipv4_list_allocated; - - STAILQ_HEAD(pgw_lite_ipv6_list_free_head_s, pgw_lite_ipv6_list_elm_s) pgw_lite_ipv6_list_free; - STAILQ_HEAD(pgw_lite_ipv6_list_allocated_head_s, pgw_lite_ipv6_list_elm_s) pgw_lite_ipv6_list_allocated; -} pgw_app_t; - -#endif - diff --git a/openair-cn/SGW-LITE/sgw_lite_context_manager.c b/openair-cn/SGW-LITE/sgw_lite_context_manager.c deleted file mode 100644 index 8f8fddea8c..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_context_manager.c +++ /dev/null @@ -1,386 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_context_manager.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#define SGW_LITE -#define SGW_LITE_CONTEXT_MANAGER_C - -#include -#include -#include -#include - -#include "tree.h" -#include "hashtable.h" - -#include "intertask_interface.h" -#include "mme_config.h" -#include "sgw_lite_defs.h" -#include "sgw_lite_context_manager.h" -#include "sgw_lite.h" - -extern sgw_app_t sgw_app; - - -//----------------------------------------------------------------------------- -static void sgw_lite_display_s11teid2mme_mapping(uint64_t keyP, void *dataP, void* unusedParameterP) -//----------------------------------------------------------------------------- -{ - mme_sgw_tunnel_t * mme_sgw_tunnel= NULL; - - if (dataP != NULL) { - mme_sgw_tunnel = (mme_sgw_tunnel_t *)dataP; - SPGW_APP_DEBUG("| %u\t<------------->\t%u\n", mme_sgw_tunnel->remote_teid, mme_sgw_tunnel->local_teid); - } else { - SPGW_APP_DEBUG("INVALID S11 TEID MAPPING FOUND\n"); - } -} -//----------------------------------------------------------------------------- -void sgw_lite_display_s11teid2mme_mappings(void) -//----------------------------------------------------------------------------- -{ - SPGW_APP_DEBUG("+--------------------------------------+\n"); - SPGW_APP_DEBUG("| MME <--- S11 TE ID MAPPINGS ---> SGW |\n"); - SPGW_APP_DEBUG("+--------------------------------------+\n"); - hashtable_apply_funct_on_elements(sgw_app.s11teid2mme_hashtable, sgw_lite_display_s11teid2mme_mapping, NULL); - SPGW_APP_DEBUG("+--------------------------------------+\n"); -} -//----------------------------------------------------------------------------- -static void sgw_lite_display_pdn_connection_sgw_eps_bearers(uint64_t keyP, void *dataP, void* unusedParameterP) -//----------------------------------------------------------------------------- -{ - sgw_eps_bearer_entry_t *eps_bearer_entry = NULL; - - if (dataP != NULL) { - eps_bearer_entry = (sgw_eps_bearer_entry_t *)dataP; - SPGW_APP_DEBUG("|\t\t\t\t%"PRId64"\t<-> ebi: %u, enb_teid_for_S1u: %u, s_gw_teid_for_S1u_S12_S4_up: %u (tbc)\n", - keyP, - eps_bearer_entry->eps_bearer_id, - eps_bearer_entry->enb_teid_for_S1u, - eps_bearer_entry->s_gw_teid_for_S1u_S12_S4_up); - } else { - SPGW_APP_DEBUG("\t\t\t\tINVALID eps_bearer_entry FOUND\n"); - } -} - -//----------------------------------------------------------------------------- -static void sgw_lite_display_s11_bearer_context_information(uint64_t keyP, void *dataP, void* unusedParameterP) -//----------------------------------------------------------------------------- -{ - s_plus_p_gw_eps_bearer_context_information_t * sp_context_information= NULL; - hashtable_rc_t hash_rc; - - if (dataP != NULL) { - sp_context_information = (s_plus_p_gw_eps_bearer_context_information_t *)dataP; - SPGW_APP_DEBUG("| KEY %"PRId64": \n", keyP); - SPGW_APP_DEBUG("|\tsgw_eps_bearer_context_information: |\n"); - //Imsi_t imsi; ///< IMSI (International Mobile Subscriber Identity) is the subscriber permanent identity. - SPGW_APP_DEBUG("|\t\timsi_unauthenticated_indicator:\t%u\n", sp_context_information->sgw_eps_bearer_context_information.imsi_unauthenticated_indicator); - //char msisdn[MSISDN_LENGTH]; ///< The basic MSISDN of the UE. The presence is dictated by its storage in the HSS. - SPGW_APP_DEBUG("|\t\tmme_teid_for_S11: \t%u\n", sp_context_information->sgw_eps_bearer_context_information.mme_teid_for_S11); - //ip_address_t mme_ip_address_for_S11; ///< MME IP address the S11 interface. - SPGW_APP_DEBUG("|\t\ts_gw_teid_for_S11_S4: \t%u\n", sp_context_information->sgw_eps_bearer_context_information.s_gw_teid_for_S11_S4); - //ip_address_t s_gw_ip_address_for_S11_S4; ///< S-GW IP address for the S11 interface and the S4 Interface (control plane). - //cgi_t last_known_cell_Id; ///< This is the last location of the UE known by the network - - SPGW_APP_DEBUG("|\t\tpdn_connection:\n"); - SPGW_APP_DEBUG("|\t\t\tapn_in_use: %s\n", sp_context_information->sgw_eps_bearer_context_information.pdn_connection.apn_in_use); - SPGW_APP_DEBUG("|\t\t\tdefault_bearer: %u\n", sp_context_information->sgw_eps_bearer_context_information.pdn_connection.default_bearer); - SPGW_APP_DEBUG("|\t\t\teps_bearers:\n"); - - hash_rc = hashtable_apply_funct_on_elements(sp_context_information->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - sgw_lite_display_pdn_connection_sgw_eps_bearers, - NULL); - - if (hash_rc != HASH_TABLE_OK) { - SPGW_APP_DEBUG("Invalid sgw_eps_bearers hashtable for display\n"); - } - - //void *trxn; - //uint32_t peer_ip; - } else { - SPGW_APP_DEBUG("INVALID s_plus_p_gw_eps_bearer_context_information FOUND\n"); - } -} -//----------------------------------------------------------------------------- -void sgw_lite_display_s11_bearer_context_information_mapping(void) -//----------------------------------------------------------------------------- -{ - SPGW_APP_DEBUG("+-----------------------------------------+\n"); - SPGW_APP_DEBUG("| S11 BEARER CONTEXT INFORMATION MAPPINGS |\n"); - SPGW_APP_DEBUG("+-----------------------------------------+\n"); - hashtable_apply_funct_on_elements(sgw_app.s11_bearer_context_information_hashtable, sgw_lite_display_s11_bearer_context_information, NULL); - SPGW_APP_DEBUG("+--------------------------------------+\n"); -} -//----------------------------------------------------------------------------- -void pgw_lite_cm_free_apn(pgw_apn_t *apnP) -//----------------------------------------------------------------------------- -{ - if (apnP != NULL) { - if (apnP->pdn_connections != NULL) { - obj_hashtable_destroy(apnP->pdn_connections); - } - } -} -//----------------------------------------------------------------------------- -Teid_t sgw_lite_get_new_S11_tunnel_id(void) -//----------------------------------------------------------------------------- -{ - // TO DO: RANDOM - static Teid_t tunnel_id = 0; - tunnel_id += 1; - return tunnel_id; -} - -//----------------------------------------------------------------------------- -mme_sgw_tunnel_t *sgw_lite_cm_create_s11_tunnel(Teid_t remote_teid, Teid_t local_teid) -//----------------------------------------------------------------------------- -{ - - mme_sgw_tunnel_t *new_tunnel; - - new_tunnel = malloc(sizeof(mme_sgw_tunnel_t)); - - if (new_tunnel == NULL) { - /* Malloc failed, may be ENOMEM error */ - SPGW_APP_ERROR("Failed to create tunnel for remote_teid %u\n", remote_teid); - return NULL; - } - - new_tunnel->remote_teid = remote_teid; - new_tunnel->local_teid = local_teid; - - /* Trying to insert the new tunnel into the tree. - * If collision_p is not NULL (0), it means tunnel is already present. - */ - hashtable_insert(sgw_app.s11teid2mme_hashtable, local_teid, new_tunnel); - - return new_tunnel; -} - -//----------------------------------------------------------------------------- -int sgw_lite_cm_remove_s11_tunnel(Teid_t local_teid) -//----------------------------------------------------------------------------- -{ - int temp; - - temp = hashtable_remove(sgw_app.s11teid2mme_hashtable, local_teid); - - return temp; -} - -//----------------------------------------------------------------------------- -sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry(void) -//----------------------------------------------------------------------------- -{ - sgw_eps_bearer_entry_t *eps_bearer_entry; - - eps_bearer_entry = malloc(sizeof(sgw_eps_bearer_entry_t)); - - if (eps_bearer_entry == NULL) { - /* Malloc failed, may be ENOMEM error */ - SPGW_APP_ERROR("Failed to create new EPS bearer object\n"); - return NULL; - } - - return eps_bearer_entry; -} - - -//----------------------------------------------------------------------------- -sgw_pdn_connection_t * sgw_lite_cm_create_pdn_connection(void) -//----------------------------------------------------------------------------- -{ - sgw_pdn_connection_t *pdn_connection; - - pdn_connection = malloc(sizeof(sgw_pdn_connection_t)); - - if (pdn_connection == NULL) { - /* Malloc failed, may be ENOMEM error */ - SPGW_APP_ERROR("Failed to create new PDN connection object\n"); - return NULL; - } - - memset(pdn_connection, 0, sizeof(sgw_pdn_connection_t)); - - pdn_connection->sgw_eps_bearers = hashtable_create(12, NULL, NULL); - - if ( pdn_connection->sgw_eps_bearers == NULL) { - SPGW_APP_ERROR("Failed to create eps bearers collection object\n"); - free(pdn_connection); - pdn_connection = NULL; - return NULL; - } - - return pdn_connection; -} -//----------------------------------------------------------------------------- -void sgw_lite_cm_free_pdn_connection(sgw_pdn_connection_t *pdn_connectionP) -//----------------------------------------------------------------------------- -{ - if (pdn_connectionP != NULL) { - if (pdn_connectionP->sgw_eps_bearers != NULL) { - hashtable_destroy(pdn_connectionP->sgw_eps_bearers); - } - } -} -//----------------------------------------------------------------------------- -void sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(s_plus_p_gw_eps_bearer_context_information_t *contextP) -//----------------------------------------------------------------------------- -{ - if (contextP == NULL) { - return; - } - - /*if (contextP->sgw_eps_bearer_context_information.pdn_connections != NULL) { - obj_hashtable_destroy(contextP->sgw_eps_bearer_context_information.pdn_connections); - }*/ - if (contextP->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers != NULL) { - hashtable_destroy(contextP->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers); - } - - if (contextP->pgw_eps_bearer_context_information.apns != NULL) { - obj_hashtable_destroy(contextP->pgw_eps_bearer_context_information.apns); - } - - free(contextP); -} - -//----------------------------------------------------------------------------- -s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context_information_in_collection(Teid_t teid) -//----------------------------------------------------------------------------- -{ - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_context_information; - - new_bearer_context_information = malloc(sizeof(s_plus_p_gw_eps_bearer_context_information_t)); - - if (new_bearer_context_information == NULL) { - /* Malloc failed, may be ENOMEM error */ - SPGW_APP_ERROR("Failed to create new bearer context information object for S11 remote_teid %u\n", teid); - return NULL; - } - - memset(new_bearer_context_information, 0, sizeof(s_plus_p_gw_eps_bearer_context_information_t)); - SPGW_APP_DEBUG("sgw_lite_cm_create_bearer_context_information_in_collection %d\n", teid); - - /*new_bearer_context_information->sgw_eps_bearer_context_information.pdn_connections = obj_hashtable_create(32, NULL, NULL, sgw_lite_cm_free_pdn_connection); - - if ( new_bearer_context_information->sgw_eps_bearer_context_information.pdn_connections == NULL) { - SPGW_APP_ERROR("Failed to create PDN connections collection object entry for EPS bearer teid %u \n", teid); - sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(new_bearer_context_information); - return NULL; - }*/ - - new_bearer_context_information->pgw_eps_bearer_context_information.apns = obj_hashtable_create(32, NULL, NULL, pgw_lite_cm_free_apn); - - if ( new_bearer_context_information->pgw_eps_bearer_context_information.apns == NULL) { - SPGW_APP_ERROR("Failed to create APN collection object entry for EPS bearer S11 teid %u \n", teid); - sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(new_bearer_context_information); - return NULL; - } - - /* Trying to insert the new tunnel into the tree. - * If collision_p is not NULL (0), it means tunnel is already present. - */ - hashtable_insert(sgw_app.s11_bearer_context_information_hashtable, teid, new_bearer_context_information); - SPGW_APP_DEBUG("Added new s_plus_p_gw_eps_bearer_context_information_t in s11_bearer_context_information_hashtable key teid %u\n", teid); - - return new_bearer_context_information; -} - -int sgw_lite_cm_remove_bearer_context_information(Teid_t teid) -{ - int temp; - temp = hashtable_remove(sgw_app.s11_bearer_context_information_hashtable, teid); - return temp; -} - -//--- EPS Bearer Entry - -//----------------------------------------------------------------------------- -sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry_in_collection(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP) -//----------------------------------------------------------------------------- -{ - sgw_eps_bearer_entry_t *new_eps_bearer_entry; - hashtable_rc_t hash_rc = HASH_TABLE_OK; - - if (eps_bearersP == NULL) { - SPGW_APP_ERROR("Failed to create EPS bearer entry for EPS bearer id %u. reason eps bearer hashtable is NULL \n", eps_bearer_idP); - return NULL; - } - - new_eps_bearer_entry = malloc(sizeof(sgw_eps_bearer_entry_t)); - - if (new_eps_bearer_entry == NULL) { - /* Malloc failed, may be ENOMEM error */ - SPGW_APP_ERROR("Failed to create EPS bearer entry for EPS bearer id %u \n", eps_bearer_idP); - return NULL; - } - - memset(new_eps_bearer_entry, 0, sizeof(sgw_eps_bearer_entry_t)); - - new_eps_bearer_entry->eps_bearer_id = eps_bearer_idP; - - hash_rc = hashtable_insert(eps_bearersP, eps_bearer_idP, new_eps_bearer_entry); - SPGW_APP_DEBUG("Inserted new EPS bearer entry for EPS bearer id %u status %s\n", eps_bearer_idP, hashtable_rc_code2string(hash_rc)); - - hash_rc = hashtable_apply_funct_on_elements(eps_bearersP, - sgw_lite_display_pdn_connection_sgw_eps_bearers, - NULL); - - if (hash_rc != HASH_TABLE_OK) { - SPGW_APP_DEBUG("Invalid sgw_eps_bearers hashtable for display\n"); - } - - /* CHECK DUPLICATES IN HASH TABLES ? if (temp == 1) { - SPGW_APP_WARN("This EPS bearer entry already exists: %u\n", eps_bearer_idP); - free(new_eps_bearer_entry); - new_eps_bearer_entry = collision_p; - }*/ - return new_eps_bearer_entry; -} -//----------------------------------------------------------------------------- -int sgw_lite_cm_remove_eps_bearer_entry(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP) -//----------------------------------------------------------------------------- -{ - int temp; - - if (eps_bearersP == NULL) { - return -1; - } - - temp = hashtable_remove(eps_bearersP, eps_bearer_idP); - - return temp; -} - diff --git a/openair-cn/SGW-LITE/sgw_lite_context_manager.h b/openair-cn/SGW-LITE/sgw_lite_context_manager.h deleted file mode 100644 index 7cdd2676f4..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_context_manager.h +++ /dev/null @@ -1,241 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_context_manager.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#ifndef SGW_LITE_CONTEXT_MANAGER_H_ -#define SGW_LITE_CONTEXT_MANAGER_H_ - -#include "commonDef.h" -#include "common_types.h" -#include "mme_app_ue_context.h" // for cgi_t -#include "hashtable.h" -#include "obj_hashtable.h" - -/******************************** -* P-GW contexts * -*********************************/ -typedef struct pgw_eps_bearer_entry_gtp_based_S5_S8_only_s { - ebi_t eps_bearer_id; ///< An EPS bearer identity uniquely identifies an EPS bearer for one UE accessing via E-UTRAN - // TO DO traffic_flow_template_t tft; ///< Traffic Flow Template - - ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic. - Teid_t s_gw_teid_for_S5_S8_up; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane. - - ip_address_t p_gw_ip_address_for_S5_S8_up; ///< P-GW IP address for user plane data received from PDN GW. - Teid_t p_gw_teid_for_S5_S8_up; ///< P-GW Tunnel Endpoint Identifier for the GTP Based S5/S8 interface for user plane. - - // TO BE CHECKED - BearerQOS_t eps_bearer_qos; ///< ARP, GBR, MBR, QCI. - // NOT NEEDED charging_id ///< Charging identifier, identifies charging records generated by S-GW and PDN GW. - -} pgw_eps_bearer_entry_t; - -typedef struct pgw_pdn_connection_s { - //ip_addresses; ///< IPv4 address and/or IPv6 prefix - pdn_type_t pdn_type; ///< IPv4, IPv6, or IPv4v6 - ip_address_t s_gw_address_in_use_cp; ///< The IP address of the S-GW currently used for sending control plane signalling. - Teid_t s_gw_teid_for_S5_S8_cp; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the control plane. (For GTP-based S5/S8 only). - ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only). - // NOT NEEDED s_gw_gre_key_for_dl_traffic_up ///< Serving GW assigned GRE Key for the S5/S8 interface for the user plane for downlink traffic. (For PMIP-based S5/S8 only). - ip_address_t p_gw_ip_address_for_S5_S8_cp; ///< P-GW IP address for the S5/S8 for the control plane signalling. - Teid_t p_gw_teid_for_S5_S8_cp; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 control plane interface. (For GTP-based S5/S8 only). - ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only). - // NOT NEEDED p_gw_gre_key_for_uplink_traffic_up ///< PDN GW assigned GRE Key for the S5/S8 interface for the user plane for uplink traffic. (For PMIP-based S5/S8 only). - // NOT NEEDED MS Info Change Reporting Action ///< Denotes whether the MME and/or the SGSN is/are requested to send changes in User Location Information change for this bearer. - // NOT NEEDED CSG Information Reporting Action ///< Denotes whether the MME and/or the SGSN is/are requested to send changes in User CSG Information change for this bearer. - /// This field denotes separately whether the MME/SGSN are requested to send changes in User CSG Information for (a) CSG cells, - /// (b) hybrid cells in which the subscriber is a CSG member, and (c) hybrid cells in which the subscriber is not a CSG member, or any combination of the above. - ebi_t - default_bearer; ///< Identifies the default bearer within the PDN connection by its EPS Bearer Id. The default bearer is the one which is established first within the PDN connection. (For GTP based - /// S5/S8 or for PMIP based S5/S8 if multiple PDN connections to the same APN are supported). - - hash_table_t *pgw_eps_bearers; -} pgw_pdn_connection_t; - - -typedef struct pgw_apn_s { - APN_t apn_in_use; ///< The APN currently used, as received from the S-GW. - ambr_t apn_ambr; ///< The maximum aggregated uplink and downlink MBR values to be shared across all Non-GBR bearers, - /// which are established for this APN. - obj_hash_table_t *pdn_connections; ///< For each PDN Connection within the APN - -} pgw_apn_t; - - -// The PDN GW maintains the following EPS bearer context information for UEs. -// For emergency attached UEs which are not authenticated, IMEI is stored in context. -typedef struct pgw_eps_bearer_context_information_s { - Imsi_t imsi; ///< IMSI (International Mobile Subscriber Identity) is the subscriber permanent identity. - int8_t imsi_unauthenticated_indicator; ///< This is an IMSI indicator to show the IMSI is unauthenticated. - // TO BE CHECKED me_identity_t me_identity; ///< Mobile Equipment Identity (e.g. IMEI/IMEISV). - char msisdn[MSISDN_LENGTH]; ///< The basic MSISDN of the UE. The presence is dictated by its storage in the HSS. - // NOT NEEDED selected_cn_operator_id ///< Selected core network operator identity (to support networksharing as defined in TS 23.251 - rat_type_t rat_type; ///< Current RAT - // NOT NEEDED Trace reference ///< Identifies a record or a collection of records for a particular trace. - // NOT NEEDED Trace type ///< Indicates the type of trace - // NOT NEEDED Trigger id ///< Identifies the entity that initiated the trace - // NOT NEEDED OMC identity ///< Identifies the OMC that shall receive the trace record(s). - - // TO BE CONTINUED... - obj_hash_table_t *apns; -} pgw_eps_bearer_context_information_t; - -/******************************** -* S-GW contexts * -*********************************/ -//-------------------------------- -// EPS Bearer entry -//-------------------------------- - -// A primary key for a EPS Bearer entry can be a tuple (eps bearer id, imsi) -typedef struct sgw_eps_bearer_entry_s { - PAA_t paa; - ebi_t eps_bearer_id; ///< An EPS bearer identity uniquely identifies an EPS bearer for one UE accessing via E-UTRAN - // TO DO traffic_flow_template_t tft; ///< Traffic Flow Template - - ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For GTP-based S5/S8 only). - Teid_t p_gw_teid_for_S5_S8_up; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane. (For GTP-based S5/S8 only). - - ip_address_t s_gw_ip_address_for_S5_S8_up; ///< S-GW IP address for user plane data received from PDN GW. (For GTP-based S5/S8 only). - Teid_t s_gw_teid_for_S5_S8_up; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 interface for the user plane. (For GTP-based S5/S8 only). - - ip_address_t - s_gw_ip_address_for_S1u_S12_S4_up; ///< S-GW IP address for the S1-u interface (Used by the eNodeB), for the S12 interface (used by the RNC) and for the S4 interface (used by the SGSN). - Teid_t - s_gw_teid_for_S1u_S12_S4_up; ///< S-GW Tunnel Endpoint Identifier for the S1-u interface, for the S12 interface (used by the RNC) and for the S4 interface (used by the SGSN). - - ip_address_t enb_ip_address_for_S1u; ///< eNodeB IP address for the S1-u interface (Used by the S-GW). - Teid_t enb_teid_for_S1u; ///< eNodeB Tunnel Endpoint Identifier for the S1-u interface. - - // TO BE CHECKED - BearerQOS_t eps_bearer_qos; ///< ARP, GBR, MBR, QCI. - // NOT NEEDED charging_id ///< Charging identifier, identifies charging records generated by S-GW and PDN GW. - -} sgw_eps_bearer_entry_t; - - -typedef struct sgw_pdn_connection_s { - APN_t apn_in_use; ///< The APN currently used, as received from the MME or S4 SGSN. - // NOT NEEDED NOW eps_pdn_charging ///< The charging characteristics of this PDN connection, e.g.normal, prepaid, flat-rate and/or hot billing. - // NOT IMPLEMENTED NOW - ip_address_t p_gw_address_in_use_cp; ///< The IP address of the P-GW currently used for sending control plane signalling. - // NOT IMPLEMENTED NOW - Teid_t p_gw_teid_for_S5_S8_cp; ///< P-GW Tunnel Endpoint Identifier for the S5/S8 interface for the control plane. (For GTP-based S5/S8 only). - // NOT IMPLEMENTED NOW - ip_address_t p_gw_address_in_use_up; ///< The IP address of the P-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only) - // NOT NEEDED p_gw_gre_key_for_uplink_traffic_up ///< PDN GW assigned GRE Key for the S5/S8 interface for the user plane for uplink traffic. (For PMIP-based S5/S8 only) - ip_address_t s_gw_ip_address_for_S5_S8_cp; ///< S-GW IP address for the S5/S8 for the control plane signalling. - Teid_t s_gw_teid_for_S5_S8_cp; ///< S-GW Tunnel Endpoint Identifier for the S5/S8 control plane interface. (For GTP-based S5/S8 only). - ip_address_t s_gw_address_in_use_up; ///< The IP address of the S-GW currently used for sending user plane traffic. (For PMIP-based S5/S8 only) - // NOT NEEDED s_gw_gre_key_for_dl_traffic_up ///< user plane for downlink traffic. (For PMIP-based S5/S8 only) - ebi_t default_bearer; ///< Identifies the default bearer within the PDN connection by its EPS Bearer Id. (For PMIP based S5/S8.) - - // eps bearers - hash_table_t *sgw_eps_bearers; - -} sgw_pdn_connection_t; - -// The Serving GW maintains the following EPS bearer context information for UEs. -// Struct sgw_eps_bearer_context_information_t contain the context fields for one UE. -typedef struct sgw_eps_bearer_context_information_s { - Imsi_t imsi; ///< IMSI (International Mobile Subscriber Identity) is the subscriber permanent identity. - int8_t imsi_unauthenticated_indicator; /// This is an IMSI indicator to show the IMSI is unauthenticated. - // TO BE CHECKED me_identity_t me_identity; ///< Mobile Equipment Identity (e.g. IMEI/IMEISV). - char msisdn[MSISDN_LENGTH]; ///< The basic MSISDN of the UE. The presence is dictated by its storage in the HSS. - // NOT NEEDED selected_cn_operator_id ///< Selected core network operator identity (to support networksharing as defined in TS 23.251 - Teid_t mme_teid_for_S11; ///< MME Tunnel Endpoint Identifier for the S11 interface - ip_address_t mme_ip_address_for_S11; ///< MME IP address the S11 interface. - Teid_t s_gw_teid_for_S11_S4; ///< S-GW Tunnel Endpoint Identifier for the S11 Interface and the S4 Interface (control plane) - ip_address_t s_gw_ip_address_for_S11_S4; ///< S-GW IP address for the S11 interface and the S4 Interface (control plane). - // NOT NEEDED Trace reference ///< Identifies a record or a collection of records for a particular trace. - // NOT NEEDED Trace type ///< Indicates the type of trace - // NOT NEEDED Trigger id ///< Identifies the entity that initiated the trace - // NOT NEEDED OMC identity ///< Identifies the OMC that shall receive the trace record(s). - cgi_t last_known_cell_Id; ///< This is the last location of the UE known by the network - // NOT NEEDED NOW Last known Cell Id age ///< This is the age of the above UE location information - - // ONLY ONE PDN CONNECTION - // Do not know now what is the key for this hashtable - //obj_hash_table_t *pdn_connections; - sgw_pdn_connection_t pdn_connection; - - /* S11 specific parameter. Not used in standalone mode */ - void *trxn; - uint32_t peer_ip; - - SgwCreateSessionRequest saved_message; -} sgw_eps_bearer_context_information_t; - -/******************************** -* Paired contexts * -*********************************/ -// data entry for s11_bearer_context_information_hashtable -// like this if needed in future, the split of S and P GW should be easier. -typedef struct s_plus_p_gw_eps_bearer_context_information_s { - sgw_eps_bearer_context_information_t sgw_eps_bearer_context_information; - pgw_eps_bearer_context_information_t pgw_eps_bearer_context_information; -} s_plus_p_gw_eps_bearer_context_information_t; - - -// data entry for s11teid2mme_hashtable -typedef struct mme_sgw_tunnel_s { - uint32_t local_teid; ///< Tunnel endpoint Identifier - uint32_t remote_teid; ///< Tunnel endpoint Identifier -} mme_sgw_tunnel_t; - -// data entry for s1uteid2enb_hashtable -typedef struct enb_sgw_s1u_tunnel_s { - uint32_t local_teid; ///< S-GW Tunnel endpoint Identifier - uint32_t remote_teid; ///< eNB Tunnel endpoint Identifier - ip_address_t enb_ip_address_for_S11; ///< eNB IP address the S1U interface. -} enb_sgw_s1u_tunnel_t; - - -void sgw_lite_display_s11teid2mme_mappings(void); -void sgw_lite_display_s11_bearer_context_information_mapping(void); -void pgw_lite_cm_free_apn(pgw_apn_t *apnP); - - -Teid_t sgw_lite_get_new_S11_tunnel_id(void); -mme_sgw_tunnel_t * sgw_lite_cm_create_s11_tunnel(Teid_t remote_teid, Teid_t local_teid); -int sgw_lite_cm_remove_s11_tunnel(Teid_t local_teid); -sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry(void); -sgw_pdn_connection_t * sgw_lite_cm_create_pdn_connection(void); -void sgw_lite_cm_free_pdn_connection(sgw_pdn_connection_t *pdn_connectionP); -s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context_information_in_collection(Teid_t teid); -void sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(s_plus_p_gw_eps_bearer_context_information_t *contextP); -int sgw_lite_cm_remove_bearer_context_information(Teid_t teid); -sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry_in_collection(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP); -int sgw_lite_cm_remove_eps_bearer_entry(hash_table_t *eps_bearersP, ebi_t eps_bearer_idP); - -#endif /* SGW_LITE_CONTEXT_MANAGER_H_ */ diff --git a/openair-cn/SGW-LITE/sgw_lite_defs.h b/openair-cn/SGW-LITE/sgw_lite_defs.h deleted file mode 100644 index 5233fa927b..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_defs.h +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_defs.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#ifndef SGW_LITE_DEFS_H_ -#define SGW_LITE_DEFS_H_ - - - -#if defined(ENB_MODE) -# include "UTIL/LOG/log.h" -# define SPGW_APP_ERROR(x, args...) LOG_E(SPGW, x, ##args) -# define SPGW_APP_WARN(x, args...) LOG_W(SPGW, x, ##args) -# define SPGW_APP_TRACE(x, args...) LOG_T(SPGW, x, ##args) -# define SPGW_APP_INFO(x, args...) LOG_I(SPGW, x, ##args) -# define SPGW_APP_DEBUG(x, args...) LOG_I(SPGW, x, ##args) -#else -# define SPGW_APP_ERROR(x, args...) do { fprintf(stdout, "[SPGW-APP][E]"x, ##args); } while(0) -# define SPGW_APP_WARN(x, args...) do { fprintf(stdout, "[SPGW-APP][W]"x, ##args); } while(0) -# define SPGW_APP_TRACE(x, args...) do { fprintf(stdout, "[SPGW-APP][T]"x, ##args); } while(0) -# define SPGW_APP_INFO(x, args...) do { fprintf(stdout, "[SPGW-APP][I]"x, ##args); } while(0) -# define SPGW_APP_DEBUG(x, args...) do { fprintf(stdout, "[SPGW-APP][D]"x, ##args); } while(0) -#endif - - -int sgw_lite_init(char* config_file_name_pP); - -#endif /* SGW_LITE_DEFS_H_ */ diff --git a/openair-cn/SGW-LITE/sgw_lite_handlers.c b/openair-cn/SGW-LITE/sgw_lite_handlers.c deleted file mode 100644 index 66db5a9675..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_handlers.c +++ /dev/null @@ -1,1237 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_handlers.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#define SGW_LITE -#define SGW_LITE_HANDLERS_C - -#include -#include -#include -#include -#include - -#include "assertions.h" -#include "conversions.h" -#include "common_types.h" -#include "intertask_interface.h" -#include "mme_config.h" -#include "msc.h" - -#include "sgw_lite_defs.h" -#include "sgw_lite_handlers.h" -#include "sgw_lite_context_manager.h" -#include "sgw_lite.h" -#include "sgw_lite_ie_defs.h" -#include "pgw_lite_paa.h" -#include "spgw_config.h" - -extern sgw_app_t sgw_app; -extern spgw_config_t spgw_config; - -static uint32_t g_gtpv1u_teid = 0; - -uint32_t sgw_get_new_teid(void) -{ - g_gtpv1u_teid = g_gtpv1u_teid + 1; - return g_gtpv1u_teid; -} - -int -sgw_lite_handle_create_session_request( - const SgwCreateSessionRequest * const session_req_pP) -{ - mme_sgw_tunnel_t* new_endpoint_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t* s_plus_p_gw_eps_bearer_ctxt_info_p = NULL; - sgw_eps_bearer_entry_t* eps_bearer_entry_p = NULL; - MessageDef* message_p = NULL; - - /* Upon reception of create session request from MME, - * S-GW should create UE, eNB and MME contexts and forward message to P-GW. - */ - if (session_req_pP->rat_type != RAT_EUTRAN) { - SPGW_APP_WARN("Received session request with RAT != RAT_TYPE_EUTRAN: type %d\n", - session_req_pP->rat_type); - } - - /* As we are abstracting GTP-C transport, FTeid ip address is useless. - * We just use the teid to identify MME tunnel. Normally we received either: - * - ipv4 address if ipv4 flag is set - * - ipv6 address if ipv6 flag is set - * - ipv4 and ipv6 if both flags are set - * Communication between MME and S-GW involves S11 interface so we are expecting - * S11_MME_GTP_C (11) as interface_type. - */ - if ((session_req_pP->sender_fteid_for_cp.teid == 0) && - (session_req_pP->sender_fteid_for_cp.interface_type != S11_MME_GTP_C)) { - /* MME sent request with teid = 0. This is not valid... */ - SPGW_APP_WARN("F-TEID parameter mismatch\n"); - return -1; - } - - new_endpoint_p = sgw_lite_cm_create_s11_tunnel( - session_req_pP->sender_fteid_for_cp.teid, - sgw_lite_get_new_S11_tunnel_id()); - - if (new_endpoint_p == NULL) { - SPGW_APP_WARN("Could not create new tunnel endpoint between S-GW and MME " - "for S11 abstraction\n"); - return -1; - } - - SPGW_APP_DEBUG("Rx CREATE-SESSION-REQUEST MME S11 teid %u S-GW S11 teid %u APN %s EPS bearer Id %d\n", - new_endpoint_p->remote_teid, - new_endpoint_p->local_teid, - session_req_pP->apn, - session_req_pP->bearer_to_create.eps_bearer_id); - SPGW_APP_DEBUG(" IMSI %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", - IMSI(&session_req_pP->imsi)); - - s_plus_p_gw_eps_bearer_ctxt_info_p = sgw_lite_cm_create_bearer_context_information_in_collection(new_endpoint_p->local_teid); - - if (s_plus_p_gw_eps_bearer_ctxt_info_p != NULL) { - /* We try to create endpoint for S11 interface. A NULL endpoint means that - * either the teid is already in list of known teid or ENOMEM error has been - * raised during malloc. - */ - - //-------------------------------------------------- - // copy informations from create session request to bearer context information - //-------------------------------------------------- - memcpy(s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.imsi.digit, session_req_pP->imsi.digit, IMSI_DIGITS_MAX); - memcpy(s_plus_p_gw_eps_bearer_ctxt_info_p->pgw_eps_bearer_context_information.imsi.digit, session_req_pP->imsi.digit, IMSI_DIGITS_MAX); - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.imsi_unauthenticated_indicator = 1; - s_plus_p_gw_eps_bearer_ctxt_info_p->pgw_eps_bearer_context_information.imsi_unauthenticated_indicator = 1; - - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.mme_teid_for_S11 = session_req_pP->sender_fteid_for_cp.teid; - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.s_gw_teid_for_S11_S4 = new_endpoint_p->local_teid; - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn = session_req_pP->trxn; - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.peer_ip = session_req_pP->peer_ip; - // may use ntohl or reverse, will see - - FTEID_T_2_IP_ADDRESS_T( - (&session_req_pP->sender_fteid_for_cp) , - (&s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.mme_ip_address_for_S11)); - - //-------------------------------------- - // PDN connection - //-------------------------------------- - /*pdn_connection = sgw_lite_cm_create_pdn_connection(); - - if (pdn_connection == NULL) { - // Malloc failed, may be ENOMEM error - SPGW_APP_ERROR("Failed to create new PDN connection\n"); - return -1; - }*/ - memset(&s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection, 0, sizeof(sgw_pdn_connection_t)); - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers = hashtable_create(12, NULL, NULL); - - if ( s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers == NULL) { - SPGW_APP_ERROR("Failed to create eps bearers collection object\n"); - DevMessage("Failed to create eps bearers collection object\n"); - return -1; - } - - if (session_req_pP->apn) { - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.apn_in_use = strdup(session_req_pP->apn); - } else { - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.apn_in_use = "NO APN"; - } - - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.default_bearer = session_req_pP->bearer_to_create.eps_bearer_id; - - //obj_hashtable_insert(s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connections, pdn_connection->apn_in_use, strlen(pdn_connection->apn_in_use), pdn_connection); - //-------------------------------------- - // EPS bearer entry - //-------------------------------------- - eps_bearer_entry_p = sgw_lite_cm_create_eps_bearer_entry_in_collection( - s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - session_req_pP->bearer_to_create.eps_bearer_id); - - sgw_lite_display_s11teid2mme_mappings(); - sgw_lite_display_s11_bearer_context_information_mapping(); - - if (eps_bearer_entry_p == NULL) { - SPGW_APP_ERROR("Failed to create new EPS bearer entry\n"); - // TO DO FREE new_bearer_ctxt_info_p and by cascade... - return -1; - - } - - eps_bearer_entry_p->eps_bearer_qos = session_req_pP->bearer_to_create.bearer_level_qos; - - - //s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_informationteid = teid; - - /* Trying to insert the new tunnel into the tree. - * If collision_p is not NULL (0), it means tunnel is already present. - */ - - //s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_informations_gw_ip_address_for_S11_S4 = - - memcpy(&s_plus_p_gw_eps_bearer_ctxt_info_p->sgw_eps_bearer_context_information.saved_message, - session_req_pP, - sizeof(SgwCreateSessionRequest)); - - /* Establishing EPS bearer. Requesting S1-U (GTPV1-U) task to create a - * tunnel for S1 user plane interface. If status in response is successfull (0), - * the tunnel endpoint is locally ready. - */ - message_p = itti_alloc_new_message(TASK_SPGW_APP, GTPV1U_CREATE_TUNNEL_REQ); - - if (message_p == NULL) { - sgw_lite_cm_remove_s11_tunnel(new_endpoint_p->remote_teid); - return -1; - } - - { - Gtpv1uCreateTunnelResp createTunnelResp; - - createTunnelResp.context_teid = new_endpoint_p->local_teid; - createTunnelResp.eps_bearer_id = session_req_pP->bearer_to_create.eps_bearer_id; - createTunnelResp.status = 0x00; - createTunnelResp.S1u_teid = sgw_get_new_teid(); - sgw_lite_handle_gtpv1uCreateTunnelResp(&createTunnelResp); - } - } else { - SPGW_APP_WARN("Could not create new transaction for SESSION_CREATE message\n"); - free(new_endpoint_p); - new_endpoint_p = NULL; - return -1; - } -} - - - -int -sgw_lite_handle_sgi_endpoint_created( - const SGICreateEndpointResp * const resp_pP) -{ - task_id_t to_task; - - SgwCreateSessionResponse *create_session_response_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_ctxt_info_p = NULL; - MessageDef *message_p = NULL; - hashtable_rc_t hash_rc; - - - - - SPGW_APP_DEBUG("Rx SGI_CREATE_ENDPOINT_RESPONSE,Context: S11 teid %u, SGW S1U teid %u EPS bearer id %u\n", - resp_pP->context_teid, resp_pP->sgw_S1u_teid, resp_pP->eps_bearer_id); - hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, resp_pP->context_teid, (void**)&new_bearer_ctxt_info_p); - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_CREATE_SESSION_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - create_session_response_p = &message_p->ittiMsg.sgwCreateSessionResponse; - memset(create_session_response_p, 0, sizeof(SgwCreateSessionResponse)); - - if (hash_rc == HASH_TABLE_OK) { - create_session_response_p->teid = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.mme_teid_for_S11; - - /* Preparing to send create session response on S11 abstraction interface. - * we set the cause value regarding the S1-U bearer establishment result status. - */ - if (resp_pP->status == 0) { - uint32_t address = sgw_app.sgw_ip_address_for_S1u_S12_S4_up; - create_session_response_p->bearer_context_created.s1u_sgw_fteid.teid = resp_pP->sgw_S1u_teid; - create_session_response_p->bearer_context_created.s1u_sgw_fteid.interface_type = S1_U_SGW_GTP_U; - create_session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4 = 1; - /* Should be filled in with S-GW S1-U local address. Running everything on localhost for now */ - create_session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4_address = address; - - - create_session_response_p->ambr.br_dl = 100000000; - create_session_response_p->ambr.br_ul = 40000000; - - { - sgw_eps_bearer_entry_t* eps_bearer_entry_p = NULL; - hash_rc = hashtable_get (new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - resp_pP->eps_bearer_id, - (void**)&eps_bearer_entry_p); - - if ((hash_rc == HASH_TABLE_KEY_NOT_EXISTS) || (hash_rc == HASH_TABLE_BAD_PARAMETER_HASHTABLE)) { - SPGW_APP_ERROR("ERROR UNABLE TO GET EPS BEARER ENTRY\n"); - } else { - AssertFatal(sizeof(eps_bearer_entry_p->paa) == sizeof(resp_pP->paa), "Mismatch in lengths"); // sceptic mode - memcpy(&eps_bearer_entry_p->paa, - &resp_pP->paa, - sizeof(PAA_t)); - } - } - memcpy(&create_session_response_p->paa, - &resp_pP->paa, - sizeof(PAA_t)); - - memcpy(&create_session_response_p->pco, - &resp_pP->pco, - sizeof(pco_flat_t)); - - /* Set the Cause information from bearer context created. - * "Request accepted" is returned when the GTPv2 entity has accepted a control plane request. - */ - create_session_response_p->cause = REQUEST_ACCEPTED; - create_session_response_p->bearer_context_created.cause = REQUEST_ACCEPTED; - } else { - create_session_response_p->cause = M_PDN_APN_NOT_ALLOWED; - create_session_response_p->bearer_context_created.cause = M_PDN_APN_NOT_ALLOWED; - } - - create_session_response_p->s11_sgw_teid.teid = resp_pP->context_teid; - create_session_response_p->bearer_context_created.eps_bearer_id = resp_pP->eps_bearer_id; - create_session_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; - create_session_response_p->peer_ip = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.peer_ip; - } else { - create_session_response_p->cause = CONTEXT_NOT_FOUND; - create_session_response_p->bearer_context_created.cause = CONTEXT_NOT_FOUND; - } - - SPGW_APP_DEBUG("Tx CREATE-SESSION-RESPONSE MME -> %s, S11 MME teid %u S11 S-GW teid %u S1U teid %u S1U addr 0x%x EPS bearer id %u status %d\n", - to_task == TASK_MME_APP ? "TASK_MME_APP" : "TASK_S11", - create_session_response_p->teid, - create_session_response_p->s11_sgw_teid.teid, - create_session_response_p->bearer_context_created.s1u_sgw_fteid.teid, - create_session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4_address, - create_session_response_p->bearer_context_created.eps_bearer_id, - create_session_response_p->bearer_context_created.cause); - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_CREATE_SESSION_RESPONSE S11 MME teid %u S11 S-GW teid %u S1U teid %u S1U@ 0x%x ebi %u status %d", - create_session_response_p->teid, - create_session_response_p->s11_sgw_teid.teid, - create_session_response_p->bearer_context_created.s1u_sgw_fteid.teid, - create_session_response_p->bearer_context_created.s1u_sgw_fteid.ipv4_address, - create_session_response_p->bearer_context_created.eps_bearer_id, - create_session_response_p->bearer_context_created.cause); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); -} - - - -int -sgw_lite_handle_gtpv1uCreateTunnelResp( - const Gtpv1uCreateTunnelResp * const endpoint_created_pP) -{ - task_id_t to_task; - - SgwCreateSessionResponse *create_session_response_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_ctxt_info_p = NULL; - SGICreateEndpointReq *sgi_create_endpoint_req_p = NULL; - MessageDef *message_p = NULL; - sgw_eps_bearer_entry_t *eps_bearer_entry_p = NULL; - hashtable_rc_t hash_rc; - struct in_addr inaddr ; - struct in6_addr in6addr = IN6ADDR_ANY_INIT; - SGICreateEndpointResp sgi_create_endpoint_resp; - - unsigned int pco_in_index = 0; - unsigned int pco_out_index = 0; - signed int length_in_pco = 0; - uint16_t pi_or_ci = 0; // protocol identifier or container identifier; - uint8_t length_pi_or_ci = 0; - uint8_t length_out_pi_or_ci = 0; - - uint16_t ipcp_length = 0; - uint16_t ipcp_out_length = 0; - signed int ipcp_remaining_length = 0; - uint8_t ipcp_option = 0; - uint8_t ipcp_option_length = 0; - uint8_t ipcp_code = 0; - uint8_t ipcp_out_code = IPCP_CODE_CONFIGURE_ACK; - uint8_t ipcp_identifier = 0; - uint32_t ipcp_dns_prim_ipv4_addr = 0xFFFFFFFF; - uint32_t ipcp_dns_sec_ipv4_addr = 0xFFFFFFFF; - uint32_t ipcp_out_dns_prim_ipv4_addr = 0xFFFFFFFF; - uint32_t ipcp_out_dns_sec_ipv4_addr = 0xFFFFFFFF; - pco_flat_t *in_pco_p = NULL; - pco_flat_t out_pco ; - - uint8_t address_allocation_via_nas_signalling = FALSE; - uint8_t address_allocation_via_dhcpv4 = FALSE; - - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - SPGW_APP_DEBUG("Rx GTPV1U_CREATE_TUNNEL_RESP, Context S-GW S11 teid %u, S-GW S1U teid %u EPS bearer id %u status %d\n", - endpoint_created_pP->context_teid, - endpoint_created_pP->S1u_teid, - endpoint_created_pP->eps_bearer_id, - endpoint_created_pP->status); - hash_rc = hashtable_get( - sgw_app.s11_bearer_context_information_hashtable, - endpoint_created_pP->context_teid, - (void**)&new_bearer_ctxt_info_p); - - if (hash_rc == HASH_TABLE_OK) { - - hash_rc = hashtable_get ( - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - endpoint_created_pP->eps_bearer_id, - (void**)&eps_bearer_entry_p); - - DevAssert(hash_rc == HASH_TABLE_OK); - - SPGW_APP_DEBUG("Updated eps_bearer_entry_p eps_b_id %u with SGW S1U teid %u\n", - endpoint_created_pP->eps_bearer_id, - endpoint_created_pP->S1u_teid); - eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up = endpoint_created_pP->S1u_teid; - - sgw_lite_display_s11_bearer_context_information_mapping(); - - memset(&sgi_create_endpoint_resp, 0, sizeof(SGICreateEndpointResp)); - - - //-------------------------------------------------------------------------- - // PCO processing - //-------------------------------------------------------------------------- - in_pco_p = &new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.saved_message.pco; - - length_in_pco = in_pco_p->byte[1]; - if ((length_in_pco+1+1) != in_pco_p->length) { - SPGW_APP_DEBUG("PCO: mismatch in lengths length_pco+1+1 %u != in_pco_p->length %u\n", - length_in_pco+1+1, in_pco_p->length); - } - sgi_create_endpoint_resp.pco.byte[0] = in_pco_p->byte[0]; - pco_out_index = 2; - - if ((length_in_pco > 0) && (in_pco_p->byte[2] & 0x80)) { - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = in_pco_p->byte[2]; - - pco_in_index = PCO_MIN_LENGTH; - while (length_in_pco >= 3) { - SPGW_APP_DEBUG("PCO: Protocol identifier in length_in_pco %d\n", length_in_pco); - pi_or_ci = (((uint16_t)in_pco_p->byte[pco_in_index]) << 8) | (uint16_t)in_pco_p->byte[pco_in_index+1]; - pco_in_index += 2; - length_pi_or_ci = in_pco_p->byte[pco_in_index++]; - switch (pi_or_ci) { - case PCO_PI_LCP: - case PCO_PI_PAP: - case PCO_PI_CHAP: - pco_in_index += length_pi_or_ci; - SPGW_APP_WARN("PCO: Protocol identifier 0x%X not supported now\n", pi_or_ci); - break; - - case PCO_PI_IPCP: - ipcp_code = in_pco_p->byte[pco_in_index++]; - ipcp_identifier = in_pco_p->byte[pco_in_index++]; - ipcp_length = (((uint16_t)in_pco_p->byte[pco_in_index]) << 8) | ((uint16_t)in_pco_p->byte[pco_in_index+1]); - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP (0x%x) code 0x%x identifier 0x%x length %u\n", - pi_or_ci, ipcp_code, ipcp_identifier, ipcp_length); - pco_in_index += 2; - ipcp_remaining_length = ipcp_length - 1 - 1 - 2; - ipcp_out_length = 1 + 1 + 2; - - // Protocol Id: Internet Protocol Control Protocol ... - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(pi_or_ci >> 8); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(pi_or_ci & 0x00FF); - - while (ipcp_remaining_length >= 2) { - ipcp_option = in_pco_p->byte[pco_in_index]; - ipcp_option_length = in_pco_p->byte[pco_in_index+1]; - ipcp_remaining_length = ipcp_remaining_length - ipcp_option_length; - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP ipcp_option %u ipcp_option_length %u ipcp_remaining_length %u pco_in_index %u\n", - ipcp_option, ipcp_option_length, ipcp_remaining_length, pco_in_index); - - switch (ipcp_option) { - case IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS: - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option PRIMARY_DNS_SERVER_IP_ADDRESS length %u\n", ipcp_option_length); - if (ipcp_option_length >= 6) { - ipcp_dns_prim_ipv4_addr = (((uint32_t)in_pco_p->byte[pco_in_index+2]) << 24 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+3]) << 16 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+4]) << 8 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+5]) ); - - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_dns_prim_ipv4_addr 0x%x\n", ipcp_dns_prim_ipv4_addr); - if ((ipcp_dns_prim_ipv4_addr == 0) || - (spgw_config.pgw_config.ipv4.default_dns_v4 != ipcp_dns_prim_ipv4_addr)){ - ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; - ipcp_out_dns_prim_ipv4_addr = spgw_config.pgw_config.ipv4.default_dns_v4; - } else { - ipcp_out_dns_prim_ipv4_addr = ipcp_dns_prim_ipv4_addr; - } - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_out_dns_prim_ipv4_addr 0x%x\n", ipcp_out_dns_prim_ipv4_addr); - } else { - ipcp_out_code = IPCP_CODE_CONFIGURE_NACK;// not sure - } - ipcp_out_length += 6; - break; - case IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS: - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS length %u\n", ipcp_option_length); - if (ipcp_option_length >= 6) { - ipcp_dns_sec_ipv4_addr = (((uint32_t)in_pco_p->byte[pco_in_index+2]) << 24 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+3]) << 16 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+4]) << 8 ) | - (((uint32_t)in_pco_p->byte[pco_in_index+5]) ); - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_dns_sec_ipv4_addr 0x%x\n", ipcp_dns_sec_ipv4_addr); - if ((ipcp_dns_prim_ipv4_addr == 0) || - (spgw_config.pgw_config.ipv4.default_dns_sec_v4 != ipcp_dns_sec_ipv4_addr)){ - ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; - ipcp_out_dns_sec_ipv4_addr = spgw_config.pgw_config.ipv4.default_dns_sec_v4; - } else { - ipcp_out_dns_sec_ipv4_addr = ipcp_dns_sec_ipv4_addr; - } - SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_out_dns_sec_ipv4_addr 0x%x\n", ipcp_out_dns_sec_ipv4_addr); - } else { - ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; // not sure - } - ipcp_out_length += 6; - break; - default: - SPGW_APP_WARN("PCO: Protocol identifier IPCP option 0x%04X unknown\n", ipcp_option); - } - pco_in_index += ipcp_option_length; - } - // ... continuing Protocol Id: Internet Protocol Control Protocol - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_out_length; // option length - - break; - - case PCO_CI_P_CSCF_IPV6_ADDRESS_REQUEST: - case PCO_CI_DNS_SERVER_IPV6_ADDRESS_REQUEST: - case PCO_CI_MS_SUPPORT_OF_NETWORK_REQUESTED_BEARER_CONTROL_INDICATOR: - case PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS_REQUEST: - case PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX_REQUEST: - case PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS_REQUEST: - case PCO_CI_P_CSCF_IPV4_ADDRESS_REQUEST: - case PCO_CI_MSISDN_REQUEST: - case PCO_CI_IFOM_SUPPORT_REQUEST: - pco_in_index += length_pi_or_ci; - SPGW_APP_WARN("PCO: Container identifier 0x%X not supported now\n", pi_or_ci); - break; - - case PCO_CI_DNS_SERVER_IPV4_ADDRESS_REQUEST: - // PPP IP Control Protocol - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_out_code; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_identifier; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_length >> 8); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_length & 0x00FF); - - if (ipcp_out_dns_prim_ipv4_addr != 0xFFFFFFFF) { - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = 6; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_dns_prim_ipv4_addr & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 8 ) & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 16 ) & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 24 ) & 0x000000FF); - } - if (ipcp_out_dns_sec_ipv4_addr != 0xFFFFFFFF) { - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = 6; - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_dns_sec_ipv4_addr & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 8 ) & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 16 ) & 0x000000FF); - sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 24 ) & 0x000000FF); - } - break; - - case PCO_CI_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING: - address_allocation_via_nas_signalling = TRUE; - break; - - case PCO_CI_IPV4_ADDRESS_ALLOCATION_VIA_DHCPV4: - address_allocation_via_dhcpv4 = TRUE; - break; - - case PCO_CI_IPV4_LINK_MTU_REQUEST: - SPGW_APP_WARN("PCO: Container identifier IPV4_LINK_MTU_REQUEST TODO\n"); - break; - } - length_in_pco = length_in_pco - (length_pi_or_ci + 2 + 1); - SPGW_APP_DEBUG("PCO: Protocol identifier out length_in_pco %d\n", length_in_pco); - } // while (length_in_pco >= 3) { - } // if ((length_in_pco > 0) && (in_pco_p->byte[2] & 0x80)) { - sgi_create_endpoint_resp.pco.length = pco_out_index; - sgi_create_endpoint_resp.pco.byte[1] = pco_out_index - 2; - //-------------------------------------------------------------------------- - - - // IP forward will forward packets to this teid - sgi_create_endpoint_resp.context_teid = endpoint_created_pP->context_teid; - sgi_create_endpoint_resp.sgw_S1u_teid = endpoint_created_pP->S1u_teid; - sgi_create_endpoint_resp.eps_bearer_id = endpoint_created_pP->eps_bearer_id; - - // TO DO NOW - sgi_create_endpoint_resp.paa.pdn_type = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.saved_message.pdn_type; - - switch (sgi_create_endpoint_resp.paa.pdn_type) { - case IPv4_OR_v6: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_resp.paa.ipv4_address); - } else { - SPGW_APP_WARN("Failed to allocate IPv4 PAA for PDN type IPv4_OR_v6\n"); - - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_resp.paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv4_OR_v6\n"); - } - } - - break; - - case IPv4: - if (address_allocation_via_nas_signalling == TRUE) { - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_resp.paa.ipv4_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4\n"); - } - } /*else { - // TODO - }*/ - - break; - - case IPv6: - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_resp.paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv6\n"); - } - - break; - - case IPv4_AND_v6: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_resp.paa.ipv4_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4_AND_v6\n"); - } - - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_resp.paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv4_AND_v6\n"); - } - - break; - - default: - AssertFatal(0,"BAD paa.pdn_type %d", sgi_create_endpoint_resp.paa.pdn_type); - break; - } - - sgi_create_endpoint_resp.status = SGI_STATUS_OK; - sgw_lite_handle_sgi_endpoint_created(&sgi_create_endpoint_resp); - } else { // if (hash_rc == HASH_TABLE_OK) { - SPGW_APP_DEBUG("Rx SGW_S1U_ENDPOINT_CREATED, Context: teid %u NOT FOUND\n", endpoint_created_pP->context_teid); - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_CREATE_SESSION_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - create_session_response_p = &message_p->ittiMsg.sgwCreateSessionResponse; - memset(create_session_response_p, 0, sizeof(SgwCreateSessionResponse)); - create_session_response_p->cause = CONTEXT_NOT_FOUND; - create_session_response_p->bearer_context_created.cause = CONTEXT_NOT_FOUND; - - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_CREATE_SESSION_RESPONSE teid %u CONTEXT_NOT_FOUND", endpoint_created_pP->context_teid); - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } -} - - - -int -sgw_lite_handle_gtpv1uUpdateTunnelResp( - const Gtpv1uUpdateTunnelResp * const endpoint_updated_pP) -{ - SgwModifyBearerResponse *modify_response_p = NULL; - SGIUpdateEndpointReq *update_request_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_ctxt_info_p = NULL; - MessageDef *message_p = NULL; - sgw_eps_bearer_entry_t *eps_bearer_entry_p = NULL; - hashtable_rc_t hash_rc; - task_id_t to_task; - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - SPGW_APP_DEBUG("Rx GTPV1U_UPDATE_TUNNEL_RESP, Context teid %u, SGW S1U teid %u, eNB S1U teid %u, EPS bearer id %u, status %d\n", - endpoint_updated_pP->context_teid, - endpoint_updated_pP->sgw_S1u_teid, - endpoint_updated_pP->enb_S1u_teid, - endpoint_updated_pP->eps_bearer_id, - endpoint_updated_pP->status); - - - hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, endpoint_updated_pP->context_teid, (void**)&new_bearer_ctxt_info_p); - - if (hash_rc == HASH_TABLE_OK) { - hash_rc = hashtable_get (new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, endpoint_updated_pP->eps_bearer_id, (void**)&eps_bearer_entry_p); - - if ((hash_rc == HASH_TABLE_KEY_NOT_EXISTS) || (hash_rc == HASH_TABLE_BAD_PARAMETER_HASHTABLE)) { - SPGW_APP_DEBUG("Sending SGW_MODIFY_BEARER_RESPONSE trxn %p bearer %u CONTEXT_NOT_FOUND (sgw_eps_bearers)\n", - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn, - endpoint_updated_pP->eps_bearer_id); - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - modify_response_p = &message_p->ittiMsg.sgwModifyBearerResponse; - memset(modify_response_p, 0, sizeof(SgwModifyBearerResponse)); - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = endpoint_updated_pP->eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else if (hash_rc == HASH_TABLE_OK) { - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGI_UPDATE_ENDPOINT_REQUEST); - - if (message_p == NULL) { - return -1; - } - - update_request_p = &message_p->ittiMsg.sgiUpdateEndpointReq; - memset(update_request_p, 0, sizeof(SGIUpdateEndpointReq)); - update_request_p->context_teid = endpoint_updated_pP->context_teid; - update_request_p->sgw_S1u_teid = endpoint_updated_pP->sgw_S1u_teid; - update_request_p->enb_S1u_teid = endpoint_updated_pP->enb_S1u_teid; - update_request_p->eps_bearer_id = endpoint_updated_pP->eps_bearer_id; - - return itti_send_msg_to_task(TASK_FW_IP, INSTANCE_DEFAULT, message_p); - } - } else { - SPGW_APP_DEBUG("Sending SGW_MODIFY_BEARER_RESPONSE trxn %p bearer %u CONTEXT_NOT_FOUND (s11_bearer_context_information_hashtable)\n", - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn, - endpoint_updated_pP->eps_bearer_id); - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - modify_response_p = &message_p->ittiMsg.sgwModifyBearerResponse; - memset(modify_response_p, 0, sizeof(SgwModifyBearerResponse)); - - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = endpoint_updated_pP->eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_RESPONSE ebi %u CONTEXT_NOT_FOUND trxn %u", - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id, - modify_response_p->trxn); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } - - return -1; -} - - - -int -sgw_lite_handle_sgi_endpoint_updated( - const SGIUpdateEndpointResp * const resp_pP) -{ - SgwModifyBearerResponse *modify_response_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_ctxt_info_p = NULL; - MessageDef *message_p = NULL; - sgw_eps_bearer_entry_t *eps_bearer_entry_p = NULL; - hashtable_rc_t hash_rc; - task_id_t to_task; - static uint8_t iptable_uplink_remove_gtpu = FALSE; - char cmd[256]; - int ret; - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - SPGW_APP_DEBUG("Rx SGI_UPDATE_ENDPOINT_RESPONSE, Context teid %u, SGW S1U teid %u, eNB S1U teid %u, EPS bearer id %u, status %d\n", - resp_pP->context_teid, - resp_pP->sgw_S1u_teid, - resp_pP->enb_S1u_teid, - resp_pP->eps_bearer_id, - resp_pP->status); - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - modify_response_p = &message_p->ittiMsg.sgwModifyBearerResponse; - memset(modify_response_p, 0, sizeof(SgwModifyBearerResponse)); - - hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, - resp_pP->context_teid, - (void**)&new_bearer_ctxt_info_p); - - - if (hash_rc == HASH_TABLE_OK) { - hash_rc = hashtable_get (new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - resp_pP->eps_bearer_id, - (void**)&eps_bearer_entry_p); - - if ((hash_rc == HASH_TABLE_KEY_NOT_EXISTS) || (hash_rc == HASH_TABLE_BAD_PARAMETER_HASHTABLE)) { - SPGW_APP_DEBUG("Rx SGI_UPDATE_ENDPOINT_RESPONSE: CONTEXT_NOT_FOUND (pdn_connection.sgw_eps_bearers context)\n"); - modify_response_p->teid = resp_pP->context_teid; // TO BE CHECKED IF IT IS THIS TEID - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = resp_pP->eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = 0; - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_RESPONSE ebi %u CONTEXT_NOT_FOUND trxn %u", - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id, - modify_response_p->trxn); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else if (hash_rc == HASH_TABLE_OK) { - SPGW_APP_DEBUG("Rx SGI_UPDATE_ENDPOINT_RESPONSE: REQUEST_ACCEPTED\n"); - - // accept anyway - modify_response_p->teid = resp_pP->context_teid; // TO BE CHECKED IF IT IS THIS TEID - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_MOD; - modify_response_p->bearer_choice.bearer_contexts_modified.eps_bearer_id = resp_pP->eps_bearer_id; - modify_response_p->bearer_choice.bearer_contexts_modified.cause = REQUEST_ACCEPTED; - modify_response_p->cause = REQUEST_ACCEPTED; - modify_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; - // if default bearer -#warning "TODO define constant for default eps_bearer id" - - //if ((resp_pP->eps_bearer_id == 5) && (spgw_config.pgw_config.pgw_masquerade_SGI == 0)) { - if (resp_pP->eps_bearer_id == 5) { - ret = snprintf(cmd, - 256, // mangle -I - "iptables -t mangle -A %s -d %u.%u.%u.%u -m mark --mark 0 -j GTPUSP --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", - (spgw_config.sgw_config.local_to_eNB) ? "FORWARD":"FORWARD", // test - eps_bearer_entry_p->paa.ipv4_address[0], - eps_bearer_entry_p->paa.ipv4_address[1], - eps_bearer_entry_p->paa.ipv4_address[2], - eps_bearer_entry_p->paa.ipv4_address[3], - sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x000000FF, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x0000FF00) >> 8, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x00FF0000) >> 16, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0xFF000000) >> 24, - eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up, - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[0], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[1], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[2], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[3], - eps_bearer_entry_p->enb_teid_for_S1u - ); - - if ((ret < 0) || (ret > 256)) { - SPGW_APP_ERROR("ERROR in preparing default downlink tunnel, tune string length\n"); - exit (-1); - } - //use API when prototype validated - ret = spgw_system(cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - if (ret < 0) { - SPGW_APP_ERROR("ERROR in setting up default downlink TUNNEL\n"); - } - } - //------------------------- - ret = snprintf(cmd, - 256, - "iptables -t mangle -I %s -d %u.%u.%u.%u -m mark --mark %u -j GTPUSP --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", - (spgw_config.sgw_config.local_to_eNB) ? "FORWARD":"FORWARD", // test - eps_bearer_entry_p->paa.ipv4_address[0], - eps_bearer_entry_p->paa.ipv4_address[1], - eps_bearer_entry_p->paa.ipv4_address[2], - eps_bearer_entry_p->paa.ipv4_address[3], - eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up, - sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x000000FF, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x0000FF00) >> 8, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x00FF0000) >> 16, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0xFF000000) >> 24, - eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up, - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[0], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[1], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[2], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[3], - eps_bearer_entry_p->enb_teid_for_S1u - ); - - if ((ret < 0) || (ret > 256)) { - SPGW_APP_ERROR("ERROR in preparing downlink tunnel, tune string length\n"); - exit (-1); - } - - //use API when prototype validated - ret = spgw_system(cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - - if (ret < 0) { - SPGW_APP_ERROR("ERROR in setting up downlink TUNNEL\n"); - } - - } - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_RESPONSE ebi %u trxn %u", - modify_response_p->bearer_choice.bearer_contexts_modified.eps_bearer_id, - modify_response_p->trxn); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else { - SPGW_APP_DEBUG("Rx SGI_UPDATE_ENDPOINT_RESPONSE: CONTEXT_NOT_FOUND (S11 context)\n"); - - modify_response_p->teid = resp_pP->context_teid; // TO BE CHECKED IF IT IS THIS TEID - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = resp_pP->eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = 0; - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_RESPONSE ebi %u CONTEXT_NOT_FOUND trxn %u", - modify_response_p->bearer_choice.bearer_contexts_modified.eps_bearer_id, - modify_response_p->trxn); - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } -} - - - -int -sgw_lite_handle_modify_bearer_request( - const SgwModifyBearerRequest * const modify_bearer_pP) -{ - SgwModifyBearerResponse *modify_response_p = NULL; - Gtpv1uUpdateTunnelReq *gtpv1u_update_tunnel_req_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *new_bearer_ctxt_info_p = NULL; - MessageDef *message_p = NULL; - sgw_eps_bearer_entry_t *eps_bearer_entry_p = NULL; - hashtable_rc_t hash_rc; - task_id_t to_task; - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, teid %u, EPS bearer id %u\n", - modify_bearer_pP->teid, - modify_bearer_pP->bearer_context_to_modify.eps_bearer_id); - - sgw_lite_display_s11teid2mme_mappings(); - sgw_lite_display_s11_bearer_context_information_mapping(); - - hash_rc = hashtable_get( - sgw_app.s11_bearer_context_information_hashtable, - modify_bearer_pP->teid, - (void**)&new_bearer_ctxt_info_p); - - if (hash_rc == HASH_TABLE_OK) { - - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.default_bearer = modify_bearer_pP->bearer_context_to_modify.eps_bearer_id; - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn = modify_bearer_pP->trxn; - - hash_rc = hashtable_is_key_exists ( - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - modify_bearer_pP->bearer_context_to_modify.eps_bearer_id); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - modify_response_p = &message_p->ittiMsg.sgwModifyBearerResponse; - memset(modify_response_p, 0, sizeof(SgwModifyBearerResponse)); - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = modify_bearer_pP->bearer_context_to_modify.eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = modify_bearer_pP->trxn; - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, eps_bearer_id %u CONTEXT_NOT_FOUND\n", - modify_bearer_pP->bearer_context_to_modify.eps_bearer_id); - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_MODIFY_BEARER_RESPONSE ebi %u CONTEXT_NOT_FOUND trxn %u", - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id, - modify_response_p->trxn); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else if (hash_rc == HASH_TABLE_OK) { - // TO DO - hash_rc = hashtable_get ( - new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, - modify_bearer_pP->bearer_context_to_modify.eps_bearer_id, - (void**)&eps_bearer_entry_p); - - FTEID_T_2_IP_ADDRESS_T( (&modify_bearer_pP->bearer_context_to_modify.s1_eNB_fteid) , (&eps_bearer_entry_p->enb_ip_address_for_S1u) ); - eps_bearer_entry_p->enb_teid_for_S1u = modify_bearer_pP->bearer_context_to_modify.s1_eNB_fteid.teid; - - { - SGIUpdateEndpointResp sgi_update_end_point_resp; - sgi_update_end_point_resp.context_teid = modify_bearer_pP->teid; - sgi_update_end_point_resp.sgw_S1u_teid = eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up; - sgi_update_end_point_resp.enb_S1u_teid = eps_bearer_entry_p->enb_teid_for_S1u; - sgi_update_end_point_resp.eps_bearer_id = eps_bearer_entry_p->eps_bearer_id; - sgi_update_end_point_resp.status = 0x00; - sgw_lite_handle_sgi_endpoint_updated(&sgi_update_end_point_resp); - } - } - } else { - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - modify_response_p = &message_p->ittiMsg.sgwModifyBearerResponse; - - modify_response_p->bearer_present = MODIFY_BEARER_RESPONSE_REM; - modify_response_p->bearer_choice.bearer_for_removal.eps_bearer_id = modify_bearer_pP->bearer_context_to_modify.eps_bearer_id; - modify_response_p->bearer_choice.bearer_for_removal.cause = CONTEXT_NOT_FOUND; - modify_response_p->cause = CONTEXT_NOT_FOUND; - modify_response_p->trxn = modify_bearer_pP->trxn; - - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, teid %u CONTEXT_NOT_FOUND\n", - modify_bearer_pP->teid); - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } - - return -1; -} - - - -int -sgw_lite_handle_delete_session_request( - const SgwDeleteSessionRequest * const delete_session_req_pP) -{ - task_id_t to_task; - hashtable_rc_t hash_rc; - - SgwDeleteSessionResponse *delete_session_resp_p = NULL; - MessageDef *message_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *ctx_p = NULL; - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_DELETE_SESSION_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - delete_session_resp_p = &message_p->ittiMsg.sgwDeleteSessionResponse; - - SPGW_APP_WARN("Delete session handler needs to be completed...\n"); - - if (delete_session_req_pP->indication_flags & OI_FLAG) { - SPGW_APP_DEBUG("OI flag is set for this message indicating the request" - "should be forwarded to P-GW entity\n"); - } - - hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, - delete_session_req_pP->teid, - (void**)&ctx_p); - - if (hash_rc == HASH_TABLE_OK) { - if ((delete_session_req_pP->sender_fteid_for_cp.ipv4 != 0) && - (delete_session_req_pP->sender_fteid_for_cp.ipv6 != 0)) { - /* Sender F-TEID IE present */ - if (delete_session_resp_p->teid != ctx_p->sgw_eps_bearer_context_information.mme_teid_for_S11) { - delete_session_resp_p->teid = ctx_p->sgw_eps_bearer_context_information.mme_teid_for_S11; - delete_session_resp_p->cause = INVALID_PEER; - SPGW_APP_DEBUG("Mismatch in MME Teid for CP\n"); - } else { - delete_session_resp_p->teid = delete_session_req_pP->sender_fteid_for_cp.teid; - } - } else { - delete_session_resp_p->cause = REQUEST_ACCEPTED; - delete_session_resp_p->teid = ctx_p->sgw_eps_bearer_context_information.mme_teid_for_S11; - } - - delete_session_resp_p->trxn = delete_session_req_pP->trxn; - delete_session_resp_p->peer_ip = delete_session_req_pP->peer_ip; - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_DELETE_SESSION_RESPONSE teid %u cause %u trxn %u", - delete_session_resp_p->teid, - delete_session_resp_p->cause, - delete_session_resp_p->trxn); - - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else { - /* Context not found... set the cause to CONTEXT_NOT_FOUND - * 3GPP TS 29.274 #7.2.10.1 - */ - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_DELETE_SESSION_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - delete_session_resp_p = &message_p->ittiMsg.sgwDeleteSessionResponse; - - if ((delete_session_req_pP->sender_fteid_for_cp.ipv4 == 0) && - (delete_session_req_pP->sender_fteid_for_cp.ipv6 == 0)) { - delete_session_resp_p->teid = 0; - } else { - delete_session_resp_p->teid = delete_session_req_pP->sender_fteid_for_cp.teid; - } - - delete_session_resp_p->cause = CONTEXT_NOT_FOUND; - delete_session_resp_p->trxn = delete_session_req_pP->trxn; - delete_session_resp_p->peer_ip = delete_session_req_pP->peer_ip; - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_DELETE_SESSION_RESPONSE CONTEXT_NOT_FOUND trxn %u", - delete_session_resp_p->trxn); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } - - return -1; -} - - -int -sgw_lite_handle_release_access_bearers_request( - const SgwReleaseAccessBearersRequest * const release_access_bearers_req_pP) -{ - task_id_t to_task; - hashtable_rc_t hash_rc; - SgwReleaseAccessBearersResponse *release_access_bearers_resp_p = NULL; - MessageDef *message_p = NULL; - s_plus_p_gw_eps_bearer_context_information_t *ctx_p = NULL; - -#if defined(ENABLE_STANDALONE_EPC) - to_task = TASK_MME_APP; -#else - to_task = TASK_S11; -#endif - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_RELEASE_ACCESS_BEARERS_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - release_access_bearers_resp_p = &message_p->ittiMsg.sgwReleaseAccessBearersResponse; - - - hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, - release_access_bearers_req_pP->teid, - (void**)&ctx_p); - - if (hash_rc == HASH_TABLE_OK) { - release_access_bearers_resp_p->cause = REQUEST_ACCEPTED; - release_access_bearers_resp_p->teid = ctx_p->sgw_eps_bearer_context_information.mme_teid_for_S11; - -#warning "TODO Here the release (sgw_lite_handle_release_access_bearers_request)" - - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_RELEASE_ACCESS_BEARERS_RESPONSE S11 MME teid %u cause REQUEST_ACCEPTED", - release_access_bearers_resp_p->teid); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } else { - release_access_bearers_resp_p->cause = CONTEXT_NOT_FOUND; - release_access_bearers_resp_p->teid = 0; - MSC_LOG_TX_MESSAGE( - MSC_SP_GWAPP_MME, - (to_task == TASK_MME_APP) ? MSC_MMEAPP_MME:MSC_S11_MME, - NULL,0, - "0 SGW_RELEASE_ACCESS_BEARERS_RESPONSE cause CONTEXT_NOT_FOUND"); - - return itti_send_msg_to_task(to_task, INSTANCE_DEFAULT, message_p); - } - return -1; -} - diff --git a/openair-cn/SGW-LITE/sgw_lite_handlers.h b/openair-cn/SGW-LITE/sgw_lite_handlers.h deleted file mode 100644 index 1f74f802bd..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_handlers.h +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_handlers.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#ifndef SGW_LITE_HANDLERS_H_ -#define SGW_LITE_HANDLERS_H_ - -int sgw_lite_handle_create_session_request(const SgwCreateSessionRequest * const session_req_p); -int sgw_lite_handle_sgi_endpoint_created (const SGICreateEndpointResp * const resp_p); -int sgw_lite_handle_sgi_endpoint_updated (const SGIUpdateEndpointResp * const resp_p); -int sgw_lite_handle_gtpv1uCreateTunnelResp(const Gtpv1uCreateTunnelResp * const endpoint_created_p); -int sgw_lite_handle_gtpv1uUpdateTunnelResp(const Gtpv1uUpdateTunnelResp * const endpoint_updated_p); -int sgw_lite_handle_modify_bearer_request (const SgwModifyBearerRequest * const modify_bearer_p); -int sgw_lite_handle_delete_session_request(const SgwDeleteSessionRequest * const delete_session_p); -int sgw_lite_handle_release_access_bearers_request(const SgwReleaseAccessBearersRequest * const release_access_bearers_req_pP); -#endif /* SGW_LITE_HANDLERS_H_ */ diff --git a/openair-cn/SGW-LITE/sgw_lite_ie_defs.h b/openair-cn/SGW-LITE/sgw_lite_ie_defs.h deleted file mode 100644 index 68683272fb..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_ie_defs.h +++ /dev/null @@ -1,641 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_ie_defs.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#include "common_types.h" - -#ifndef SGW_LITE_IE_DEFS_H_ -#define SGW_LITE_IE_DEFS_H_ - -typedef uint8_t EBI_t; -typedef uint8_t APNRestriction_t; -typedef uint8_t DelayValue_t; -typedef uint32_t Teid_t; -typedef uint32_t SequenceNumber_t; - -/* Only one type of address can be present at the same time - * This type is applicable to IP address Information Element defined - * in 3GPP TS 29.274 #8.9 - */ -typedef struct { -#define GTP_IP_ADDR_v4 0x0 -#define GTP_IP_ADDR_v6 0x1 - unsigned present:1; - union { - uint8_t v4[4]; - uint8_t v6[16]; - } address; -} gtp_ip_address_t; - -/* 3GPP TS 29.274 Figure 8.12 */ - -typedef uint32_t indication_flags_t; - -/* Bit mask for octet 7 in indication IE */ -#if defined(UPDATE_RELEASE_10) -# define S6AF_FLAG (1U << 20) -# define S4AF_FLAG (1U << 19) -# define MBMDT_FLAG (1U << 18) -#endif -#define ISRAU_FLAG (1U << 17) -#define CCRSI_FLAG (1U << 16) - -/* Bit mask for octet 6 in indication IE */ -#define SQSI_FLAG (1U << 15) -#define UIMSI_FLAG (1U << 14) -#define CFSI_FLAG (1U << 13) -#define CRSI_FLAG (1U << 12) -#define P_FLAG (1U << 11) -#define PT_FLAG (1U << 10) -#define SI_FLAG (1U << 9) -#define MSV_FLAG (1U << 8) - -/* Bit mask for octet 5 in indication IE */ -#define DAF_FLAG (1U << 7) -#define DTF_FLAG (1U << 6) -#define HI_FLAG (1U << 5) -#define DFI_FLAG (1U << 4) -#define OI_FLAG (1U << 3) -#define ISRSI_FLAG (1U << 2) -#define ISRAI_FLAG (1U << 1) -#define SGW_CI_FLAG (1U << 0) - -typedef struct { - pdn_type_t pdn_type; - uint8_t ipv4_address[4]; - uint8_t ipv6_address[16]; - /* Note in rel.8 the ipv6 prefix length has a fixed value of /64 */ - uint8_t ipv6_prefix_length; -} PAA_t; - -/* Protocol configuration options from ts124008*/ -#define PCO_MIN_LENGTH 3 -#define PCO_MAX_LENGTH 253 -#define PCO_CONFIGURATION_PROTOCOL_PPP_FOR_USE_WITH_IP_PDP_TYPE_OR_IP_PDN_TYPE 000b - -#define PCO_PI_LCP (0xC021) -#define PCO_PI_PAP (0xC023) -#define PCO_PI_CHAP (0xC223) -#define PCO_PI_IPCP (0x8021) - -#define IPCP_CODE_CONFIGURE_REQUEST (0x01) -#define IPCP_CODE_CONFIGURE_ACK (0x02) -#define IPCP_CODE_CONFIGURE_NACK (0x03) -#define IPCP_CODE_CONFIGURE_REJECT (0x04) -#define IPCP_CODE_TERMINATE_REQUEST (0x05) -#define IPCP_CODE_TERMINATE_ACK (0x06) -#define IPCP_CODE_REJECT (0x07) - -#define IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS (0x81) -#define IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS (0x83) - -/* CONTAINER IDENTIFIER MS to network direction:*/ -#define PCO_CI_P_CSCF_IPV6_ADDRESS_REQUEST (0x0001) -#define PCO_CI_DNS_SERVER_IPV6_ADDRESS_REQUEST (0x0003) -#define PCO_CI_MS_SUPPORT_OF_NETWORK_REQUESTED_BEARER_CONTROL_INDICATOR (0x0005) -#define PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS_REQUEST (0x0007) -#define PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX_REQUEST (0x0008) -#define PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS_REQUEST (0x0009) -#define PCO_CI_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING (0x000A) -#define PCO_CI_IPV4_ADDRESS_ALLOCATION_VIA_DHCPV4 (0x000B) -#define PCO_CI_P_CSCF_IPV4_ADDRESS_REQUEST (0x000C) -#define PCO_CI_DNS_SERVER_IPV4_ADDRESS_REQUEST (0x000D) -#define PCO_CI_MSISDN_REQUEST (0x000E) -#define PCO_CI_IFOM_SUPPORT_REQUEST (0x000F) -#define PCO_CI_IPV4_LINK_MTU_REQUEST (0x0010) - -/* CONTAINER IDENTIFIER Network to MS direction:*/ -#define PCO_CI_P_CSCF_IPV6_ADDRESS (0x0001) -#define PCO_CI_IM_CN_SUBSYSTEM_SIGNALING_FLAG (0x0002) -#define PCO_CI_DNS_SERVER_IPV6_ADDRESS (0x0003) -#define PCO_CI_POLICY_CONTROL_REJECTION_CODE (0x0004) -#define PCO_CI_SELECTED_BEARER_CONTROL_MODE (0x0005) -#define PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS (0x0007) -#define PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX (0x0008) -#define PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS (0x0009) -#define PCO_CI_P_CSCF_IPV4_ADDRESS (0x000C) -#define PCO_CI_DNS_SERVER_IPV4_ADDRESS (0x000D) -#define PCO_CI_MSISDN (0x000E) -#define PCO_CI_IFOM_SUPPORT (0x000F) -#define PCO_CI_IPV4_LINK_MTU (0x0010) - -/* Both directions:*/ -#define PCO_CI_IM_CN_SUBSYSTEM_SIGNALING_FLAG (0x0002) - -typedef struct pco_flat_s{ - uint8_t byte[PCO_MAX_LENGTH]; - uint8_t length; -} pco_flat_t; - - -#define IMSI(imsi) \ - (imsi)->digit[0], \ - (imsi)->digit[1], \ - (imsi)->digit[2], \ - (imsi)->digit[3], \ - (imsi)->digit[4], \ - (imsi)->digit[5], \ - (imsi)->digit[6], \ - (imsi)->digit[7], \ - (imsi)->digit[8], \ - (imsi)->digit[9], \ - (imsi)->digit[10], \ - (imsi)->digit[11], \ - (imsi)->digit[12], \ - (imsi)->digit[13], \ - (imsi)->digit[14] - -typedef struct { - uint8_t digit[IMSI_DIGITS_MAX+1]; // +1 for '\0` macro sprintf changed in snprintf - uint8_t length; -} Imsi_t; - -typedef struct { - uint8_t digit[MSISDN_LENGTH]; - uint8_t length; -} Msisdn_t; - -#define MEI_IMEI 0x0 -#define MEI_IMEISV 0x1 - -typedef struct { - uint8_t present; - union { - unsigned imei:15; - unsigned imeisv:16; - } choice; -} Mei_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint16_t lac; - uint16_t ci; -} Cgi_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint16_t lac; - uint16_t sac; -} Sai_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint16_t lac; - uint16_t rac; -} Rai_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint16_t tac; -} Tai_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint32_t eci; -} Ecgi_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint16_t lac; -} Lai_t; - -#define ULI_CGI 0x01 -#define ULI_SAI 0x02 -#define ULI_RAI 0x04 -#define ULI_TAI 0x08 -#define ULI_ECGI 0x10 -#define ULI_LAI 0x20 - -typedef struct { - uint8_t present; - struct { - Cgi_t cgi; - Sai_t sai; - Rai_t rai; - Tai_t tai; - Ecgi_t ecgi; - Lai_t lai; - } s; -} Uli_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; -} ServingNetwork_t; -/* -typedef enum RatType_e { - RAT_TYPE_UTRAN = 1, - RAT_TYPE_GERAN, - RAT_TYPE_WLAN, - RAT_TYPE_GAN, - RAT_TYPE_HSPA_EVOLUTION, - RAT_TYPE_EUTRAN, -} RatType_t;*/ - -/* WARNING: not complete... */ -typedef enum InterfaceType_e { - S1_U_ENODEB_GTP_U = 0, - S1_U_SGW_GTP_U = 1, - S12_RNC_GTP_U = 2, - S12_SGW_GTP_U = 3, - S5_S8_SGW_GTP_U = 4, - S5_S8_PGW_GTP_U = 5, - S5_S8_SGW_GTP_C = 6, - S5_S8_PGW_GTP_C = 7, - S11_MME_GTP_C = 10, - S11_SGW_GTP_C = 11, -} InterfaceType_t; - -typedef struct { - unsigned ipv4:1; - unsigned ipv6:1; - InterfaceType_t interface_type; - Teid_t teid; ///< TEID or GRE Key - uint32_t ipv4_address; - uint8_t ipv6_address[16]; -} FTeid_t; -/* - * typedef struct { - pdn_type_t pdn_type; - union { - uint8_t ipv4_address[4]; - uint8_t ipv6_address[16]; - } address; - } ip_address_t; - - */ -#define FTEID_T_2_IP_ADDRESS_T(fte_p,ip_p) \ -do { \ - if (fte_p->ipv4) { \ - ip_p->pdn_type = IPv4; \ - ip_p->address.ipv4_address[0] = (uint8_t)(fte_p->ipv4_address & 0x000000FF); \ - ip_p->address.ipv4_address[1] = (uint8_t)((fte_p->ipv4_address & 0x0000FF00) >> 8); \ - ip_p->address.ipv4_address[2] = (uint8_t)((fte_p->ipv4_address & 0x00FF0000) >> 16); \ - ip_p->address.ipv4_address[3] = (uint8_t)((fte_p->ipv4_address & 0xFF000000) >> 24); \ - } \ - if (fte_p->ipv6) { \ - if (fte_p->ipv4) { \ - ip_p->pdn_type = IPv4_AND_v6; \ - } else { \ - ip_p->pdn_type = IPv6; \ - } \ - memcpy(ip_p->address.ipv6_address, fte_p->ipv6_address, 16); \ - } \ -} while (0) - -typedef enum { - TARGET_ID_RNC_ID = 0, - TARGET_ID_MACRO_ENB_ID = 1, - TARGET_ID_CELL_ID = 2, - TARGET_ID_HOME_ENB_ID = 3 - /* Other values are spare */ -} target_type_t; - -typedef struct { - uint16_t lac; - uint8_t rac; - - /* Length of RNC Id can be 2 bytes if length of element is 8 - * or 4 bytes long if length is 10. - */ - uint32_t rnc_id; -} rnc_id_t; - -typedef struct { - unsigned enb_id:20; - uint16_t tac; -} macro_enb_id_t; - -typedef struct { - unsigned enb_id:28; - uint16_t tac; -} home_enb_id_t; - -typedef struct { - /* Common part */ - uint8_t target_type; - - uint8_t mcc[3]; - uint8_t mnc[3]; - union { - rnc_id_t rnc_id; - macro_enb_id_t macro_enb_id; - home_enb_id_t home_enb_id; - } target_id; -} target_identification_t; - -typedef enum SelectionMode_e { - MS_O_N_P_APN_S_V = 0, ///< MS or network provided APN, subscribed verified - MS_P_APN_S_N_V = 1, ///< MS provided APN, subscription not verified - N_P_APN_S_N_V = 2, ///< Network provided APN, subscription not verified -} SelectionMode_t; - -typedef struct { - uint32_t uplink_ambr; - uint32_t downlink_ambr; -} AMBR_t; - -typedef enum node_id_type_e { - GLOBAL_UNICAST_IPv4 = 0, - GLOBAL_UNICAST_IPv6 = 1, - TYPE_EXOTIC = 2, ///< (MCC * 1000 + MNC) << 12 + Integer value assigned to MME by operator -} node_id_type_t; - -typedef struct { - node_id_type_t node_id_type; - uint16_t csid; ///< Connection Set Identifier - union { - uint32_t unicast_ipv4; - uint8_t unicast_ipv6[16]; - struct { - uint16_t mcc; - uint16_t mnc; - uint16_t operator_specific_id; - } exotic; - } node_id; -} FQ_CSID_t; - -typedef struct { - uint8_t time_zone; - unsigned daylight_saving_time:2; -} UETimeZone_t; - -typedef enum AccessMode_e { - CLOSED_MODE = 0, - HYBRID_MODE = 1, -} AccessMode_t; - -typedef struct { - uint8_t mcc[3]; - uint8_t mnc[3]; - uint32_t csg_id; - AccessMode_t access_mode; - unsigned lcsg:1; - unsigned cmi:1; -} UCI_t; - -typedef struct { - /* PPC (Prohibit Payload Compression): - * This flag is used to determine whether an SGSN should attempt to - * compress the payload of user data when the users asks for it - * to be compressed (PPC = 0), or not (PPC = 1). - */ - unsigned ppc:1; - - /* VB (Voice Bearer): - * This flag is used to indicate a voice bearer when doing PS-to-CS - * SRVCC handover. - */ - unsigned vb:1; -} bearer_flags_t; - -#define PRE_EMPTION_CAPABILITY_ENABLED (0x0) -#define PRE_EMPTION_CAPABILITY_DISABLED (0x1) -#define PRE_EMPTION_VULNERABILITY_ENABLED (0x0) -#define PRE_EMPTION_VULNERABILITY_DISABLED (0x1) - -typedef struct { - /* PCI (Pre-emption Capability) - * The following values are defined: - * - PRE-EMPTION_CAPABILITY_ENABLED (0) - * This value indicates that the service data flow or bearer is allowed - * to get resources that were already assigned to another service data - * flow or bearer with a lower priority level. - * - PRE-EMPTION_CAPABILITY_DISABLED (1) - * This value indicates that the service data flow or bearer is not - * allowed to get resources that were already assigned to another service - * data flow or bearer with a lower priority level. - * Default value: PRE-EMPTION_CAPABILITY_DISABLED - */ - unsigned pci:1; - /* PL (Priority Level): defined in 3GPP TS.29.212 #5.3.45 - * Values 1 to 15 are defined, with value 1 as the highest level of priority. - * Values 1 to 8 should only be assigned for services that are authorized to - * receive prioritized treatment within an operator domain. Values 9 to 15 - * may be assigned to resources that are authorized by the home network and - * thus applicable when a UE is roaming. - */ - unsigned pl:4; - /* PVI (Pre-emption Vulnerability): defined in 3GPP TS.29.212 #5.3.47 - * Defines whether a service data flow can lose the resources assigned to it - * in order to admit a service data flow with higher priority level. - * The following values are defined: - * - PRE-EMPTION_VULNERABILITY_ENABLED (0) - * This value indicates that the resources assigned to the service data - * flow or bearer can be pre-empted and allocated to a service data flow - * or bearer with a higher priority level. - * - PRE-EMPTION_VULNERABILITY_DISABLED (1) - * This value indicates that the resources assigned to the service data - * flow or bearer shall not be pre-empted and allocated to a service data - * flow or bearer with a higher priority level. - * Default value: EMPTION_VULNERABILITY_ENABLED - */ - unsigned pvi:1; - uint8_t qci; - ambr_t gbr; ///< Guaranteed bit rate - ambr_t mbr; ///< Maximum bit rate -} BearerQOS_t; - -/* TFT operation Code */ -typedef enum { - /* 0 = spare */ - - CREATE_NEW_TFT = 0x1, - DELETE_EXISTING_TFT = 0x2, - ADD_PACKET_FILTERS_TO_EXISTING_TFT = 0x3, - REPLACE_PACKET_FILTERS_IN_EXISTING_TFT = 0x4, - DELETE_PACKET_FILTERS_FROM_EXISTING_TFT = 0x5, - NO_TFT_OPERATION = 0x6, - - TFT_OPERATION_CODE_MAX - - /* Other Values Reserved */ -} tft_operation_code_t; - -/* Defined in 3GPP TS 24.008 Table 10.5.162 */ -typedef enum { - PACKET_FILTER_PRE_REL_7 = 0, - PACKET_FILTER_DIRECTION_DL_ONLY = 1, - PACKET_FILTER_DIRECTION_UL_ONLY = 2, - PACKET_FILTER_BIDIRECTIONAL = 3, -} packet_filter_direction_t; - -/* The Traffic Flow Template is specified in 3GPP TS 24.008 #10.5.6.12 - */ -typedef struct { - /* The TFT operation code "No TFT operation" shall be used - * if a parameters list is included but no packet filter - * list is included in the traffic flow template information - * element. - */ - tft_operation_code_t tft_operation_code; - - /* The E bit indicates if a parameters list is included - * in the TFT IE and it is encoded as follows: - * - 0 parameters list is not included - * - 1 parameters list is included - */ - unsigned e_bit:1; - - /* For the "delete existing TFT" operation and for the "no TFT - * operation", the number of packet filters shall be coded - * as 0. For all other operations, the number of packet filters - * shall be greater than 0 and less than or equal to 15. - */ - uint8_t number_of_packet_filters; - - /* TODO: add packet filter list as defined in 3GPP TS 29.274 Table 10.5.162 */ -} tft_t; - -typedef enum node_type_e { - NODE_TYPE_MME = 0, - NODE_TYPE_SGSN = 1 -} node_type_t; - - -/* Cause as defined in 3GPP TS 29.274 #8.4 */ -typedef enum SGWCause_e { - /* Request / Initial message */ - LOCAL_DETACH = 2, - COMPLETE_DETACH = 3, - RAT_CHANGE_3GPP_TO_NON_3GPP = 4, ///< RAT changed from 3GPP to Non-3GPP - ISR_DEACTIVATION = 5, - ERROR_IND_FROM_RNC_ENB_SGSN = 6, - IMSI_DETACH_ONLY = 7, - /* Acceptance in a Response/Triggered message */ - REQUEST_ACCEPTED = 16, - REQUEST_ACCEPTED_PARTIALLY = 17, - NEW_PDN_TYPE_NW_PREF = 18, ///< New PDN type due to network preference - NEW_PDN_TYPE_SAB_ONLY = 19, ///< New PDN type due to single address bearer only - /* Rejection in a Response triggered message. */ - CONTEXT_NOT_FOUND = 64, - INVALID_MESSAGE_FORMAT = 65, - INVALID_LENGTH = 67, - SERVICE_NOT_SUPPORTED = 68, - MANDATORY_IE_INCORRECT = 69, - MANDATORY_IE_MISSING = 70, - SYSTEM_FAILURE = 72, - NO_RESOURCES_AVAILABLE = 73, - SEMANTIC_ERROR_IN_TFT = 74, - SYNTACTIC_ERROR_IN_TFT = 75, - SEMANTIC_ERRORS_IN_PF = 76, - SYNTACTIC_ERRORS_IN_PF = 77, - MISSING_OR_UNKNOWN_APN = 78, - GRE_KEY_NOT_FOUND = 80, - RELOCATION_FAILURE = 81, - DENIED_IN_RAT = 82, - UE_NOT_RESPONDING = 87, - UE_REFUSES = 88, - SERVICE_DENIED = 89, - UNABLE_TO_PAGE_UE = 90, - NO_MEMORY_AVAILABLE = 91, - REQUEST_REJECTED = 94, - DATA_FORWARDING_NOT_SUPPORTED = 106, - INVALID_REPLY_FROM_REMOTE_PEER = 107, - FALLBACK_TO_GTPV1 = 108, - INVALID_PEER = 109, - TEMP_REJECT_HO_IN_PROGRESS = 110, ///< Temporarily rejected due to handover procedure in progress - REJECTED_FOR_PMIPv6_REASON = 112, ///< Request rejected for a PMIPv6 reason (see 3GPP TS 29.275 [26]). - M_PDN_APN_NOT_ALLOWED = 116, ///< Multiple PDN connections for a given APN not allowed. - SGW_CAUSE_MAX -} SGWCause_t; - -typedef struct { - uint8_t cause_value; - uint8_t pce:1; - uint8_t bce:1; - uint8_t cs:1; - - uint8_t offending_ie_type; - uint16_t offending_ie_length; - uint8_t offending_ie_instance; -} gtp_cause_t; - -typedef struct { - uint8_t eps_bearer_id; ///< EPS Bearer ID - BearerQOS_t bearer_level_qos; - tft_t tft; ///< Bearer TFT -} bearer_to_create_t; - -typedef struct { - uint8_t eps_bearer_id; ///< EPS Bearer ID - SGWCause_t cause; - - /* This parameter is used on S11 interface only */ - FTeid_t s1u_sgw_fteid; ///< S1-U SGW F-TEID - - /* This parameter is used on S4 interface only */ - FTeid_t s4u_sgw_fteid; ///< S4-U SGW F-TEID - - /* This parameter is used on S11 and S5/S8 interface only for a - * GTP-based S5/S8 interface and during: - * - E-UTRAN Inintial attch - * - PDP Context Activation - * - UE requested PDN connectivity - */ - FTeid_t s5_s8_u_pgw_fteid; ///< S4-U SGW F-TEID - - /* This parameter is used on S4 interface only and when S12 interface is used */ - FTeid_t s12_sgw_fteid; ///< S12 SGW F-TEID - - /* This parameter is received only if the QoS parameters have been modified */ - BearerQOS_t *bearer_level_qos; - - tft_t tft; ///< Bearer TFT -} bearer_context_created_t; - -typedef struct { - uint8_t eps_bearer_id; ///< EPS Bearer ID - SGWCause_t cause; - FTeid_t s1u_sgw_fteid; ///< Sender F-TEID for user plane -} bearer_context_modified_t; - -typedef struct { - uint8_t eps_bearer_id; ///< EPS bearer ID - SGWCause_t cause; -} bearer_for_removal_t; - -typedef struct { - uint8_t eps_bearer_id; ///< EPS Bearer ID - FTeid_t s1_eNB_fteid; ///< S1 eNodeB F-TEID -} bearer_context_to_modify_t; - -#endif /* SGW_LITE_IE_DEFS_H_ */ - diff --git a/openair-cn/SGW-LITE/sgw_lite_task.c b/openair-cn/SGW-LITE/sgw_lite_task.c deleted file mode 100644 index 27f5836bb4..0000000000 --- a/openair-cn/SGW-LITE/sgw_lite_task.c +++ /dev/null @@ -1,229 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgw_lite_task.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#define SGW_LITE -#define SGW_LITE_TASK_C - -#include -#include -#include -#include -#include - -#include "intertask_interface.h" -#include "mme_config.h" -#include "sgw_lite_defs.h" -#include "sgw_lite_handlers.h" -#include "sgw_lite.h" -#include "hashtable.h" -#include "spgw_config.h" -#include "pgw_lite_paa.h" -#include "msc.h" - -spgw_config_t spgw_config; -sgw_app_t sgw_app; -pgw_app_t pgw_app; - -static void *sgw_lite_intertask_interface(void *args_p) -{ - itti_mark_task_ready(TASK_SPGW_APP); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p; - itti_receive_msg(TASK_SPGW_APP, &received_message_p); - - switch (ITTI_MSG_ID(received_message_p)) { - case SGW_CREATE_SESSION_REQUEST: { - /* We received a create session request from MME (with GTP abstraction here) - * procedures might be: - * E-UTRAN Initial Attach - * UE requests PDN connectivity - */ - sgw_lite_handle_create_session_request(&received_message_p->ittiMsg.sgwCreateSessionRequest); - } - break; - - case SGW_MODIFY_BEARER_REQUEST: { - sgw_lite_handle_modify_bearer_request(&received_message_p->ittiMsg.sgwModifyBearerRequest); - } - break; - - case SGW_RELEASE_ACCESS_BEARERS_REQUEST: { - sgw_lite_handle_release_access_bearers_request(&received_message_p->ittiMsg.sgwReleaseAccessBearersRequest); - } - break; - - case SGW_DELETE_SESSION_REQUEST: { - sgw_lite_handle_delete_session_request(&received_message_p->ittiMsg.sgwDeleteSessionRequest); - } - break; - - case GTPV1U_CREATE_TUNNEL_RESP: { - SPGW_APP_DEBUG("Received teid for S1-U: %u and status: %s\n", - received_message_p->ittiMsg.gtpv1uCreateTunnelResp.S1u_teid , - received_message_p->ittiMsg.gtpv1uCreateTunnelResp.status == 0 ? "Success" : - "Failure"); - sgw_lite_handle_gtpv1uCreateTunnelResp(&received_message_p->ittiMsg.gtpv1uCreateTunnelResp); - } - break; - - case GTPV1U_UPDATE_TUNNEL_RESP: { - sgw_lite_handle_gtpv1uUpdateTunnelResp(&received_message_p->ittiMsg.gtpv1uUpdateTunnelResp); - } - break; - - case SGI_CREATE_ENDPOINT_RESPONSE: { - sgw_lite_handle_sgi_endpoint_created(&received_message_p->ittiMsg.sgiCreateEndpointResp); - } - break; - - case SGI_UPDATE_ENDPOINT_RESPONSE: { - sgw_lite_handle_sgi_endpoint_updated(&received_message_p->ittiMsg.sgiUpdateEndpointResp); - } - break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); - } - break; - - default: { - SPGW_APP_DEBUG("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), - ITTI_MSG_NAME(received_message_p)); - } - break; - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - - - -int sgw_lite_init(char* config_file_name_pP) -{ - SPGW_APP_DEBUG("Initializing SPGW-APP task interface\n"); - spgw_system("modprobe ip_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe x_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -P INPUT ACCEPT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -F INPUT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -P OUTPUT ACCEPT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -F OUTPUT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -P FORWARD ACCEPT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -F FORWARD", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t nat -F", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t mangle -F", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t filter -F", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t raw -F", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t nat -Z", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t mangle -Z", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t filter -Z", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("iptables -t raw -Z", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("ip route flush cache", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod iptable_raw > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod iptable_mangle > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod iptable_nat > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod iptable_filter > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod ip_tables > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod xt_state xt_mark xt_tcpudp xt_connmark ipt_LOG ipt_MASQUERADE > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod x_tables > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("rmmod nf_conntrack_netlink nfnetlink nf_nat nf_conntrack_ipv4 nf_conntrack > /dev/null 2>&1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe ip_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe iptable_filter", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe iptable_mangle", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe iptable_nat", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe iptable_raw", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe ipt_MASQUERADE", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe ipt_LOG", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe nf_conntrack", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe nf_conntrack_ipv4", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe nf_nat", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("modprobe x_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - spgw_system("sysctl -w net.ipv4.ip_forward=1", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("sysctl -w net.ipv4.conf.all.accept_local=1",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("sysctl -w net.ipv4.conf.all.log_martians=1",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("sysctl -w net.ipv4.conf.all.route_localnet=1",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("sysctl -w net.ipv4.conf.all.rp_filter=0",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - spgw_system("sync", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - - spgw_config_init(config_file_name_pP, &spgw_config); - pgw_lite_load_pool_ip_addresses(); - - sgw_app.s11teid2mme_hashtable = hashtable_create (8192, NULL, NULL); - - if (sgw_app.s11teid2mme_hashtable == NULL) { - perror("hashtable_create"); - SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n"); - return -1; - } - - sgw_app.s1uteid2enb_hashtable = hashtable_create (8192, NULL, NULL); - - if (sgw_app.s1uteid2enb_hashtable == NULL) { - perror("hashtable_create"); - SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n"); - return -1; - } - - - sgw_app.s11_bearer_context_information_hashtable = hashtable_create (8192, NULL, sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information); - - if (sgw_app.s11_bearer_context_information_hashtable == NULL) { - perror("hashtable_create"); - SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n"); - return -1; - } - - sgw_app.sgw_interface_name_for_S1u_S12_S4_up = spgw_config.sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up; - sgw_app.sgw_ip_address_for_S1u_S12_S4_up = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up; - sgw_app.sgw_interface_name_for_S11_S4 = spgw_config.sgw_config.ipv4.sgw_interface_name_for_S11; - sgw_app.sgw_ip_address_for_S11_S4 = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S11; - //sgw_app.sgw_ip_address_for_S5_S8_cp = spgw_config.sgw_config.ipv4.sgw_ip_address_for_S5_S8_cp; - sgw_app.sgw_ip_address_for_S5_S8_up = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S5_S8_up; - - if (itti_create_task(TASK_SPGW_APP, - &sgw_lite_intertask_interface, NULL) < 0) { - perror("pthread_create"); - SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n"); - return -1; - } - - SPGW_APP_DEBUG("Initializing SPGW-APP task interface: DONE\n"); - return 0; -} diff --git a/openair-cn/SGW-LITE/spgw_config.c b/openair-cn/SGW-LITE/spgw_config.c deleted file mode 100755 index 6a490e772d..0000000000 --- a/openair-cn/SGW-LITE/spgw_config.c +++ /dev/null @@ -1,601 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file spgw_config.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#define SGW_LITE -#define SPGW_CONFIG_C - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "log.h" -#include "assertions.h" -#include "spgw_config.h" -#include "sgw_lite_defs.h" -#include "intertask_interface.h" - -#ifdef LIBCONFIG_LONG -#define libconfig_int long -#else -#define libconfig_int int -#endif - -#define NIPADDR(addr) \ - (uint8_t)(addr & 0x000000FF), \ - (uint8_t)((addr & 0x0000FF00) >> 8), \ - (uint8_t)((addr & 0x00FF0000) >> 16), \ - (uint8_t)((addr & 0xFF000000) >> 24) - -#define HIPADDR(addr) \ - (uint8_t)((addr & 0xFF000000) >> 24),\ - (uint8_t)((addr & 0x00FF0000) >> 16),\ - (uint8_t)((addr & 0x0000FF00) >> 8), \ - (uint8_t)(addr & 0x000000FF) - -#define NIP6ADDR(addr) \ - ntohs((addr)->s6_addr16[0]), \ - ntohs((addr)->s6_addr16[1]), \ - ntohs((addr)->s6_addr16[2]), \ - ntohs((addr)->s6_addr16[3]), \ - ntohs((addr)->s6_addr16[4]), \ - ntohs((addr)->s6_addr16[5]), \ - ntohs((addr)->s6_addr16[6]), \ - ntohs((addr)->s6_addr16[7]) - -#define IN6_ARE_ADDR_MASKED_EQUAL(a,b,m) \ - (((((__const uint32_t *) (a))[0] & (((__const uint32_t *) (m))[0])) == (((__const uint32_t *) (b))[0] & (((__const uint32_t *) (m))[0]))) \ - && ((((__const uint32_t *) (a))[1] & (((__const uint32_t *) (m))[1])) == (((__const uint32_t *) (b))[1] & (((__const uint32_t *) (m))[1]))) \ - && ((((__const uint32_t *) (a))[2] & (((__const uint32_t *) (m))[2])) == (((__const uint32_t *) (b))[2] & (((__const uint32_t *) (m))[2]))) \ - && ((((__const uint32_t *) (a))[3] & (((__const uint32_t *) (m))[3])) == (((__const uint32_t *) (b))[3] & (((__const uint32_t *) (m))[3])))) - -void trim(char* srcP, int sizeP); -void sgw_ipv6_mask_in6_addr( struct in6_addr *addr6_pP, int maskP); - - -void -trim( - char* srcP, - int sizeP) -{ - if(srcP == NULL) - return; - - const char* current = srcP; - unsigned int i = 0; - - while((*current) != '\0' && (i < (sizeP-1))) { - if((*current != ' ') && (*current != '\t')) { - srcP[i++] = *current; - } - - ++current; - } - - srcP[i] = '\0'; -} - - - -void -sgw_ipv6_mask_in6_addr( - struct in6_addr *addr6_pP, - int maskP) -{ - int addr8_idx; - - addr8_idx = maskP / 8; - maskP = maskP % 8; - - if (maskP > 0) { - addr6_pP->s6_addr[addr8_idx] = addr6_pP->s6_addr[addr8_idx] & (0xFF << (8 - maskP)); - addr8_idx += 1; - } - - while (addr8_idx < 16) { - addr6_pP->s6_addr[addr8_idx++] = 0; - } -} - - -int spgw_system(char *command_pP, spgw_system_abort_control_e abort_on_errorP, const char * const file_nameP, const int line_numberP) -{ - int ret = -1; - - if (command_pP) { - SPGW_APP_INFO("system command: %s\n",command_pP); - ret = system(command_pP); - - if (ret != 0) { - SPGW_APP_ERROR("ERROR in system command %s: %d at %s:%u\n", - command_pP,ret, file_nameP, line_numberP); - - if (abort_on_errorP) { - exit(-1); // may be not exit - } - } - } - - return ret; -} - -int spgw_config_process(spgw_config_t* config_pP) -{ - char system_cmd[256]; - struct in_addr inaddr; - int ret = 0; - - inaddr.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up; - - if (strncasecmp("lo",config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up, strlen("lo")) == 0) { - config_pP->sgw_config.local_to_eNB = TRUE; - - } else { - config_pP->sgw_config.local_to_eNB = FALSE; - - if (snprintf(system_cmd, 256, - "insmod $OPENAIR_TARGETS/bin/xt_GTPUSP.ko gtpu_enb_port=2152 gtpu_sgw_port=%u sgw_addr=\"%s\" ", - config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up, - inet_ntoa(inaddr)) > 0) { - ret += spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("GTPUSP kernel module\n"); - ret = -1; - } - } - - if (config_pP->sgw_config.local_to_eNB == TRUE) { - - if (snprintf(system_cmd, 256, - "iptables -t filter -I INPUT -i lo -d %s --protocol sctp -j DROP", - inet_ntoa(inaddr)) > 0) { - ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Drop SCTP traffic on S1U\n"); - ret = -1; - } - - if (snprintf(system_cmd, 256, - "iptables -t filter -I INPUT -i lo -s %s --protocol sctp -j DROP", - inet_ntoa(inaddr)) > 0) { - ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Drop SCTP traffic on S1U\n"); - ret = -1; - } - - if (snprintf(system_cmd, 256, - "insmod $OPENAIR_TARGETS/bin/xt_GTPUSP.ko gtpu_enb_port=2153 gtpu_sgw_port=%u sgw_addr=\"%s\" ", - config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up, - inet_ntoa(inaddr)) > 0) { - ret += spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("GTPUSP kernel module\n"); - ret = -1; - } - } - - - ret += spgw_system("echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - - - if (snprintf(system_cmd, 256, - "ethtool -K %s tso off gso off gro off", - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { - SPGW_APP_INFO("Disable tcp segmentation offload, generic segmentation offload: %s\n",system_cmd); - ret += spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Disable tcp segmentation offload, generic segmentation offload\n"); - ret = -1; - } - - return ret; -} - - -int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) -{ - - config_t cfg; - config_setting_t *setting_sgw = NULL; - char *sgw_interface_name_for_S1u_S12_S4_up = NULL; - char *sgw_ipv4_address_for_S1u_S12_S4_up = NULL; - char *sgw_interface_name_for_S5_S8_up = NULL; - char *sgw_ipv4_address_for_S5_S8_up = NULL; - char *sgw_interface_name_for_S11 = NULL; - char *sgw_ipv4_address_for_S11 = NULL; - char *sgw_drop_uplink_s1u_traffic = NULL; - char *sgw_drop_downlink_s1u_traffic = NULL; - libconfig_int sgw_udp_port_for_S1u_S12_S4_up = 2152; - - config_setting_t *setting_pgw = NULL; - config_setting_t *subsetting = NULL; - config_setting_t *sub2setting = NULL; - char *pgw_interface_name_for_S5_S8 = NULL; - char *pgw_ipv4_address_for_S5_S8 = NULL; - char *pgw_interface_name_for_SGI = NULL; - char *pgw_ipv4_address_for_SGI = NULL; - char *pgw_masquerade_SGI = NULL; - char *pgw_default_dns_ipv4_address = NULL; - char *pgw_default_dns_sec_ipv4_address = NULL; - - char *astring = NULL; - char *atoken = NULL; - char *atoken2 = NULL; - char *address = NULL; - char *cidr = NULL; - char *mask = NULL; - int num = 0; - int i = 0; - unsigned char buf_in6_addr[sizeof(struct in6_addr)]; - struct in6_addr addr6_start; - struct in6_addr addr6_mask; - int prefix_mask = 0; - uint64_t counter64 = 0; - unsigned char buf_in_addr[sizeof(struct in_addr)]; - struct in_addr addr_start,in_addr_var; - struct in_addr addr_mask; - pgw_lite_conf_ipv4_list_elm_t *ip4_ref = NULL; - pgw_lite_conf_ipv6_list_elm_t *ip6_ref = NULL; - char system_cmd[256]; - - memset((char*)config_pP, 0 , sizeof(spgw_config_t)); - STAILQ_INIT(&config_pP->pgw_config.pgw_lite_ipv4_pool_list); - STAILQ_INIT(&config_pP->pgw_config.pgw_lite_ipv6_pool_list); - - config_init(&cfg); - - if(lib_config_file_name_pP != NULL) { - /* Read the file. If there is an error, report it and exit. */ - if(! config_read_file(&cfg, lib_config_file_name_pP)) { - SPGW_APP_ERROR("%s:%d - %s\n", lib_config_file_name_pP, config_error_line(&cfg), config_error_text(&cfg)); - config_destroy(&cfg); - AssertFatal (1 == 0, "Failed to parse SP-GW configuration file %s!\n", lib_config_file_name_pP); - } - } else { - SPGW_APP_ERROR("No SP-GW configuration file provided!\n"); - config_destroy(&cfg); - AssertFatal (0, "No SP-GW configuration file provided!\n"); - } - - SPGW_APP_INFO("Parsing configuration file provided %s\n", lib_config_file_name_pP); - - setting_sgw = config_lookup(&cfg, SGW_CONFIG_STRING_SGW_CONFIG); - - if(setting_sgw != NULL) { - subsetting = config_setting_get_member (setting_sgw, SGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); - - if(subsetting != NULL) { - if( ( - config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP, (const char **)&sgw_interface_name_for_S1u_S12_S4_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP, (const char **)&sgw_ipv4_address_for_S1u_S12_S4_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S5_S8_UP, (const char **)&sgw_interface_name_for_S5_S8_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S5_S8_UP, (const char **)&sgw_ipv4_address_for_S5_S8_up) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S11, (const char **)&sgw_interface_name_for_S11) - && config_setting_lookup_string( subsetting, SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S11, (const char **)&sgw_ipv4_address_for_S11) - ) - ) { - config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up = strdup(sgw_interface_name_for_S1u_S12_S4_up); - cidr = strdup(sgw_ipv4_address_for_S1u_S12_S4_up); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up, "BAD IP ADDRESS FORMAT FOR S1u_S12_S4 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S1u_S12_S4_up = atoi(mask); - free(cidr); - - in_addr_var.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up; - SPGW_APP_INFO("Parsing configuration file found sgw_ipv4_address_for_S1u_S12_S4_up: %s/%d on %s\n", - inet_ntoa(in_addr_var), - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S1u_S12_S4_up, - config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up); - - - config_pP->sgw_config.ipv4.sgw_interface_name_for_S5_S8_up = strdup(sgw_interface_name_for_S5_S8_up); - cidr = strdup(sgw_ipv4_address_for_S5_S8_up); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S5_S8_up, "BAD IP ADDRESS FORMAT FOR S5_S8 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S5_S8_up = atoi(mask); - free(cidr); - in_addr_var.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S5_S8_up; - SPGW_APP_INFO("Parsing configuration file found sgw_ipv4_address_for_S5_S8_up: %s/%d on %s\n", - inet_ntoa(in_addr_var), - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S5_S8_up, - config_pP->sgw_config.ipv4.sgw_interface_name_for_S5_S8_up); - - config_pP->sgw_config.ipv4.sgw_interface_name_for_S11 = strdup(sgw_interface_name_for_S11); - cidr = strdup(sgw_ipv4_address_for_S11); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S11, "BAD IP ADDRESS FORMAT FOR S11 !\n" ) - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S11 = atoi(mask); - free(cidr); - in_addr_var.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S11; - SPGW_APP_INFO("Parsing configuration file found sgw_ipv4_address_for_S11: %s/%d on %s\n", - inet_ntoa(in_addr_var), - config_pP->sgw_config.ipv4.sgw_ip_netmask_for_S11, - config_pP->sgw_config.ipv4.sgw_interface_name_for_S11); - } - - - if(config_setting_lookup_int( - subsetting, - SGW_CONFIG_STRING_SGW_PORT_FOR_S1U_S12_S4_UP, - &sgw_udp_port_for_S1u_S12_S4_up) - ) { - config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up = sgw_udp_port_for_S1u_S12_S4_up; - } else { - config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up = sgw_udp_port_for_S1u_S12_S4_up; - } - - } - } - - setting_pgw = config_lookup(&cfg, PGW_CONFIG_STRING_PGW_CONFIG); - - if(setting_pgw != NULL) { - subsetting = config_setting_get_member (setting_pgw, PGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); - - if(subsetting != NULL) { - if( ( - config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_S5_S8, - (const char **)&pgw_interface_name_for_S5_S8) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_IPV4_ADDRESS_FOR_S5_S8, - (const char **)&pgw_ipv4_address_for_S5_S8) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_SGI, - (const char **)&pgw_interface_name_for_SGI) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_IPV4_ADDR_FOR_SGI, - (const char **)&pgw_ipv4_address_for_SGI) - && config_setting_lookup_string(subsetting, - PGW_CONFIG_STRING_PGW_MASQUERADE_SGI, - (const char **)&pgw_masquerade_SGI) - ) - ) { - config_pP->pgw_config.ipv4.pgw_interface_name_for_S5_S8 = strdup(pgw_interface_name_for_S5_S8); - cidr = strdup(pgw_ipv4_address_for_S5_S8); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->pgw_config.ipv4.pgw_ipv4_address_for_S5_S8, "BAD IP ADDRESS FORMAT FOR S5_S8 !\n" ) - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_S5_S8 = atoi(mask); - free(cidr); - in_addr_var.s_addr = config_pP->pgw_config.ipv4.pgw_ipv4_address_for_S5_S8; - SPGW_APP_INFO("Parsing configuration file found pgw_ipv4_address_for_S5_S8: %s/%d on %s\n", - inet_ntoa(in_addr_var), - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_S5_S8, - config_pP->pgw_config.ipv4.pgw_interface_name_for_S5_S8); - - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI = strdup(pgw_interface_name_for_SGI); - cidr = strdup(pgw_ipv4_address_for_SGI); - address = strtok(cidr, "/"); - mask = strtok(NULL, "/"); - IPV4_STR_ADDR_TO_INT_NWBO ( address, config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI, "BAD IP ADDRESS FORMAT FOR SGI !\n" ) - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_SGI = atoi(mask); - free(cidr); - in_addr_var.s_addr = config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI; - SPGW_APP_INFO("Parsing configuration file found pgw_ipv4_address_for_SGI: %s/%d on %s\n", - inet_ntoa(in_addr_var), - config_pP->pgw_config.ipv4.pgw_ip_netmask_for_SGI, - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI); - - if (strcasecmp(pgw_masquerade_SGI, "yes") == 0) { - config_pP->pgw_config.pgw_masquerade_SGI=1; - } else { - config_pP->pgw_config.pgw_masquerade_SGI=0; - SPGW_APP_INFO("No masquerading for SGI\n"); - } - } else { - SPGW_APP_WARN("CONFIG P-GW / NETWORK INTERFACES parsing failed\n"); - } - } else { - SPGW_APP_WARN("CONFIG P-GW / NETWORK INTERFACES not found\n"); - } - - //!!!------------------------------------!!! - spgw_config_process(config_pP); - //!!!------------------------------------!!! - - subsetting = config_setting_get_member (setting_pgw, PGW_CONFIG_STRING_IP_ADDRESS_POOL); - - if(subsetting != NULL) { - sub2setting = config_setting_get_member (subsetting, PGW_CONFIG_STRING_IPV4_ADDRESS_LIST); - - if(sub2setting != NULL) { - num = config_setting_length(sub2setting); - - for (i = 0; i < num; i++) { - astring = config_setting_get_string_elem(sub2setting,i); - - if (astring != NULL) { - trim(astring, strlen(astring)+1); - // failure, test if there is a range specified in the string - atoken = strtok(astring, PGW_CONFIG_STRING_IPV4_PREFIX_DELIMITER); - - if (inet_pton(AF_INET, atoken, buf_in_addr) == 1) { - memcpy (&addr_start, buf_in_addr, sizeof(struct in_addr)); - // valid address - atoken2 = strtok(NULL, PGW_CONFIG_STRING_IPV4_PREFIX_DELIMITER); - prefix_mask = atoi(atoken2); - - in_addr_var.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up; - - if (snprintf(system_cmd, 256, - "iptables -I PREROUTING -t mangle -i %s -d %s/%s ! --protocol sctp -j CONNMARK --restore-mark", - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI, astring, atoken2) > 0) { - spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Restore mark\n"); - } - - if (snprintf(system_cmd, 256, - "iptables -I OUTPUT -t mangle -s %s/%s -m mark ! --mark 0 -j CONNMARK --save-mark", - astring, atoken2) > 0) { - spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Save mark\n"); - } - if (snprintf(system_cmd, 256, - "ip route add %s/%s dev %s", - astring, atoken2, config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up) > 0) { - spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Route for UEs\n"); - } - - - if ((prefix_mask >= 2)&&(prefix_mask < 32)) { - memcpy (&addr_start, buf_in_addr, sizeof(struct in_addr)); - memcpy (&addr_mask, buf_in_addr, sizeof(struct in_addr)); - - addr_mask.s_addr = addr_mask.s_addr & htonl(0xFFFFFFFF << (32 - prefix_mask)); - - if (memcmp(&addr_start, &addr_mask, sizeof(struct in_addr)) != 0) { - AssertFatal(0, "BAD IPV4 ADDR CONFIG/MASK PAIRING %s/%d addr %X mask %X\n", - astring, prefix_mask, addr_start.s_addr, addr_mask.s_addr); - } - - counter64 = 0x00000000FFFFFFFF >> prefix_mask; // address Prefix_mask/0..0 not valid - counter64 = counter64 - 2; - - do { - addr_start.s_addr = addr_start.s_addr + htonl(2); - ip4_ref = calloc(1, sizeof(pgw_lite_conf_ipv4_list_elm_t)); - ip4_ref->addr = addr_start; - - STAILQ_INSERT_TAIL(&config_pP->pgw_config.pgw_lite_ipv4_pool_list, ip4_ref, ipv4_entries); - counter64 = counter64 - 1; - } while (counter64 > 0); - - //--------------- - if (config_pP->pgw_config.pgw_masquerade_SGI) { - in_addr_var.s_addr = config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI; - - if (snprintf(system_cmd, 256, - //"iptables -t nat -I POSTROUTING -s %s/%s -o %s ! --protocol sctp -j SNAT --to-source %s", - "iptables -t nat -I POSTROUTING -s %s/%s ! --protocol sctp -j SNAT --to-source %s", - astring, - atoken2, - //config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI, - inet_ntoa(in_addr_var)) > 0) { - SPGW_APP_INFO("Masquerade SGI: %s\n",system_cmd); - spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Masquerade SGI\n"); - } - } - } else { - SPGW_APP_ERROR("CONFIG POOL ADDR IPV4: BAD MASQ: %s\n", atoken2); - } - } - } - } - } else { - SPGW_APP_WARN("CONFIG POOL ADDR IPV4: NO IPV4 ADDRESS FOUND\n"); - } - - sub2setting = config_setting_get_member (subsetting, PGW_CONFIG_STRING_IPV6_ADDRESS_LIST); - - if(sub2setting != NULL) { - num = config_setting_length(sub2setting); - - for (i = 0; i < num; i++) { - astring = config_setting_get_string_elem(sub2setting,i); - - if (astring != NULL) { - trim(astring, strlen(astring)+1); - - if (inet_pton(AF_INET6, astring, buf_in6_addr) < 1) { - // failure, test if there is a range specified in the string - atoken = strtok(astring, PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER); - - if (inet_pton(AF_INET6, astring, buf_in6_addr) == 1) { - atoken2 = strtok(NULL, PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER); - prefix_mask = atoi(atoken2); - // arbitrary values - DevAssert((prefix_mask < 128) && (prefix_mask >= 64)); - - memcpy (&addr6_start, buf_in6_addr, sizeof(struct in6_addr)); - memcpy (&addr6_mask, buf_in6_addr, sizeof(struct in6_addr)); - sgw_ipv6_mask_in6_addr(&addr6_mask, prefix_mask); - - if (memcmp(&addr6_start, &addr6_mask, sizeof(struct in6_addr)) != 0) { - AssertFatal(0, "BAD IPV6 ADDR CONFIG/MASK PAIRING %s/%d\n", astring, prefix_mask); - } - - - ip6_ref = calloc(1, sizeof(pgw_lite_conf_ipv6_list_elm_t)); - ip6_ref->addr = addr6_start; - ip6_ref->prefix_len = prefix_mask; - STAILQ_INSERT_TAIL(&config_pP->pgw_config.pgw_lite_ipv6_pool_list, ip6_ref, ipv6_entries); - - } - } else { - SPGW_APP_WARN("CONFIG POOL ADDR IPV6: FAILED WHILE PARSING %s\n", astring); - } - } - } - } - - if( - config_setting_lookup_string(setting_pgw, - PGW_CONFIG_STRING_DEFAULT_DNS_IPV4_ADDRESS, - (const char **)&pgw_default_dns_ipv4_address) - && config_setting_lookup_string(setting_pgw, - PGW_CONFIG_STRING_DEFAULT_DNS_SEC_IPV4_ADDRESS, - (const char **)&pgw_default_dns_sec_ipv4_address)) { - config_pP->pgw_config.ipv4.pgw_interface_name_for_S5_S8 = strdup(pgw_interface_name_for_S5_S8); - IPV4_STR_ADDR_TO_INT_NWBO ( pgw_default_dns_ipv4_address, config_pP->pgw_config.ipv4.default_dns_v4, "BAD IPv4 ADDRESS FORMAT FOR DEFAULT DNS !\n" ) - IPV4_STR_ADDR_TO_INT_NWBO ( pgw_default_dns_sec_ipv4_address, config_pP->pgw_config.ipv4.default_dns_sec_v4, "BAD IPv4 ADDRESS FORMAT FOR DEFAULT DNS SEC!\n" ) - SPGW_APP_INFO("Parsing configuration file default primary DNS IPv4 address: %x\n", - config_pP->pgw_config.ipv4.default_dns_v4); - SPGW_APP_INFO("Parsing configuration file default secondary DNS IPv4 address: %x\n", - config_pP->pgw_config.ipv4.default_dns_sec_v4); - } else { - SPGW_APP_WARN("NO DNS CONFIGURATION FOUND\n"); - } - } - } else { - SPGW_APP_WARN("CONFIG P-GW not found\n"); - } - - return 0; -} diff --git a/openair-cn/SGW-LITE/spgw_config.h b/openair-cn/SGW-LITE/spgw_config.h deleted file mode 100755 index 5a201e4482..0000000000 --- a/openair-cn/SGW-LITE/spgw_config.h +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file spgw_config.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#ifndef SPGW_CONFIG_H_ -#define SPGW_CONFIG_H_ -#include // inet_aton -#include // inet_aton -#include // inet_aton - -#include "queue.h" - -#define SGW_CONFIG_STRING_SGW_CONFIG "S-GW" -#define SGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES" -#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP "SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP" -#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP "SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP" -#define SGW_CONFIG_STRING_SGW_PORT_FOR_S1U_S12_S4_UP "SGW_IPV4_PORT_FOR_S1U_S12_S4_UP" -#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S5_S8_UP "SGW_INTERFACE_NAME_FOR_S5_S8_UP" -#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S5_S8_UP "SGW_IPV4_ADDRESS_FOR_S5_S8_UP" -#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S11 "SGW_INTERFACE_NAME_FOR_S11" -#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S11 "SGW_IPV4_ADDRESS_FOR_S11" - -#define PGW_CONFIG_STRING_PGW_CONFIG "P-GW" -#define PGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES" -#define PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_S5_S8 "PGW_INTERFACE_NAME_FOR_S5_S8" -#define PGW_CONFIG_STRING_PGW_IPV4_ADDRESS_FOR_S5_S8 "PGW_IPV4_ADDRESS_FOR_S5_S8" -#define PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_SGI "PGW_INTERFACE_NAME_FOR_SGI" -#define PGW_CONFIG_STRING_PGW_IPV4_ADDR_FOR_SGI "PGW_IPV4_ADDRESS_FOR_SGI" -#define PGW_CONFIG_STRING_PGW_MASQUERADE_SGI "PGW_MASQUERADE_SGI" - -#define PGW_CONFIG_STRING_IP_ADDRESS_POOL "IP_ADDRESS_POOL" -#define PGW_CONFIG_STRING_IPV4_ADDRESS_LIST "IPV4_LIST" -#define PGW_CONFIG_STRING_IPV6_ADDRESS_LIST "IPV6_LIST" -#define PGW_CONFIG_STRING_IPV4_PREFIX_DELIMITER " /" -#define PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER " /" -#define PGW_CONFIG_STRING_DEFAULT_DNS_IPV4_ADDRESS "DEFAULT_DNS_IPV4_ADDRESS" -#define PGW_CONFIG_STRING_DEFAULT_DNS_SEC_IPV4_ADDRESS "DEFAULT_DNS_SEC_IPV4_ADDRESS" - -#define PGW_CONFIG_STRING_INTERFACE_DISABLED "none" - -#define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\ - struct in_addr inp;\ - if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\ - AssertFatal (0, MeSsAgE);\ - } else {\ - NwBo = inp.s_addr;\ - }\ - } while (0); - -typedef struct sgw_config_s { - struct { - char *sgw_interface_name_for_S1u_S12_S4_up; - uint32_t sgw_ipv4_address_for_S1u_S12_S4_up; - int sgw_ip_netmask_for_S1u_S12_S4_up; - - char *sgw_interface_name_for_S5_S8_up; - uint32_t sgw_ipv4_address_for_S5_S8_up; - int sgw_ip_netmask_for_S5_S8_up; - - char *sgw_interface_name_for_S11; - uint32_t sgw_ipv4_address_for_S11; - int sgw_ip_netmask_for_S11; - } ipv4; - int sgw_udp_port_for_S1u_S12_S4_up; - - uint8_t sgw_drop_uplink_traffic; - uint8_t sgw_drop_downlink_traffic; - uint8_t local_to_eNB; -} sgw_config_t; - -// may be more -#define PGW_MAX_ALLOCATED_PDN_ADDRESSES 1024 - - -typedef struct pgw_lite_conf_ipv4_list_elm_s { - STAILQ_ENTRY(pgw_lite_conf_ipv4_list_elm_s) ipv4_entries; - struct in_addr addr; -} pgw_lite_conf_ipv4_list_elm_t; - - -typedef struct pgw_lite_conf_ipv6_list_elm_s { - STAILQ_ENTRY(pgw_lite_conf_ipv6_list_elm_s) ipv6_entries; - struct in6_addr addr; - int prefix_len; -} pgw_lite_conf_ipv6_list_elm_t; - - -typedef struct pgw_config_s { - struct { - char *pgw_interface_name_for_S5_S8; - uint32_t pgw_ipv4_address_for_S5_S8; - int pgw_ip_netmask_for_S5_S8; - - char *pgw_interface_name_for_SGI; - uint32_t pgw_ipv4_address_for_SGI; - int pgw_ip_netmask_for_SGI; - - uint32_t default_dns_v4; // NBO - uint32_t default_dns_sec_v4;// NBO - } ipv4; - uint8_t pgw_masquerade_SGI; - - STAILQ_HEAD(pgw_lite_ipv4_pool_head_s, pgw_lite_conf_ipv4_list_elm_s) pgw_lite_ipv4_pool_list; - STAILQ_HEAD(pgw_lite_ipv6_pool_head_s, pgw_lite_conf_ipv6_list_elm_s) pgw_lite_ipv6_pool_list; -} pgw_config_t; - -typedef struct spgw_config_s { - sgw_config_t sgw_config; - pgw_config_t pgw_config; -} spgw_config_t; - -#ifndef SGW_LITE -extern spgw_config_t spgw_config; -#endif - -typedef enum { SPGW_WARN_ON_ERROR = 0, SPGW_ABORT_ON_ERROR} spgw_system_abort_control_e; - -int spgw_system(char *command_pP, spgw_system_abort_control_e abort_on_errorP, const char * const file_nameP, const int line_numberP); -int spgw_config_process(spgw_config_t* config_pP); -int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP); - -#endif /* ENB_CONFIG_H_ */ diff --git a/openair-cn/TEST/EPC_TEST/generate_scenario.c b/openair-cn/TEST/EPC_TEST/generate_scenario.c index bda35e413a..44a38a57c6 100644 --- a/openair-cn/TEST/EPC_TEST/generate_scenario.c +++ b/openair-cn/TEST/EPC_TEST/generate_scenario.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/Makefile.am b/openair-cn/TEST/Makefile.am index 29aca6ce15..7bc55fe600 100644 --- a/openair-cn/TEST/Makefile.am +++ b/openair-cn/TEST/Makefile.am @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/openair-cn/TEST/oaisim_mme_client_test.c b/openair-cn/TEST/oaisim_mme_client_test.c index 6fe0329d8f..b2eea62424 100644 --- a/openair-cn/TEST/oaisim_mme_client_test.c +++ b/openair-cn/TEST/oaisim_mme_client_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/oaisim_mme_itti_test.c b/openair-cn/TEST/oaisim_mme_itti_test.c index 599a089d8c..06fb3e191c 100644 --- a/openair-cn/TEST/oaisim_mme_itti_test.c +++ b/openair-cn/TEST/oaisim_mme_itti_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/oaisim_mme_list_benchmark.c b/openair-cn/TEST/oaisim_mme_list_benchmark.c index 5396a151bc..8aaf8d1ddd 100644 --- a/openair-cn/TEST/oaisim_mme_list_benchmark.c +++ b/openair-cn/TEST/oaisim_mme_list_benchmark.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/oaisim_mme_s1ap_test.c b/openair-cn/TEST/oaisim_mme_s1ap_test.c index d03e1bbed6..af3585ded0 100644 --- a/openair-cn/TEST/oaisim_mme_s1ap_test.c +++ b/openair-cn/TEST/oaisim_mme_s1ap_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/oaisim_mme_sctp_test.c b/openair-cn/TEST/oaisim_mme_sctp_test.c index 8dd5b192b8..4c433c8bf3 100644 --- a/openair-cn/TEST/oaisim_mme_sctp_test.c +++ b/openair-cn/TEST/oaisim_mme_sctp_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/oaisim_mme_test_s1c.c b/openair-cn/TEST/oaisim_mme_test_s1c.c index 0f1d1e6428..d7af00086b 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c.h b/openair-cn/TEST/oaisim_mme_test_s1c.h index af59dd1a23..0927ab6ad6 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c.h +++ b/openair-cn/TEST/oaisim_mme_test_s1c.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c index a46c8fa6b4..836a54b42f 100755 --- a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h index 3e3c186d19..a4570b97bc 100755 --- a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h +++ b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c index 416ac99904..1cf9208870 100755 --- a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h index 25bbdb9c87..6187f02d7f 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c b/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c index 93d7e5fedf..3fc1fbad7b 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair-cn/TEST/test_aes128_cmac_encrypt.c b/openair-cn/TEST/test_aes128_cmac_encrypt.c index af5b864f67..22eb244579 100644 --- a/openair-cn/TEST/test_aes128_cmac_encrypt.c +++ b/openair-cn/TEST/test_aes128_cmac_encrypt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_aes128_ctr_decrypt.c b/openair-cn/TEST/test_aes128_ctr_decrypt.c index c33fc36241..f3740b48ff 100644 --- a/openair-cn/TEST/test_aes128_ctr_decrypt.c +++ b/openair-cn/TEST/test_aes128_ctr_decrypt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_aes128_ctr_encrypt.c b/openair-cn/TEST/test_aes128_ctr_encrypt.c index 6558e49792..a089ac549d 100644 --- a/openair-cn/TEST/test_aes128_ctr_encrypt.c +++ b/openair-cn/TEST/test_aes128_ctr_encrypt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_kdf.c b/openair-cn/TEST/test_kdf.c index 414520b651..2a66527773 100644 --- a/openair-cn/TEST/test_kdf.c +++ b/openair-cn/TEST/test_kdf.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_s1ap.c b/openair-cn/TEST/test_s1ap.c index d6413f1341..e070e7018d 100644 --- a/openair-cn/TEST/test_s1ap.c +++ b/openair-cn/TEST/test_s1ap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu.c b/openair-cn/TEST/test_secu.c index 316d90c825..ac3788eebd 100644 --- a/openair-cn/TEST/test_secu.c +++ b/openair-cn/TEST/test_secu.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_kenb.c b/openair-cn/TEST/test_secu_kenb.c index 3ba2cdc937..16f6a8eadc 100644 --- a/openair-cn/TEST/test_secu_kenb.c +++ b/openair-cn/TEST/test_secu_kenb.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas.c b/openair-cn/TEST/test_secu_knas.c index 92d3743788..ecf213f7b3 100644 --- a/openair-cn/TEST/test_secu_knas.c +++ b/openair-cn/TEST/test_secu_knas.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas_encrypt_eea1.c b/openair-cn/TEST/test_secu_knas_encrypt_eea1.c index 6a110a63cb..9c54828ff4 100755 --- a/openair-cn/TEST/test_secu_knas_encrypt_eea1.c +++ b/openair-cn/TEST/test_secu_knas_encrypt_eea1.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas_encrypt_eea2.c b/openair-cn/TEST/test_secu_knas_encrypt_eea2.c index bb26ce5a88..712da6d947 100644 --- a/openair-cn/TEST/test_secu_knas_encrypt_eea2.c +++ b/openair-cn/TEST/test_secu_knas_encrypt_eea2.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas_encrypt_eia1.c b/openair-cn/TEST/test_secu_knas_encrypt_eia1.c index b634a2ea49..9a53079098 100755 --- a/openair-cn/TEST/test_secu_knas_encrypt_eia1.c +++ b/openair-cn/TEST/test_secu_knas_encrypt_eia1.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas_encrypt_eia2.c b/openair-cn/TEST/test_secu_knas_encrypt_eia2.c index 03a510c146..f85ddc0fea 100644 --- a/openair-cn/TEST/test_secu_knas_encrypt_eia2.c +++ b/openair-cn/TEST/test_secu_knas_encrypt_eia2.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/TEST/test_secu_knas_stream_int.c b/openair-cn/TEST/test_secu_knas_stream_int.c index 7f1ba2df1c..731af2df8a 100644 --- a/openair-cn/TEST/test_secu_knas_stream_int.c +++ b/openair-cn/TEST/test_secu_knas_stream_int.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/UDP/Makefile.am b/openair-cn/UDP/Makefile.am deleted file mode 100644 index 907bc2099a..0000000000 --- a/openair-cn/UDP/Makefile.am +++ /dev/null @@ -1,45 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -noinst_LTLIBRARIES = libudpserver.la -libudpserver_la_LDFLAGS = -all-static - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/UTILS - -libudpserver_la_SOURCES = \ - udp_primitives_server.h udp_primitives_server.c \ No newline at end of file diff --git a/openair-cn/UDP/Makefile.eNB b/openair-cn/UDP/Makefile.eNB deleted file mode 100644 index 2d34681408..0000000000 --- a/openair-cn/UDP/Makefile.eNB +++ /dev/null @@ -1,69 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# include $(OPENAIR_TARGETS)/SIMU/USER/Makerules - -OUTDIR = . - -libudp_OBJECTS = \ - udp_eNB_task.o - -# pull in dependency info for *existing* .o files --include $(OUTDIR)/*.d - -CFLAGS = \ - -Wall \ - $(UDP_CFLAGS) \ - -DENB_MODE \ - -Werror=uninitialized \ - -Werror=implicit-function-declaration - -$(OUTDIR)/%.o : %.c - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -objsdir: - @if [ ! -d $(OUTDIR) ]; then mkdir -p $(OUTDIR); fi; - -$(OUTDIR)/libudp.a: $(addprefix $(OUTDIR)/,$(libudp_OBJECTS)) - @echo Creating UDP archive - @$(AR) rcs $@ $(addprefix $(OUTDIR)/,$(libudp_OBJECTS)) - -clean: - @$(RM_F_V) $(OUTDIR)/*.o - @$(RM_F_V) $(OUTDIR)/*.d - @$(RM_F_V) $(OUTDIR)/libudp.a - -cleanall: clean diff --git a/openair-cn/UDP/udp_eNB_task.c b/openair-cn/UDP/udp_eNB_task.c index 32b3317fcf..3e53f9f62f 100644 --- a/openair-cn/UDP/udp_eNB_task.c +++ b/openair-cn/UDP/udp_eNB_task.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/UDP/udp_eNB_task.h b/openair-cn/UDP/udp_eNB_task.h index 89a79e57a4..37ff413bf7 100644 --- a/openair-cn/UDP/udp_eNB_task.h +++ b/openair-cn/UDP/udp_eNB_task.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair-cn/UDP/udp_primitives_server.c b/openair-cn/UDP/udp_primitives_server.c deleted file mode 100644 index 6639331ee8..0000000000 --- a/openair-cn/UDP/udp_primitives_server.c +++ /dev/null @@ -1,457 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file udp_primitives_server.c -* \brief -* \author Sebastien ROUX, Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - - -#include - -#include "intertask_interface.h" -#include "udp_primitives_server.h" - -#include "assertions.h" -#include "conversions.h" -#include "msc.h" - -#define UDP_DEBUG(x, args...) do { fprintf(stdout, "[UDP] [D]"x, ##args); } while(0) -#define UDP_ERROR(x, args...) do { fprintf(stderr, "[UDP] [E]"x, ##args); } while(0) - -//void *udp_receiver_thread(void *args_p); - -struct udp_socket_desc_s { - uint8_t buffer[4096]; - int sd; /* Socket descriptor to use */ - - pthread_t listener_thread; /* Thread affected to recv */ - - char *local_address; /* Local ipv4 address to use */ - uint16_t local_port; /* Local port to use */ - - task_id_t task_id; /* Task who has requested the new endpoint */ - - STAILQ_ENTRY(udp_socket_desc_s) entries; -}; - -static STAILQ_HEAD(udp_socket_list_s, udp_socket_desc_s) udp_socket_list; -static pthread_mutex_t udp_socket_list_mutex = PTHREAD_MUTEX_INITIALIZER; - -//----------------------------------------------------------------------------- -void udp_print_hex_octets(unsigned char* dataP, unsigned long sizeP) -//----------------------------------------------------------------------------- -{ - unsigned long octet_index = 0; - unsigned long buffer_marker = 0; - unsigned char aindex; -#define UDP_2_PRINT_BUFFER_LEN 8000 - char udp_2_print_buffer[UDP_2_PRINT_BUFFER_LEN]; - struct timeval tv; - struct timezone tz; - char timeofday[64]; - - unsigned int h,m,s; - - if (dataP == NULL) { - return; - } - - gettimeofday(&tv, &tz); - h = tv.tv_sec/3600/24; - m = (tv.tv_sec / 60) % 60; - s = tv.tv_sec % 60; - snprintf(timeofday, 64, "%02d:%02d:%02d.%06d", h,m,s,tv.tv_usec); - - UDP_DEBUG("%s------+-------------------------------------------------|\n",timeofday); - UDP_DEBUG("%s | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n",timeofday); - UDP_DEBUG("%s------+-------------------------------------------------|\n",timeofday); - - for (octet_index = 0; octet_index < sizeP; octet_index++) { - if (UDP_2_PRINT_BUFFER_LEN < (buffer_marker + 32)) { - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, - "... (print buffer overflow)"); - UDP_DEBUG("%s%s",timeofday,udp_2_print_buffer); - return; - } - - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - UDP_DEBUG("%s%s",timeofday, udp_2_print_buffer); - buffer_marker = 0; - } - - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, " %04ld |", octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, " %02x", dataP[octet_index]); - /* - * Align newline and pipes according to the octets in groups of 2 - */ - } - - /* - * Append enough spaces and put final pipe - */ - for (aindex = octet_index; aindex < 16; ++aindex) - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, " "); - - //GTPU_DEBUG(" "); - buffer_marker+=snprintf(&udp_2_print_buffer[buffer_marker], UDP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - UDP_DEBUG("%s%s",timeofday,udp_2_print_buffer); -} - - -static void udp_server_receive_and_process(struct udp_socket_desc_s *udp_sock_pP); - - -/* @brief Retrieve the descriptor associated with the task_id - */ -static -struct udp_socket_desc_s *udp_server_get_socket_desc(task_id_t task_id) -{ - struct udp_socket_desc_s *udp_sock_p = NULL; - - UDP_DEBUG("Looking for task %d\n", task_id); - - STAILQ_FOREACH(udp_sock_p, &udp_socket_list, entries) { - if (udp_sock_p->task_id == task_id) { - UDP_DEBUG("Found matching task desc\n"); - break; - } - } - return udp_sock_p; -} -static -struct udp_socket_desc_s *udp_server_get_socket_desc_by_sd(int sdP) -{ - struct udp_socket_desc_s *udp_sock_p = NULL; - - UDP_DEBUG("Looking for sd %d\n", sdP); - - STAILQ_FOREACH(udp_sock_p, &udp_socket_list, entries) { - if (udp_sock_p->sd == sdP) { - UDP_DEBUG("Found matching task desc\n"); - break; - } - } - return udp_sock_p; -} - -static -int udp_server_create_socket(int port, char *address, task_id_t task_id) -{ - struct sockaddr_in addr; - int sd; - - struct udp_socket_desc_s *socket_desc_p = NULL; - - UDP_DEBUG("Creating new listen socket on address "IPV4_ADDR" and port %u\n", - IPV4_ADDR_FORMAT(inet_addr(address)), port); - - /* Create UDP socket */ - if ((sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { - /* Socket creation has failed... */ - UDP_ERROR("Socket creation failed (%s)\n", strerror(errno)); - return sd; - } - - memset(&addr, 0, sizeof(struct sockaddr_in)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr.s_addr = inet_addr(address); - - if (bind(sd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0) { - /* Bind failed */ - UDP_ERROR("Socket bind failed (%s) for address "IPV4_ADDR" and port %u\n", - strerror(errno), IPV4_ADDR_FORMAT(inet_addr(address)), port); - close(sd); - return -1; - } - - /* Add the socket to list of fd monitored by ITTI */ - /* Mark the socket as non-blocking */ - if (fcntl(sd, F_SETFL, O_NONBLOCK) < 0) { - UDP_ERROR("fcntl F_SETFL O_NONBLOCK failed: %s\n", - strerror(errno)); - close(sd); - return -1; - } - - socket_desc_p = calloc(1, sizeof(struct udp_socket_desc_s)); - DevAssert(socket_desc_p != NULL); - socket_desc_p->sd = sd; - socket_desc_p->local_address = address; - socket_desc_p->local_port = port; - socket_desc_p->task_id = task_id; - UDP_DEBUG("Inserting new descriptor for task %d, sd %d\n", - socket_desc_p->task_id, socket_desc_p->sd); - pthread_mutex_lock(&udp_socket_list_mutex); - STAILQ_INSERT_TAIL(&udp_socket_list, socket_desc_p, entries); - pthread_mutex_unlock(&udp_socket_list_mutex); - - itti_subscribe_event_fd(TASK_UDP, sd); - - return sd; -} - -static void udp_server_flush_sockets(struct epoll_event *events, int nb_events) -{ - int event; - struct udp_socket_desc_s *udp_sock_p = NULL; - - UDP_DEBUG("Received %d events\n", nb_events); - - for (event = 0; event < nb_events; event++) { - if (events[event].events != 0) { - /* If the event has not been yet been processed (not an itti message) */ - pthread_mutex_lock(&udp_socket_list_mutex); - udp_sock_p = udp_server_get_socket_desc_by_sd(events[event].data.fd); - - if (udp_sock_p != NULL) { - udp_server_receive_and_process(udp_sock_p); - } else { - UDP_ERROR("Failed to retrieve the udp socket descriptor %d", - events[event].data.fd); - } - - pthread_mutex_unlock(&udp_socket_list_mutex); - } - } -} - -static void udp_server_receive_and_process(struct udp_socket_desc_s *udp_sock_pP) -{ - UDP_DEBUG("Inserting new descriptor for task %d, sd %d\n", - udp_sock_pP->task_id, udp_sock_pP->sd); - - { - int bytes_received = 0; - socklen_t from_len; - struct sockaddr_in addr; - - from_len = (socklen_t)sizeof(struct sockaddr_in); - - if ((bytes_received = recvfrom(udp_sock_pP->sd, udp_sock_pP->buffer, sizeof(udp_sock_pP->buffer), 0, - (struct sockaddr *)&addr, &from_len)) <= 0) { - UDP_ERROR("Recvfrom failed %s\n", strerror(errno)); - //break; - } else { - MessageDef *message_p = NULL; - udp_data_ind_t *udp_data_ind_p; - uint8_t *forwarded_buffer = NULL; - - AssertFatal(sizeof(udp_sock_pP->buffer) >= bytes_received, "UDP BUFFER OVERFLOW"); - - forwarded_buffer = itti_malloc(TASK_UDP, udp_sock_pP->task_id, bytes_received); - - DevAssert(forwarded_buffer != NULL); - - memcpy(forwarded_buffer, udp_sock_pP->buffer, bytes_received); - - message_p = itti_alloc_new_message(TASK_UDP, UDP_DATA_IND); - - DevAssert(message_p != NULL); - - udp_data_ind_p = &message_p->ittiMsg.udp_data_ind; - - udp_data_ind_p->buffer = forwarded_buffer; - udp_data_ind_p->buffer_length = bytes_received; - udp_data_ind_p->peer_port = htons(addr.sin_port); - udp_data_ind_p->peer_address = addr.sin_addr.s_addr; - - UDP_DEBUG("Msg of length %d received from %s:%u\n", - bytes_received, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); - - if (itti_send_msg_to_task(udp_sock_pP->task_id, INSTANCE_DEFAULT, message_p) < 0) { - UDP_DEBUG("Failed to send message %d to task %d\n", - UDP_DATA_IND, udp_sock_pP->task_id); - //break; - } - } - } - //close(udp_sock_pP->sd); - //udp_sock_pP->sd = -1; - - //pthread_mutex_lock(&udp_socket_list_mutex); - //STAILQ_REMOVE(&udp_socket_list, udp_sock_pP, udp_socket_desc_s, entries); - //pthread_mutex_unlock(&udp_socket_list_mutex); - - //return NULL; -} - - -static void *udp_intertask_interface(void *args_p) -{ - int rc = 0; - int nb_events = 0; - struct epoll_event *events = NULL; - - itti_mark_task_ready(TASK_UDP); - MSC_START_USE(); - - while(1) { - MessageDef *received_message_p = NULL; - itti_receive_msg(TASK_UDP, &received_message_p); - - if (received_message_p != NULL) { - - switch (ITTI_MSG_ID(received_message_p)) { - case UDP_INIT: { - udp_init_t *udp_init_p; - udp_init_p = &received_message_p->ittiMsg.udp_init; - rc = udp_server_create_socket( - udp_init_p->port, - udp_init_p->address, - ITTI_MSG_ORIGIN_ID(received_message_p)); - } - break; - - case UDP_DATA_REQ: { - int udp_sd = -1; - ssize_t bytes_written; - - struct udp_socket_desc_s *udp_sock_p = NULL; - udp_data_req_t *udp_data_req_p; - struct sockaddr_in peer_addr; - - udp_data_req_p = &received_message_p->ittiMsg.udp_data_req; - - //UDP_DEBUG("-- UDP_DATA_REQ -----------------------------------------------------\n%s :\n", - // __FUNCTION__); - //udp_print_hex_octets(&udp_data_req_p->buffer[udp_data_req_p->buffer_offset], - // udp_data_req_p->buffer_length); - - memset(&peer_addr, 0, sizeof(struct sockaddr_in)); - - peer_addr.sin_family = AF_INET; - peer_addr.sin_port = htons(udp_data_req_p->peer_port); - peer_addr.sin_addr.s_addr = udp_data_req_p->peer_address; - - pthread_mutex_lock(&udp_socket_list_mutex); - udp_sock_p = udp_server_get_socket_desc(ITTI_MSG_ORIGIN_ID(received_message_p)); - - if (udp_sock_p == NULL) { - UDP_ERROR("Failed to retrieve the udp socket descriptor " - "associated with task %d\n", ITTI_MSG_ORIGIN_ID(received_message_p)); - pthread_mutex_unlock(&udp_socket_list_mutex); - - if (udp_data_req_p->buffer) { - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p),udp_data_req_p->buffer); - } - - goto on_error; - } - - udp_sd = udp_sock_p->sd; - pthread_mutex_unlock(&udp_socket_list_mutex); - - UDP_DEBUG("[%d] Sending message of size %u to "IPV4_ADDR" and port %u\n", - udp_sd, udp_data_req_p->buffer_length, - IPV4_ADDR_FORMAT(udp_data_req_p->peer_address), - udp_data_req_p->peer_port); - - bytes_written = sendto(udp_sd, &udp_data_req_p->buffer[udp_data_req_p->buffer_offset], - udp_data_req_p->buffer_length, 0, - (struct sockaddr *)&peer_addr, - sizeof(struct sockaddr_in)); - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p),udp_data_req_p->buffer); - - if (bytes_written != udp_data_req_p->buffer_length) { - UDP_ERROR("There was an error while writing to socket " - "(%d:%s)\n", errno, strerror(errno)); - } - } - break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); - } - break; - - case MESSAGE_TEST: { - } break; - - default: { - UDP_DEBUG("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - -on_error: - rc = itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - AssertFatal(rc == EXIT_SUCCESS, "Failed to free memory (%d)!\n", rc); - received_message_p = NULL; - } - - nb_events = itti_get_events(TASK_UDP, &events); - - if ((nb_events > 0) && (events != NULL)) { - /* Now handle notifications for other sockets */ - udp_server_flush_sockets(events, nb_events); - } - } - - return NULL; -} - -int udp_init(const mme_config_t *mme_config_p) -{ - UDP_DEBUG("Initializing UDP task interface\n"); - - STAILQ_INIT(&udp_socket_list); - - if (itti_create_task(TASK_UDP, &udp_intertask_interface, - NULL) < 0) { - UDP_ERROR("udp pthread_create (%s)\n", strerror(errno)); - return -1; - } - - UDP_DEBUG("Initializing UDP task interface: DONE\n"); - return 0; -} diff --git a/openair-cn/UDP/udp_primitives_server.h b/openair-cn/UDP/udp_primitives_server.h deleted file mode 100644 index 7ab514c068..0000000000 --- a/openair-cn/UDP/udp_primitives_server.h +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file udp_primitives_server.c -* \brief -* \author Sebastien ROUX -* \company Eurecom -* \email: -*/ -#include "mme_config.h" - -#ifndef UDP_PRIMITIVES_SERVER_H_ -#define UDP_PRIMITIVES_SERVER_H_ - -/** \brief UDP task init function. - @returns -1 on error, 0 otherwise. - **/ -int udp_init(const mme_config_t *mme_config); - -#endif /* UDP_PRIMITIVES_SERVER_H_ */ diff --git a/openair-cn/UTILS/CONF/COPYING b/openair-cn/UTILS/CONF/COPYING index 94a9ed024d..e69de29bb2 100644 --- a/openair-cn/UTILS/CONF/COPYING +++ b/openair-cn/UTILS/CONF/COPYING @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/UTILS/COPYING b/openair-cn/UTILS/COPYING index 94a9ed024d..c888423064 100644 --- a/openair-cn/UTILS/COPYING +++ b/openair-cn/UTILS/COPYING @@ -1,674 +1,28 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ \ No newline at end of file diff --git a/openair-cn/UTILS/HASHTABLE/COPYING b/openair-cn/UTILS/HASHTABLE/COPYING index 94a9ed024d..e69de29bb2 100644 --- a/openair-cn/UTILS/HASHTABLE/COPYING +++ b/openair-cn/UTILS/HASHTABLE/COPYING @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/UTILS/HASHTABLE/Makefile.am b/openair-cn/UTILS/HASHTABLE/Makefile.am index 3eb39c51e3..d6bdbbc3c8 100755 --- a/openair-cn/UTILS/HASHTABLE/Makefile.am +++ b/openair-cn/UTILS/HASHTABLE/Makefile.am @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + AM_CFLAGS = @ADD_CFLAGS@ \ -I$(top_srcdir)/COMMON diff --git a/openair-cn/UTILS/HASHTABLE/Makefile.eNB b/openair-cn/UTILS/HASHTABLE/Makefile.eNB index 795ceabdea..2cde7da837 100755 --- a/openair-cn/UTILS/HASHTABLE/Makefile.eNB +++ b/openair-cn/UTILS/HASHTABLE/Makefile.eNB @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + all: libhashtable.a libhashtable_OBJECTS = \ diff --git a/openair-cn/UTILS/HASHTABLE/hashtable.c b/openair-cn/UTILS/HASHTABLE/hashtable.c index 48d806cd0f..a557211b23 100755 --- a/openair-cn/UTILS/HASHTABLE/hashtable.c +++ b/openair-cn/UTILS/HASHTABLE/hashtable.c @@ -1,5 +1,33 @@ /* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node + * Original licence Creative Commons CC0 1.0 Waiver. + */ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. */ #include #include diff --git a/openair-cn/UTILS/HASHTABLE/hashtable.h b/openair-cn/UTILS/HASHTABLE/hashtable.h index 83b5d310b5..051a2929b0 100755 --- a/openair-cn/UTILS/HASHTABLE/hashtable.h +++ b/openair-cn/UTILS/HASHTABLE/hashtable.h @@ -1,3 +1,34 @@ +/* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node + * Original licence Creative Commons CC0 1.0 Waiver.(http://creativecommons.org/publicdomain/zero/1.0/) + */ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef _UTILS_COLLECTION_HASH_TABLE_H_ #define _UTILS_COLLECTION_HASH_TABLE_H_ #include diff --git a/openair-cn/UTILS/HASHTABLE/obj_hashtable.c b/openair-cn/UTILS/HASHTABLE/obj_hashtable.c index 12b49577c4..55e86cd8f3 100755 --- a/openair-cn/UTILS/HASHTABLE/obj_hashtable.c +++ b/openair-cn/UTILS/HASHTABLE/obj_hashtable.c @@ -1,5 +1,30 @@ -/* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. */ #include #include diff --git a/openair-cn/UTILS/HASHTABLE/obj_hashtable.h b/openair-cn/UTILS/HASHTABLE/obj_hashtable.h index d11a67e264..d74e1e97d4 100755 --- a/openair-cn/UTILS/HASHTABLE/obj_hashtable.h +++ b/openair-cn/UTILS/HASHTABLE/obj_hashtable.h @@ -1,3 +1,31 @@ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef _OBJ_HASH_TABLE_H_ #define _OBJ_HASH_TABLE_H_ #include diff --git a/openair-cn/UTILS/Makefile.am b/openair-cn/UTILS/Makefile.am index f2a5d57fee..2e0e686086 100644 --- a/openair-cn/UTILS/Makefile.am +++ b/openair-cn/UTILS/Makefile.am @@ -1,31 +1,4 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ + SUBDIRS = . HASHTABLE AM_CFLAGS = @ADD_CFLAGS@ \ diff --git a/openair-cn/UTILS/conversions.c b/openair-cn/UTILS/conversions.c index 0cb30f10eb..f2c324568f 100644 --- a/openair-cn/UTILS/conversions.c +++ b/openair-cn/UTILS/conversions.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/UTILS/conversions.h b/openair-cn/UTILS/conversions.h index 4762f93873..aaa2b9714f 100644 --- a/openair-cn/UTILS/conversions.h +++ b/openair-cn/UTILS/conversions.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include "assertions.h" diff --git a/openair-cn/UTILS/enum_string.c b/openair-cn/UTILS/enum_string.c index 29d0774776..cab5b0319e 100644 --- a/openair-cn/UTILS/enum_string.c +++ b/openair-cn/UTILS/enum_string.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include #include diff --git a/openair-cn/UTILS/enum_string.h b/openair-cn/UTILS/enum_string.h index 3b2c0d3621..c0a921c98e 100644 --- a/openair-cn/UTILS/enum_string.h +++ b/openair-cn/UTILS/enum_string.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef ENUM_STRING_H_ #define ENUM_STRING_H_ diff --git a/openair-cn/UTILS/log.c b/openair-cn/UTILS/log.c index 85577c35d6..6aebde8280 100644 --- a/openair-cn/UTILS/log.c +++ b/openair-cn/UTILS/log.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #if HAVE_CONFIG_H # include "config.h" #endif diff --git a/openair-cn/UTILS/log.h b/openair-cn/UTILS/log.h index 1147d9e8c2..34700522af 100644 --- a/openair-cn/UTILS/log.h +++ b/openair-cn/UTILS/log.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include "mme_config.h" #ifndef LOG_H_ diff --git a/openair-cn/UTILS/mcc_mnc_itu.c b/openair-cn/UTILS/mcc_mnc_itu.c index f842334aee..8c59b8e53a 100755 --- a/openair-cn/UTILS/mcc_mnc_itu.c +++ b/openair-cn/UTILS/mcc_mnc_itu.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/openair-cn/UTILS/mcc_mnc_itu.h b/openair-cn/UTILS/mcc_mnc_itu.h index 84daca6a42..b59db73720 100755 --- a/openair-cn/UTILS/mcc_mnc_itu.h +++ b/openair-cn/UTILS/mcc_mnc_itu.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** Source mcc_mnc.h diff --git a/openair-cn/UTILS/mme_config.c b/openair-cn/UTILS/mme_config.c index c162199bb4..bc1a408312 100644 --- a/openair-cn/UTILS/mme_config.c +++ b/openair-cn/UTILS/mme_config.c @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #if HAVE_CONFIG_H # include "config.h" diff --git a/openair-cn/UTILS/mme_config.h b/openair-cn/UTILS/mme_config.h index 36ce25b169..5301a9c59d 100644 --- a/openair-cn/UTILS/mme_config.h +++ b/openair-cn/UTILS/mme_config.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #include #include diff --git a/openair-cn/UTILS/mme_default_values.h b/openair-cn/UTILS/mme_default_values.h index 25111aea60..779e5a4661 100644 --- a/openair-cn/UTILS/mme_default_values.h +++ b/openair-cn/UTILS/mme_default_values.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ #ifndef MME_DEFAULT_VALUES_H_ #define MME_DEFAULT_VALUES_H_ diff --git a/openair-cn/autogen.sh b/openair-cn/autogen.sh deleted file mode 100755 index dc425bedc0..0000000000 --- a/openair-cn/autogen.sh +++ /dev/null @@ -1,8 +0,0 @@ -#! /bin/sh - -(cd GTPV2-C/nwgtpv2c-0.11 && libtoolize && autoreconf --install --force) - -aclocal \ -&& autoheader \ -&& automake --add-missing \ -&& autoconf \ No newline at end of file diff --git a/openair-cn/configure.ac b/openair-cn/configure.ac deleted file mode 100644 index 0d5b740fe6..0000000000 --- a/openair-cn/configure.ac +++ /dev/null @@ -1,427 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AC_PREREQ([2.68]) - -define([svnversion], esyscmd([sh -c "svnversion ..|tr -d '\n'"])) - -AC_DEFINE(SVN_REVISION, "svnversion", [SVN Revision]) - -AC_INIT([oai_epc], [0.3.svnversion], [openair_admin@eurecom.fr]) -AC_CANONICAL_BUILD -AC_CANONICAL_TARGET - -AM_INIT_AUTOMAKE([1.11 silent-rules]) - -AC_CONFIG_MACRO_DIR([m4]) - -AC_CONFIG_HEADERS([config.h]) - -AM_MAINTAINER_MODE - -AM_SILENT_RULES([yes]) - -AM_PROG_LIBTOOL -AM_PROG_LEX - -dnl *** Autoconf support *** -AC_ARG_ENABLE(autoconf, - [ --disable-autoconf disable automatic generation of configure script ], - enable_autoconf=$enableval, enable_autoconf=yes -) -AC_PATH_PROG(AUTOCONF, autoconf, @echo autoconf not available) -AC_PATH_PROG(AUTOHEADER, autoheader, @echo autoheader not available) -if test -z "$AUTOCONF"; then enable_autoconf=no ; fi -if test -z "$AUTOHEADER"; then enable_autoconf=no ; fi -if test x$enable_autoconf = xyes; then - CONFIGURE_DEPENDS="configure.in aclocal.m4" -fi -AC_SUBST(CONFIGURE_DEPENDS) - -AC_CHECK_PROGS([DOXYGEN], [doxygen]) -if test -z "$DOXYGEN"; then - AC_MSG_WARN([Doxygen not found - continuing without Doxygen support]) -else - # Check for presence of pdfLaTeX - AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex) - if test -z "$PDFLATEX"; then - AC_MSG_WARN([Unable to create PDF version of the user manual.]) - fi -fi -AM_CONDITIONAL([HAVE_PDFLATEX], test -n "$PDFLATEX") - -dnl ***asn1c support*** -AC_CHECK_PROG(ASN1C_CHECK, asn1c, yes, [AC_MSG_ERROR(Please install asn1c before going further.)]) - -# Checks for programs. -AC_PROG_CXX -AC_PROG_AWK -AC_PROG_CC -AC_PROG_CPP -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_MAKE_SET -AC_PROG_MKDIR_P -AC_PROG_YACC -AC_PROG_RANLIB - -AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h inttypes.h limits.h malloc.h]) -AC_CHECK_HEADERS([netinet/in.h stddef.h stdint.h stdlib.h string.h libintl.h]) -AC_CHECK_HEADERS([sys/time.h sys/ioctl.h sys/socket.h unistd.h]) -AC_CHECK_HEADERS([netdb.h termios.h]) - -# Checks for library functions. -AC_FUNC_MMAP -AC_FUNC_MALLOC -AC_FUNC_ALLOCA -AC_FUNC_REALLOC -AC_FUNC_STRTOD -AC_CHECK_FUNCS([ftruncate inet_ntoa memchr memmove memset munmap select socket]) -AC_CHECK_FUNCS([strdup strerror strspn strchr strstr]) -AC_CHECK_FUNCS([gethostname gethostbyname]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_INLINE -AC_TYPE_INT8_T -AC_TYPE_INT16_T -AC_TYPE_INT32_T -AC_TYPE_INT64_T -AC_TYPE_OFF_T -AC_TYPE_SIZE_T -AC_TYPE_SSIZE_T -AC_TYPE_UINT8_T -AC_TYPE_UINT16_T -AC_TYPE_UINT32_T -AC_TYPE_UINT64_T - -AC_CHECK_TYPES([ptrdiff_t]) - -dnl *** libsctp-dev support *** -AC_CHECK_LIB([sctp], [sctp_sendmsg], [], - [AC_MSG_ERROR([libsctp-dev needed!])]) - -dnl *** pthread support *** -AC_CHECK_LIB([pthread], [pthread_mutex_init], [], - [AC_MSG_ERROR(pthread library needed!)]) - -dnl *** real time support *** -AC_CHECK_LIB([rt], [timer_create], [], - [AC_MSG_ERROR(rt library needed!)]) - -dnl *** Cryptographic lib nettle support *** -PKG_CHECK_MODULES(nettle, [nettle >= 2.5], - [HAVE_NETTLE=true], - [AC_MSG_ERROR("Please install nettle >= 2.5")]) -CFLAGS="$CFLAGS $nettle_CFLAGS" -LIBS="$LIBS $nettle_LIBS" - -AC_ARG_ENABLE([standalone-epc], - AS_HELP_STRING([--enable-standalone-epc], - [Compile MME, SGW and PGW in a single executable]), - [], - [STANDALONE_EPC="yes"]) -AM_CONDITIONAL([STANDALONE_EPC], [test "x$enable_standalone_epc" = "xyes"]) -if test "x$enable_standalone_epc" = "xyes"; then - CFLAGS="$CFLAGS -DENABLE_STANDALONE_EPC" -else - CFLAGS="$CFLAGS -DDISABLE_STANDALONE_EPC" -fi - -dnl *** Add freediameter dependencies *** -AC_CHECK_LIB([fdcore], [fd_core_initialize], [], - [AC_MSG_ERROR(Free diameter lib not installed)]) -AC_CHECK_LIB([fdproto], [fd_msg_search_avp], [], - [AC_MSG_ERROR(Free diameter lib not installed)]) - -dnl *** Freediameter requirements *** -AC_CHECK_HEADERS([signalent.h]) -AC_CHECK_FUNCS([ntohll strndup]) -AC_DEFINE([HAVE_AI_ADDRCONFIG], [], - [Define to 1 if you have AI_ADDRCONFIG defined in netdb.h]) -AC_DEFINE([HAVE_CLOCK_GETTIME], [], - [Define to 1 if you have clock_gettime in librt]) -AC_DEFINE([HAVE_PTHREAD_BAR], [], - [Define to 1 if you have pthread_barrier_wait in libpthread]) -AC_DEFINE([SCTP_CONNECTX_4_ARGS], [], - [Define to 1 if sctp_connectx function accepts 4 arguments]) -AC_CHECK_LIB([rt], [clock_gettime], [AC_DEFINE(HAVE_CLOCK_GETTIME, 1)], []) -AC_CHECK_LIB([pthread], [pthread_barrier_wait], - [AC_DEFINE(HAVE_PTHREAD_BAR, 1)], []) -AC_CHECK_DECL([AI_ADDRCONFIG], - [AC_DEFINE(HAVE_AI_ADDRCONFIG, 1)], - [], [[#include ]]) -AC_MSG_CHECKING(if sctp_connectx accepts 4 arguments) -AC_LINK_IFELSE([ - AC_LANG_SOURCE( - [[int main() { return sctp_connectx(0, NULL, 0, NULL); }]]) -], [AC_DEFINE(SCTP_CONNECTX_4_ARGS, 1)]) -AC_CHECK_LIB([gnutls], - [gnutls_hash], - [AC_DEFINE(GNUTLS_VERSION_210, 1, - [Define to 1 if you have gnutls 2.10 installed])], - []) -AC_CHECK_LIB([gnutls], - [gnutls_x509_trust_list_verify_crt], - [AC_DEFINE(GNUTLS_VERSION_300, 1, - [Define to 1 if you have gnutls 3.0 installed])], - []) -AC_CHECK_LIB([gnutls], - [gnutls_handshake_set_timeout], - [AC_DEFINE(GNUTLS_VERSION_310, 1, - [Define to 1 if you have gnutls 3.1 installed])], - []) - -AC_DEFINE(FREE_DIAMETER_MINIMUM_VERSION, "1.1.5", [freeDiameter minimum version]) - -AC_SUBST(ADD_CFLAGS) - -dnl *** Enable r8 update *** -AC_ARG_ENABLE([r8], - AS_HELP_STRING([--enable-r8], [Disable 3GPP release 9 and 10 updates]), - [], - []) - -dnl *** Enable r9 update *** -AC_ARG_ENABLE([r9], - AS_HELP_STRING([--enable-r9], [Disable 3GPP release 10 updates]), - [], - []) - -dnl *** Disable NAS layer *** -AC_ARG_ENABLE([nas], - AS_HELP_STRING([--disable-nas], [Disable NAS layer]), - [CFLAGS="$CFLAGS -DDISABLE_USE_NAS"], - []) -AM_CONDITIONAL([DISABLE_USE_NAS], [test x$enable_nas == xno]) - -AC_ARG_ENABLE([s11], - AS_HELP_STRING([--disable-s11], [Disable S11 layer]), - [CFLAGS="$CFLAGS -DDISABLE_S11"], - []) -AM_CONDITIONAL([DISABLE_S11], [test x$enable_s11 == xno]) - - -dnl *** Enable GTPU IN KERNEL *** -AC_ARG_ENABLE([gtp1u_in_kernel], - AS_HELP_STRING([--enable-gtp1u-in-kernel], [Enable GTPU IN KERNEL]), - [case "${enableval}" in - yes) gtp1u_in_kernel=true; CFLAGS="$CFLAGS -DENABLE_USE_GTPU_IN_KERNEL" ;; - no ) gtp1u_in_kernel=false;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-gtp1u-in-kernel) ;; - esac], - [gtp1u_in_kernel=false]) - -dnl *** Enable PCAP for SGI *** -AC_ARG_ENABLE([pcap_for_sgi], - AS_HELP_STRING([--enable-pcap-for-sgi], [Enable PCAP for SGI layer]), - [case "${enableval}" in - yes) pcap_for_sgi=true; CFLAGS="$CFLAGS -DENABLE_USE_PCAP_FOR_SGI" ;; - no ) pcap_for_sgi=false;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-pcap-for-sgi) ;; - esac], - [pcap_for_sgi=false]) - -dnl *** Enable NETFILTER for SGI *** -AC_ARG_ENABLE([netfilter_for_sgi], - AS_HELP_STRING([--enable-netfilter-for-sgi], [Enable netfilter for SGI layer]), - [case "${enableval}" in - yes) netfilter_for_sgi=true; CFLAGS="$CFLAGS -DENABLE_USE_NETFILTER_FOR_SGI" ;; - no ) netfilter_for_sgi=false;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-netfilter-for-sgi) ;; - esac], - [netfilter_for_sgi=false]) - -dnl *** Enable RAW socket for SGI *** -AC_ARG_ENABLE([raw_socket_for_sgi], - AS_HELP_STRING([--enable-raw-socket-for-sgi], [Enable netfilter for SGI layer]), - [case "${enableval}" in - yes) raw_socket_for_sgi=true; CFLAGS="$CFLAGS -DENABLE_USE_RAW_SOCKET_FOR_SGI" ;; - no ) raw_socket_for_sgi=false;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-raw-socket-for-sgi) ;; - esac], - [if test x$pcap_for_sgi != xtrue && test x$netfilter_for_sgi != xtrue && test x$gtp1u_in_kernel != xtrue; then - raw_socket_for_sgi=true; CFLAGS="$CFLAGS -DENABLE_USE_RAW_SOCKET_FOR_SGI" - else - raw_socket_for_sgi=false - fi]) - -AM_CONDITIONAL([ENABLE_USE_PCAP_FOR_SGI], [test x$pcap_for_sgi == xtrue]) -AM_CONDITIONAL([ENABLE_USE_NETFILTER_FOR_SGI], [test x$netfilter_for_sgi == xtrue]) -AM_CONDITIONAL([ENABLE_USE_RAW_SOCKET_FOR_SGI], [test x$raw_socket_for_sgi == xtrue]) -AM_CONDITIONAL([ENABLE_USE_RAW_SOCKET_FOR_SGI], [ test x$pcap_for_sgi != xtrue && test x$netfilter_for_sgi != xtrue ]) -AM_CONDITIONAL([ENABLE_USE_GTPU_IN_KERNEL], [ test x$gtp1u_in_kernel == xtrue ]) -AM_CONDITIONAL([ENABLE_USE_GTPU_IN_KERNEL], [ test x$raw_socket_for_sgi == xtrue && x$pcap_for_sgi != xtrue && test x$netfilter_for_sgi != xtrue ]) - -AS_IF([test "x$enable_pcap_for_sgi" == "xyes"], [ - dnl *** libpcap support *** - AC_CHECK_LIB([pcap], [pcap_compile], [], [ - AC_MSG_ERROR([PCAP library needed.]) - ]) -]) - -AS_IF([test "x$enable_netfilter_for_sgi" == "xyes"], [ - dnl *** libnfnetlink support *** - AC_CHECK_LIB([nfnetlink], [nfnl_fd], [], - [AC_MSG_ERROR([libnfnetlink needed!])]) - - dnl *** libnetfilter_queue support *** - AC_CHECK_LIB([netfilter_queue], [nfq_open], [], - [AC_MSG_ERROR([libnetfilter_queue needed!])]) -]) - - -if test x$enable_r8 == xyes; then - ASN1DIR=R8.10 -else - if test x$enable_r9 == xyes; then - ASN1DIR=R9.8 - CFLAGS="$CFLAGS -DUPDATE_RELEASE_9" - else - ASN1DIR=R10.5 - CFLAGS="$CFLAGS -DUPDATE_RELEASE_9 -DUPDATE_RELEASE_10" - fi -fi -AC_DEFINE(ASN1_MINIMUM_VERSION, 924, [asn1c minimum version]) -AM_CONDITIONAL([UPDATE_RELEASE_9], [test x$enable_r8 != xyes]) -AM_CONDITIONAL([UPDATE_RELEASE_10], [test x$enable_r8 != xyes && test x$enable_r9 != xyes]) - -AC_SUBST(ASN1DIR) - -PKG_CHECK_MODULES(OPENSSL, - [openssl >= 1.0.1], - [HAVE_OPENSSL=true], - [AC_MSG_ERROR("Please install libcrypto >= 1.0.1")]) -CFLAGS="$CFLAGS $OPENSSL_CFLAGS" -LIBS="$LIBS $OPENSSL_LIBS" - -PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=true], [HAVE_CHECK=false]) -AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xtrue) - -AC_CHECK_PROG(HAVE_GCCXML,gccxml,yes,no) -AM_CONDITIONAL(HAVE_GCCXML, test x$HAVE_GCCXML = xyes) - -dnl Add these flags -CFLAGS="$CFLAGS -Wall -g -O" -CFLAGS="$CFLAGS -Wcast-align" -CFLAGS="$CFLAGS -Wchar-subscripts" -CFLAGS="$CFLAGS -Wmissing-prototypes" -CFLAGS="$CFLAGS -Wmissing-declarations" -CFLAGS="$CFLAGS -Werror=shadow" -CFLAGS="$CFLAGS -Werror=implicit-function-declaration" - -dnl *** Check for endianness of platform *** -AC_C_BIGENDIAN -if test "x$ac_cv_c_bigendian" = "xyes"; then - CFLAGS="$CFLAGS -DBYTE_ORDER=BIG_ENDIAN" -else - CFLAGS="$CFLAGS -DBYTE_ORDER=LITTLE_ENDIAN" -fi - -dnl AC_SUBST([AM_CFLAGS]) - -dnl Doxygen section -AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) -AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([DOCS/DOXYGEN/Doxyfile])]) - -dnl *** Retrieving hostname for substition in freediameter configuration file *** -HOSTNAME=$(uname -n) -AC_MSG_CHECKING([host name]) -AC_MSG_RESULT([$HOSTNAME]) -AC_SUBST([HOSTNAME]) - -AC_CONFIG_FILES( \ - GTPV1-U/Makefile \ - GTPV2-C/Makefile \ - INTERTASK_INTERFACE/Makefile \ - SGI/Makefile \ - NAS/Makefile \ - S11/Makefile \ - S1AP/MESSAGES/ASN1/Makefile \ - S1AP/MESSAGES/Makefile \ - S1AP/Makefile \ - S6A/Makefile \ - SCTP/Makefile \ - SECU/Makefile \ - SGW-LITE/Makefile \ - UTILS/CONF/s6a.conf \ - UTILS/HASHTABLE/Makefile \ - UTILS/Makefile \ - UDP/Makefile \ - MME_APP/Makefile \ - OAISIM_MME/Makefile \ - OAI_EPC/Makefile \ - OAI_SGW/Makefile \ - DOCS/DOXYGEN/Makefile \ - DOCS/Makefile \ - TEST/Makefile \ - Makefile \ -) - -dnl Call for configure script in gtpv2c subdir -AC_CONFIG_SUBDIRS([GTPV2-C/nwgtpv2c-0.11]) - -dnl configure makefiles -AC_OUTPUT - -echo " -($PACKAGE_NAME) version $PACKAGE_VERSION -Prefix.........: $prefix -C Compiler.....: $CC $CFLAGS -Linker.........: $LD $LDFLAGS $LIBS -Doxygen........: ${DOXYGEN:-no} -Tests..........: ${HAVE_CHECK} -GCCXML.........: ${HAVE_GCCXML} -Standalone ....: ${enable_standalone_epc:-no}" - -if test x$enable_r8 == xyes; then - echo "Release........: 8.10" -else - if test x$enable_r9 == xyes; then - echo "Release........: 9.8" - else - echo "Release........: 10.5" - fi -fi - -if test x$pcap_for_sgi == xtrue; then - echo "SGI pcap.......: yes" -fi - -if test x$netfilter_for_sgi == xtrue; then - echo "SGI netfilter..: yes" -fi - -if test x$raw_socket_for_sgi == xtrue; then - echo "SGI raw socket.: yes" -fi - -if test x$gtp1u_in_kernel == xtrue; then - echo "GTPU in kernel.: yes" -fi - - diff --git a/openair-cn/cppcheck.sh b/openair-cn/cppcheck.sh deleted file mode 100644 index ac79da8f2c..0000000000 --- a/openair-cn/cppcheck.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -cppcheck . --enable=all --xml --verbose --xml-version=2 -j4 2> err.xml diff --git a/openair1/MAC_INTERFACE/defs.h b/openair1/MAC_INTERFACE/defs.h index 8815a26430..dbaab57fcc 100755 --- a/openair1/MAC_INTERFACE/defs.h +++ b/openair1/MAC_INTERFACE/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/MAC_INTERFACE/extern.h b/openair1/MAC_INTERFACE/extern.h index f1b3390db2..a7444939ee 100755 --- a/openair1/MAC_INTERFACE/extern.h +++ b/openair1/MAC_INTERFACE/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/MAC_INTERFACE/init.c b/openair1/MAC_INTERFACE/init.c index 79c8b9d6b6..480d365f09 100644 --- a/openair1/MAC_INTERFACE/init.c +++ b/openair1/MAC_INTERFACE/init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/MAC_INTERFACE/register.c b/openair1/MAC_INTERFACE/register.c index cb595b6577..0c3c611817 100644 --- a/openair1/MAC_INTERFACE/register.c +++ b/openair1/MAC_INTERFACE/register.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/MAC_INTERFACE/vars.h b/openair1/MAC_INTERFACE/vars.h index fece5ec4d6..e3ef7f6ab1 100755 --- a/openair1/MAC_INTERFACE/vars.h +++ b/openair1/MAC_INTERFACE/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte.c b/openair1/PHY/CODING/3gpplte.c index fd33bf999c..c1a862ebb3 100644 --- a/openair1/PHY/CODING/3gpplte.c +++ b/openair1/PHY/CODING/3gpplte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c index c66a42016d..41c0f65dc3 100755 --- a/openair1/PHY/CODING/3gpplte_sse.c +++ b/openair1/PHY/CODING/3gpplte_sse.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder.c b/openair1/PHY/CODING/3gpplte_turbo_decoder.c index ac70e94edd..9fba2ba899 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c index 6c5be7de91..67df01c437 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c index 96813c1072..702aee8656 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index 6e1ae73d6e..ee78dd0773 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/TESTBENCH/ltetest.c b/openair1/PHY/CODING/TESTBENCH/ltetest.c index 3bd5871b76..b7b9fb4aab 100644 --- a/openair1/PHY/CODING/TESTBENCH/ltetest.c +++ b/openair1/PHY/CODING/TESTBENCH/ltetest.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/TESTBENCH/pdcch_test.c b/openair1/PHY/CODING/TESTBENCH/pdcch_test.c index adbecf3401..84ed605411 100644 --- a/openair1/PHY/CODING/TESTBENCH/pdcch_test.c +++ b/openair1/PHY/CODING/TESTBENCH/pdcch_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c index cc5ba08d29..efc07820f3 100644 --- a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c +++ b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/ccoding_byte.c b/openair1/PHY/CODING/ccoding_byte.c index c6489008eb..cd626a8553 100755 --- a/openair1/PHY/CODING/ccoding_byte.c +++ b/openair1/PHY/CODING/ccoding_byte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/ccoding_byte_lte.c b/openair1/PHY/CODING/ccoding_byte_lte.c index b399d0186b..12271fdceb 100644 --- a/openair1/PHY/CODING/ccoding_byte_lte.c +++ b/openair1/PHY/CODING/ccoding_byte_lte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c index 747f94b0d7..e7ed05f411 100755 --- a/openair1/PHY/CODING/crc_byte.c +++ b/openair1/PHY/CODING/crc_byte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/defs.h b/openair1/PHY/CODING/defs.h index 21767a1f33..acb6e8dd29 100644 --- a/openair1/PHY/CODING/defs.h +++ b/openair1/PHY/CODING/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/extern.h b/openair1/PHY/CODING/extern.h index cf67c6c67b..0108dab386 100644 --- a/openair1/PHY/CODING/extern.h +++ b/openair1/PHY/CODING/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/extern_3GPPinterleaver.h b/openair1/PHY/CODING/extern_3GPPinterleaver.h index a6a0fd02c6..bc521a59a3 100755 --- a/openair1/PHY/CODING/extern_3GPPinterleaver.h +++ b/openair1/PHY/CODING/extern_3GPPinterleaver.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/lte_interleaver.h b/openair1/PHY/CODING/lte_interleaver.h index 449a7c9efa..1199933a53 100644 --- a/openair1/PHY/CODING/lte_interleaver.h +++ b/openair1/PHY/CODING/lte_interleaver.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/lte_interleaver2.h b/openair1/PHY/CODING/lte_interleaver2.h index b573b373be..67b696a15f 100644 --- a/openair1/PHY/CODING/lte_interleaver2.h +++ b/openair1/PHY/CODING/lte_interleaver2.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/lte_interleaver_inline.h b/openair1/PHY/CODING/lte_interleaver_inline.h index 311dc0da25..5e71bd7081 100644 --- a/openair1/PHY/CODING/lte_interleaver_inline.h +++ b/openair1/PHY/CODING/lte_interleaver_inline.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c index 837665ceda..69697fc2e0 100644 --- a/openair1/PHY/CODING/lte_rate_matching.c +++ b/openair1/PHY/CODING/lte_rate_matching.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/lte_segmentation.c b/openair1/PHY/CODING/lte_segmentation.c index d0875cb883..a4409ee414 100644 --- a/openair1/PHY/CODING/lte_segmentation.c +++ b/openair1/PHY/CODING/lte_segmentation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/rate_matching.c b/openair1/PHY/CODING/rate_matching.c index 619c5dae69..c14f22e2ac 100644 --- a/openair1/PHY/CODING/rate_matching.c +++ b/openair1/PHY/CODING/rate_matching.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/scrambler.h b/openair1/PHY/CODING/scrambler.h index f753289279..3718d8b456 100755 --- a/openair1/PHY/CODING/scrambler.h +++ b/openair1/PHY/CODING/scrambler.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/vars.h b/openair1/PHY/CODING/vars.h index 7caef4b403..98e63a43dc 100644 --- a/openair1/PHY/CODING/vars.h +++ b/openair1/PHY/CODING/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/viterbi.c b/openair1/PHY/CODING/viterbi.c index 118e0ef2d8..cacc9ab2ff 100755 --- a/openair1/PHY/CODING/viterbi.c +++ b/openair1/PHY/CODING/viterbi.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/CODING/viterbi_lte.c b/openair1/PHY/CODING/viterbi_lte.c index 230b933f79..f5a174e53e 100644 --- a/openair1/PHY/CODING/viterbi_lte.c +++ b/openair1/PHY/CODING/viterbi_lte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h index b63b31302e..f08ca678db 100644 --- a/openair1/PHY/INIT/defs.h +++ b/openair1/PHY/INIT/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/extern.h b/openair1/PHY/INIT/extern.h index 7a5b283a8e..5c046434e6 100644 --- a/openair1/PHY/INIT/extern.h +++ b/openair1/PHY/INIT/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c index c730654e6d..e0de14bbb8 100755 --- a/openair1/PHY/INIT/init_top.c +++ b/openair1/PHY/INIT/init_top.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 72c5d95629..c819704bd2 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index 6318c1625b..55bd964aa7 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/INIT/vars.h b/openair1/PHY/INIT/vars.h index 7a5b283a8e..5c046434e6 100644 --- a/openair1/PHY/INIT/vars.h +++ b/openair1/PHY/INIT/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c index dc1365734d..412f7cbae9 100644 --- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c +++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h index bc76c8a38a..10dc558c9b 100644 --- a/openair1/PHY/LTE_ESTIMATION/defs.h +++ b/openair1/PHY/LTE_ESTIMATION/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/extern.h b/openair1/PHY/LTE_ESTIMATION/extern.h index f6edc6bb34..7f3cc6e31f 100644 --- a/openair1/PHY/LTE_ESTIMATION/extern.h +++ b/openair1/PHY/LTE_ESTIMATION/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/filt96_32.h b/openair1/PHY/LTE_ESTIMATION/filt96_32.h index c92be225bd..a29a8c26fb 100644 --- a/openair1/PHY/LTE_ESTIMATION/filt96_32.h +++ b/openair1/PHY/LTE_ESTIMATION/filt96_32.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c index 595d1e7a48..8f1ffe0441 100755 --- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c +++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c index 63b3f27319..9425e94d02 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index 6e853e6c58..10c0cef42a 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c index ea82b15aee..63223e5ff5 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c index 74072dc20a..dbb2ba231f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c index 43ebd83941..9564b7842c 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c index b11ba532f5..6f1279b5b8 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index 7c6254090f..9864a50ee2 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c index 37f5d26315..493583214a 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 0fa0fc4ce1..65c4214427 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index 9a47a6b355..1d23bdca38 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/pss6144.h b/openair1/PHY/LTE_ESTIMATION/pss6144.h index aea275f77e..4903c84d62 100644 --- a/openair1/PHY/LTE_ESTIMATION/pss6144.h +++ b/openair1/PHY/LTE_ESTIMATION/pss6144.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_ESTIMATION/vars.h b/openair1/PHY/LTE_ESTIMATION/vars.h index f6edc6bb34..7f3cc6e31f 100644 --- a/openair1/PHY/LTE_ESTIMATION/vars.h +++ b/openair1/PHY/LTE_ESTIMATION/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index 2127380565..b48403ff99 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c index 1a09c83372..6faf2e1ed0 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c index 54b9a5442d..c3b141841a 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index b40f6ddfda..e7b3dd2ed1 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c index 2463d73b79..567851a51a 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c index 17f95cb9ee..0d14515776 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c index be3902ec47..75599f4b71 100644 --- a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c +++ b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/mod_table.h b/openair1/PHY/LTE_REFSIG/mod_table.h index e63be32c6f..5ae3efdea2 100644 --- a/openair1/PHY/LTE_REFSIG/mod_table.h +++ b/openair1/PHY/LTE_REFSIG/mod_table.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_REFSIG/primary_synch.h b/openair1/PHY/LTE_REFSIG/primary_synch.h index ff069e046b..f9cf6fc171 100644 --- a/openair1/PHY/LTE_REFSIG/primary_synch.h +++ b/openair1/PHY/LTE_REFSIG/primary_synch.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 43d2410cbb..2fd89c8f64 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dci.h b/openair1/PHY/LTE_TRANSPORT/dci.h index d98984b2a1..e65352f5a0 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.h +++ b/openair1/PHY/LTE_TRANSPORT/dci.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index a0b4cba24e..a77501e14c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index 0d3d028c8a..a21693fea0 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 46abdc8169..83066480b4 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c index 532570adf2..6ab784aa18 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 09210c64f0..3dc325861c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index f0a32e09b8..7425a4ed65 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 376ba35ed3..3b9c58ca1b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c index 721a2e8cac..dd971748cb 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h index 9d9c458e70..4a5520c371 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h index e570ae950b..b2c32b8643 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c index b9baf48996..1b9df8046f 100644 --- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/extern.h b/openair1/PHY/LTE_TRANSPORT/extern.h index b4ca0a8bac..1fc6f7cb28 100644 --- a/openair1/PHY/LTE_TRANSPORT/extern.h +++ b/openair1/PHY/LTE_TRANSPORT/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/group_hopping.c b/openair1/PHY/LTE_TRANSPORT/group_hopping.c index 6ab739abfc..992ac3088d 100644 --- a/openair1/PHY/LTE_TRANSPORT/group_hopping.c +++ b/openair1/PHY/LTE_TRANSPORT/group_hopping.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 69351e297f..bc2a00d8e6 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c index 6e253c3b63..41d9ec72a6 100644 --- a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c +++ b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h b/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h index 3ea5672336..36f965a5ff 100644 --- a/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h +++ b/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index 0582a63956..0eee263a10 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c index 8e9038666b..f289fd3bd0 100644 --- a/openair1/PHY/LTE_TRANSPORT/pcfich.c +++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c index 68f625365a..e08ad239bd 100644 --- a/openair1/PHY/LTE_TRANSPORT/phich.c +++ b/openair1/PHY/LTE_TRANSPORT/phich.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pilots.c b/openair1/PHY/LTE_TRANSPORT/pilots.c index 772a47e131..ba1eee293d 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c index 7ddd0d9ca8..a81eb38480 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c index fc5dee1db7..fbcec50333 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/power_control.c b/openair1/PHY/LTE_TRANSPORT/power_control.c index e09af40bd9..339a1faefd 100644 --- a/openair1/PHY/LTE_TRANSPORT/power_control.c +++ b/openair1/PHY/LTE_TRANSPORT/power_control.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index 527733cca5..25ecc392e8 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/prach.h b/openair1/PHY/LTE_TRANSPORT/prach.h index a0a5dee254..98e8db2508 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.h +++ b/openair1/PHY/LTE_TRANSPORT/prach.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c index 2bc4fca53c..53ca875953 100644 --- a/openair1/PHY/LTE_TRANSPORT/print_stats.c +++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 4d8b2389fc..eb32aab24e 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pss.c b/openair1/PHY/LTE_TRANSPORT/pss.c index 859e297546..cb954dedb4 100644 --- a/openair1/PHY/LTE_TRANSPORT/pss.c +++ b/openair1/PHY/LTE_TRANSPORT/pss.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 4a72538dc0..2ed5694dd1 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c index 7fa684e87a..1b789e1144 100644 --- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c index 99ebc0582e..1edc98cf2c 100644 --- a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index ecc2661d75..e1e6463b37 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/sss.h b/openair1/PHY/LTE_TRANSPORT/sss.h index 88f9b1ceb4..5b79f95610 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.h +++ b/openair1/PHY/LTE_TRANSPORT/sss.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/uci.h b/openair1/PHY/LTE_TRANSPORT/uci.h index d645b343fa..03580cf4c9 100644 --- a/openair1/PHY/LTE_TRANSPORT/uci.h +++ b/openair1/PHY/LTE_TRANSPORT/uci.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c index ef6a6767d7..1cccc4aaac 100644 --- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c index 0dbe0874b7..606f2d8dfc 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 5774bc50be..25dae3ed63 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 9c3fcae306..606b2692d5 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c index 46a49fb793..e9780ee92b 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/LTE_TRANSPORT/vars.h b/openair1/PHY/LTE_TRANSPORT/vars.h index d6dadbfcbf..c40633aff3 100644 --- a/openair1/PHY/LTE_TRANSPORT/vars.h +++ b/openair1/PHY/LTE_TRANSPORT/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index 3c2e1cad05..8d45c15e00 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/extern.h b/openair1/PHY/MODULATION/extern.h index 80e61fcdce..f5be5682aa 100644 --- a/openair1/PHY/MODULATION/extern.h +++ b/openair1/PHY/MODULATION/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/kHz_7_5.h b/openair1/PHY/MODULATION/kHz_7_5.h index 321991d4a2..2c07627b66 100644 --- a/openair1/PHY/MODULATION/kHz_7_5.h +++ b/openair1/PHY/MODULATION/kHz_7_5.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 11b3252558..61e5f9fb5b 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/prach625Hz.h b/openair1/PHY/MODULATION/prach625Hz.h index 0c79fea9f4..5a114181e6 100644 --- a/openair1/PHY/MODULATION/prach625Hz.h +++ b/openair1/PHY/MODULATION/prach625Hz.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index d97401903d..feb2d885b2 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c index cca3c7f261..94dc4b3ef1 100644 --- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c +++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c index b6b606e968..32bae2c036 100644 --- a/openair1/PHY/MODULATION/slot_fep_ul.c +++ b/openair1/PHY/MODULATION/slot_fep_ul.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c index 0e7c1785fa..4a50ad395e 100755 --- a/openair1/PHY/MODULATION/ul_7_5_kHz.c +++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/MODULATION/vars.h b/openair1/PHY/MODULATION/vars.h index bbbdde9633..5fa9b96776 100644 --- a/openair1/PHY/MODULATION/vars.h +++ b/openair1/PHY/MODULATION/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/8bit_rxdemux.c b/openair1/PHY/TOOLS/8bit_rxdemux.c index 691125ff01..c9406c10ce 100644 --- a/openair1/PHY/TOOLS/8bit_rxdemux.c +++ b/openair1/PHY/TOOLS/8bit_rxdemux.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/8bit_txmux.c b/openair1/PHY/TOOLS/8bit_txmux.c index d9d14055de..b31da10198 100644 --- a/openair1/PHY/TOOLS/8bit_txmux.c +++ b/openair1/PHY/TOOLS/8bit_txmux.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/angle.c b/openair1/PHY/TOOLS/angle.c index 5d75893f44..f2c71ea742 100644 --- a/openair1/PHY/TOOLS/angle.c +++ b/openair1/PHY/TOOLS/angle.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cadd_sv.c b/openair1/PHY/TOOLS/cadd_sv.c index 1ca91b7969..2fa052f6c9 100644 --- a/openair1/PHY/TOOLS/cadd_sv.c +++ b/openair1/PHY/TOOLS/cadd_sv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cadd_vv.c b/openair1/PHY/TOOLS/cadd_vv.c index 70ec37e50b..3bc349463e 100644 --- a/openair1/PHY/TOOLS/cadd_vv.c +++ b/openair1/PHY/TOOLS/cadd_vv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cdot_prod.c b/openair1/PHY/TOOLS/cdot_prod.c index ee8425fd1a..2e52e63f7e 100644 --- a/openair1/PHY/TOOLS/cdot_prod.c +++ b/openair1/PHY/TOOLS/cdot_prod.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cmult_mm.c b/openair1/PHY/TOOLS/cmult_mm.c index f7ae7b1ab2..328958af29 100644 --- a/openair1/PHY/TOOLS/cmult_mm.c +++ b/openair1/PHY/TOOLS/cmult_mm.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c index c9d3a8a50e..31ad77be82 100644 --- a/openair1/PHY/TOOLS/cmult_sv.c +++ b/openair1/PHY/TOOLS/cmult_sv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c index 900d661341..d7b7275508 100755 --- a/openair1/PHY/TOOLS/cmult_vv.c +++ b/openair1/PHY/TOOLS/cmult_vv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/cmult_vvh.c b/openair1/PHY/TOOLS/cmult_vvh.c index 7e360d9728..64cf163d09 100644 --- a/openair1/PHY/TOOLS/cmult_vvh.c +++ b/openair1/PHY/TOOLS/cmult_vvh.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/costable.h b/openair1/PHY/TOOLS/costable.h index c0c65bb90b..86627a4707 100644 --- a/openair1/PHY/TOOLS/costable.h +++ b/openair1/PHY/TOOLS/costable.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/dB_routines.c b/openair1/PHY/TOOLS/dB_routines.c index 8a7aac7e27..ae792c4dd6 100755 --- a/openair1/PHY/TOOLS/dB_routines.c +++ b/openair1/PHY/TOOLS/dB_routines.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/dB_routines.h b/openair1/PHY/TOOLS/dB_routines.h index 2a79a70f0a..36040dc28a 100644 --- a/openair1/PHY/TOOLS/dB_routines.h +++ b/openair1/PHY/TOOLS/dB_routines.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h index 0ea1af57e4..6960fcda4c 100644 --- a/openair1/PHY/TOOLS/defs.h +++ b/openair1/PHY/TOOLS/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/extern.h b/openair1/PHY/TOOLS/extern.h index 7a5b283a8e..5c046434e6 100644 --- a/openair1/PHY/TOOLS/extern.h +++ b/openair1/PHY/TOOLS/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/file_output.c b/openair1/PHY/TOOLS/file_output.c index bdfc45f50a..e3a92696fe 100755 --- a/openair1/PHY/TOOLS/file_output.c +++ b/openair1/PHY/TOOLS/file_output.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/invSqrt.c b/openair1/PHY/TOOLS/invSqrt.c index 2220142b8b..40a576eb30 100644 --- a/openair1/PHY/TOOLS/invSqrt.c +++ b/openair1/PHY/TOOLS/invSqrt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/log2_approx.c b/openair1/PHY/TOOLS/log2_approx.c index 24cb411d0d..bfff65cb03 100644 --- a/openair1/PHY/TOOLS/log2_approx.c +++ b/openair1/PHY/TOOLS/log2_approx.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 22649ae7b3..c031d5d384 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index 99035b046f..49cafa19b5 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/lte_phy_scope.h b/openair1/PHY/TOOLS/lte_phy_scope.h index f41f501838..877934fc7a 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.h +++ b/openair1/PHY/TOOLS/lte_phy_scope.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/lut.c b/openair1/PHY/TOOLS/lut.c index 344e38995b..5e6602c7f2 100644 --- a/openair1/PHY/TOOLS/lut.c +++ b/openair1/PHY/TOOLS/lut.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/memory_routines.c b/openair1/PHY/TOOLS/memory_routines.c index b4a4676a6d..4da4d89cb6 100755 --- a/openair1/PHY/TOOLS/memory_routines.c +++ b/openair1/PHY/TOOLS/memory_routines.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c index f9de85674e..323a1831dc 100755 --- a/openair1/PHY/TOOLS/signal_energy.c +++ b/openair1/PHY/TOOLS/signal_energy.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/smbv.c b/openair1/PHY/TOOLS/smbv.c index 426fb5b68e..b7de63f483 100644 --- a/openair1/PHY/TOOLS/smbv.c +++ b/openair1/PHY/TOOLS/smbv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/smbv.h b/openair1/PHY/TOOLS/smbv.h index 916083ff01..c52b50f038 100644 --- a/openair1/PHY/TOOLS/smbv.h +++ b/openair1/PHY/TOOLS/smbv.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/sqrt.c b/openair1/PHY/TOOLS/sqrt.c index 51a9071263..247cfa138f 100755 --- a/openair1/PHY/TOOLS/sqrt.c +++ b/openair1/PHY/TOOLS/sqrt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/time_meas.c b/openair1/PHY/TOOLS/time_meas.c index 675de01d31..ba1014e9a0 100644 --- a/openair1/PHY/TOOLS/time_meas.c +++ b/openair1/PHY/TOOLS/time_meas.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h index 900c5b3f9a..a3df897053 100644 --- a/openair1/PHY/TOOLS/time_meas.h +++ b/openair1/PHY/TOOLS/time_meas.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/twiddle12288.h b/openair1/PHY/TOOLS/twiddle12288.h index 412746a13d..bc1226c67e 100644 --- a/openair1/PHY/TOOLS/twiddle12288.h +++ b/openair1/PHY/TOOLS/twiddle12288.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/twiddle1536.h b/openair1/PHY/TOOLS/twiddle1536.h index 864b5b1aea..b74534aabf 100644 --- a/openair1/PHY/TOOLS/twiddle1536.h +++ b/openair1/PHY/TOOLS/twiddle1536.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/twiddle24576.h b/openair1/PHY/TOOLS/twiddle24576.h index d3f5622f98..46cdb97a5b 100644 --- a/openair1/PHY/TOOLS/twiddle24576.h +++ b/openair1/PHY/TOOLS/twiddle24576.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/twiddle6144.h b/openair1/PHY/TOOLS/twiddle6144.h index d1241ab5fa..3f9c3684dc 100644 --- a/openair1/PHY/TOOLS/twiddle6144.h +++ b/openair1/PHY/TOOLS/twiddle6144.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/TOOLS/vars.h b/openair1/PHY/TOOLS/vars.h index f6edc6bb34..7f3cc6e31f 100644 --- a/openair1/PHY/TOOLS/vars.h +++ b/openair1/PHY/TOOLS/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 1fee82a3fa..398861cabf 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/extern.h b/openair1/PHY/extern.h index 8631d759cf..a7450e3e21 100755 --- a/openair1/PHY/extern.h +++ b/openair1/PHY/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 66b30ffda0..a0ef6c005a 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index a0302fd526..c84b7d3ece 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/spec_defs.h b/openair1/PHY/spec_defs.h index ac0ee07428..c8a1e86e5e 100755 --- a/openair1/PHY/spec_defs.h +++ b/openair1/PHY/spec_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/spec_defs_top.h b/openair1/PHY/spec_defs_top.h index f0ec7b4548..8f647f1eac 100755 --- a/openair1/PHY/spec_defs_top.h +++ b/openair1/PHY/spec_defs_top.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/sse_intrin.h b/openair1/PHY/sse_intrin.h index cfd3d0b653..dbeb21dff1 100644 --- a/openair1/PHY/sse_intrin.h +++ b/openair1/PHY/sse_intrin.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/types.h b/openair1/PHY/types.h index dedc15adb0..7a362c5270 100755 --- a/openair1/PHY/types.h +++ b/openair1/PHY/types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/PHY/vars.h b/openair1/PHY/vars.h index c7a8d1d78e..294105affa 100755 --- a/openair1/PHY/vars.h +++ b/openair1/PHY/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index 4855774494..bebe476dcd 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/extern.h b/openair1/SCHED/extern.h index a9f826ce8a..dd3892a290 100644 --- a/openair1/SCHED/extern.h +++ b/openair1/SCHED/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/phy_procedures_emos.h b/openair1/SCHED/phy_procedures_emos.h index 81b2a7062f..b34730bddb 100644 --- a/openair1/SCHED/phy_procedures_emos.h +++ b/openair1/SCHED/phy_procedures_emos.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index e92396989a..ce659a60f8 100755 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 2fd7aa52c8..165f2fbac6 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 54fee5a1a4..7dcd71ce47 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/pucch_pc.c b/openair1/SCHED/pucch_pc.c index 3cfb5f9bce..feeff71598 100644 --- a/openair1/SCHED/pucch_pc.c +++ b/openair1/SCHED/pucch_pc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c index 5a3390d677..2af8771afe 100644 --- a/openair1/SCHED/pusch_pc.c +++ b/openair1/SCHED/pusch_pc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/rt_compat.h b/openair1/SCHED/rt_compat.h index a6a43891eb..14b5e8cb52 100755 --- a/openair1/SCHED/rt_compat.h +++ b/openair1/SCHED/rt_compat.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SCHED/vars.h b/openair1/SCHED/vars.h index 7dcff8d727..532251a2f0 100644 --- a/openair1/SCHED/vars.h +++ b/openair1/SCHED/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c index ba66382f96..765952133a 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/defs.h b/openair1/SIMULATION/ETH_TRANSPORT/defs.h index cfc3aa0774..790a0adc2d 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/defs.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c index eabf519ae7..8c5516eabd 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/extern.h b/openair1/SIMULATION/ETH_TRANSPORT/extern.h index c98e45d5e4..c368fa7229 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/extern.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c index 15b36bae92..b919d979d8 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h index c847569328..0ac2ceb336 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c index aaa8e9c32a..d7fc98348c 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c index 3e964e965e..e76b50f61b 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h index 9fd1598961..6fc14fdc99 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/proto.h b/openair1/SIMULATION/ETH_TRANSPORT/proto.h index 1f0c7133a4..aa87a53ab7 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/proto.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/proto.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/socket.c b/openair1/SIMULATION/ETH_TRANSPORT/socket.c index b8ec14b9f3..39195c2206 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/socket.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/socket.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/socket.h b/openair1/SIMULATION/ETH_TRANSPORT/socket.h index ed1510d693..a1cc11e5c2 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/socket.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/socket.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/ETH_TRANSPORT/vars.h b/openair1/SIMULATION/ETH_TRANSPORT/vars.h index ab585813d3..fecf347d28 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/vars.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c index abe19e0fd9..cf6f81597f 100644 --- a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c +++ b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h index 2ff38f7b0a..ee5eeb5ae5 100644 --- a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h +++ b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 16cdd9b6e7..28e7bc8216 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c index 21124eba8d..578fec7d0e 100644 --- a/openair1/SIMULATION/LTE_PHY/framegen.c +++ b/openair1/SIMULATION/LTE_PHY/framegen.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/gpib_send.c b/openair1/SIMULATION/LTE_PHY/gpib_send.c index db7f89552b..fd9543aa21 100644 --- a/openair1/SIMULATION/LTE_PHY/gpib_send.c +++ b/openair1/SIMULATION/LTE_PHY/gpib_send.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/gpib_send.h b/openair1/SIMULATION/LTE_PHY/gpib_send.h index 2bccfcfcd8..4cc568edc8 100644 --- a/openair1/SIMULATION/LTE_PHY/gpib_send.h +++ b/openair1/SIMULATION/LTE_PHY/gpib_send.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index 474d37a2ec..862edaa864 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c index 67080836b7..5aa3fac997 100644 --- a/openair1/SIMULATION/LTE_PHY/pbchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index 1852e349ec..caa7e1248d 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c index 77f3b8accf..eeca52a274 100644 --- a/openair1/SIMULATION/LTE_PHY/prachsim.c +++ b/openair1/SIMULATION/LTE_PHY/prachsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h b/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h index 45368dad82..0fd3dd752d 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h +++ b/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c b/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c index 78dd47e00b..ce04cb9539 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c index 1f7dfb3789..919bec144d 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c index 24167984b2..c2ceb1c58d 100644 --- a/openair1/SIMULATION/LTE_PHY/scansim.c +++ b/openair1/SIMULATION/LTE_PHY/scansim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/signalanalyzer.c b/openair1/SIMULATION/LTE_PHY/signalanalyzer.c index 26dd530a2a..2167f52abb 100644 --- a/openair1/SIMULATION/LTE_PHY/signalanalyzer.c +++ b/openair1/SIMULATION/LTE_PHY/signalanalyzer.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/signalanalyzer.h b/openair1/SIMULATION/LTE_PHY/signalanalyzer.h index 0ecad3324f..d3d82c8aaa 100644 --- a/openair1/SIMULATION/LTE_PHY/signalanalyzer.h +++ b/openair1/SIMULATION/LTE_PHY/signalanalyzer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c index 6cd90f9311..a5f046da93 100644 --- a/openair1/SIMULATION/LTE_PHY/syncsim.c +++ b/openair1/SIMULATION/LTE_PHY/syncsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/test.c b/openair1/SIMULATION/LTE_PHY/test.c index 6a794a6c20..abaf917f7a 100644 --- a/openair1/SIMULATION/LTE_PHY/test.c +++ b/openair1/SIMULATION/LTE_PHY/test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c index faa6c2c08d..e2a99dd7a4 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c +++ b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h index 5de212dfe0..d8d143817c 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h +++ b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index deda4b4fa7..dd697899b8 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/LTE_PHY/ulsim2.c b/openair1/SIMULATION/LTE_PHY/ulsim2.c index 883c009248..b6b1852c07 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim2.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim2.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/RF/adc.c b/openair1/SIMULATION/RF/adc.c index b588b0a1ed..6dc1c7f8e6 100755 --- a/openair1/SIMULATION/RF/adc.c +++ b/openair1/SIMULATION/RF/adc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/RF/dac.c b/openair1/SIMULATION/RF/dac.c index 41e7eb4fe5..22e286a496 100755 --- a/openair1/SIMULATION/RF/dac.c +++ b/openair1/SIMULATION/RF/dac.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/RF/defs.h b/openair1/SIMULATION/RF/defs.h index c58f7cd8d0..984dfa6ca8 100644 --- a/openair1/SIMULATION/RF/defs.h +++ b/openair1/SIMULATION/RF/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/RF/rf.c b/openair1/SIMULATION/RF/rf.c index 115c730834..1f240595aa 100644 --- a/openair1/SIMULATION/RF/rf.c +++ b/openair1/SIMULATION/RF/rf.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/abstraction.c b/openair1/SIMULATION/TOOLS/abstraction.c index b451e4784b..d63d0b0fe9 100644 --- a/openair1/SIMULATION/TOOLS/abstraction.c +++ b/openair1/SIMULATION/TOOLS/abstraction.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/ch_desc_proto.c b/openair1/SIMULATION/TOOLS/ch_desc_proto.c index 4d9b2bf923..80a491888c 100755 --- a/openair1/SIMULATION/TOOLS/ch_desc_proto.c +++ b/openair1/SIMULATION/TOOLS/ch_desc_proto.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/defs.h b/openair1/SIMULATION/TOOLS/defs.h index d553faddc8..187ffcb241 100644 --- a/openair1/SIMULATION/TOOLS/defs.h +++ b/openair1/SIMULATION/TOOLS/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/gauss.c b/openair1/SIMULATION/TOOLS/gauss.c index a99e5d7173..9c3a431bef 100644 --- a/openair1/SIMULATION/TOOLS/gauss.c +++ b/openair1/SIMULATION/TOOLS/gauss.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/llr_quantization.c b/openair1/SIMULATION/TOOLS/llr_quantization.c index bb76774e1e..e8b4696ba6 100644 --- a/openair1/SIMULATION/TOOLS/llr_quantization.c +++ b/openair1/SIMULATION/TOOLS/llr_quantization.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/multipath_channel.c b/openair1/SIMULATION/TOOLS/multipath_channel.c index 7a21db2a57..9a72ca6423 100644 --- a/openair1/SIMULATION/TOOLS/multipath_channel.c +++ b/openair1/SIMULATION/TOOLS/multipath_channel.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/multipath_tv_channel.c b/openair1/SIMULATION/TOOLS/multipath_tv_channel.c index 8b0b7b85ba..b1bd091ca7 100644 --- a/openair1/SIMULATION/TOOLS/multipath_tv_channel.c +++ b/openair1/SIMULATION/TOOLS/multipath_tv_channel.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c index f79368c81e..9233d94132 100644 --- a/openair1/SIMULATION/TOOLS/random_channel.c +++ b/openair1/SIMULATION/TOOLS/random_channel.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index c060f5171d..24de0468c3 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/scm_corrmat.h b/openair1/SIMULATION/TOOLS/scm_corrmat.h index 91c2bf4bb1..61fd6a6e11 100644 --- a/openair1/SIMULATION/TOOLS/scm_corrmat.h +++ b/openair1/SIMULATION/TOOLS/scm_corrmat.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair1/SIMULATION/TOOLS/taus.c b/openair1/SIMULATION/TOOLS/taus.c index f810f9e2c3..9a2a6f44b3 100644 --- a/openair1/SIMULATION/TOOLS/taus.c +++ b/openair1/SIMULATION/TOOLS/taus.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h index ae761b206a..30810a325e 100644 --- a/openair2/COMMON/as_message.h +++ b/openair2/COMMON/as_message.h @@ -1,31 +1,32 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - -*******************************************************************************/ /***************************************************************************** diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h index 47fef519b5..e33e64ec06 100644 --- a/openair2/COMMON/commonDef.h +++ b/openair2/COMMON/commonDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - -*******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /* Source commonDef.h diff --git a/openair2/COMMON/gtpv1_u_messages_def.h b/openair2/COMMON/gtpv1_u_messages_def.h index 3ec9be54e3..0e93a917ab 100755 --- a/openair2/COMMON/gtpv1_u_messages_def.h +++ b/openair2/COMMON/gtpv1_u_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h index 9c385ae3f6..2a6dd1bf2c 100755 --- a/openair2/COMMON/gtpv1_u_messages_types.h +++ b/openair2/COMMON/gtpv1_u_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/intertask_interface_conf.h b/openair2/COMMON/intertask_interface_conf.h index 3d20c317bd..9d6a7f9d99 100644 --- a/openair2/COMMON/intertask_interface_conf.h +++ b/openair2/COMMON/intertask_interface_conf.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/mac_messages_def.h b/openair2/COMMON/mac_messages_def.h index 2854517a7c..64aca9911c 100644 --- a/openair2/COMMON/mac_messages_def.h +++ b/openair2/COMMON/mac_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h index e0eb258104..ecc8c67533 100644 --- a/openair2/COMMON/mac_messages_types.h +++ b/openair2/COMMON/mac_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/mac_primitives.h b/openair2/COMMON/mac_primitives.h index df5c488b70..a8fc149f47 100644 --- a/openair2/COMMON/mac_primitives.h +++ b/openair2/COMMON/mac_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/mac_rlc_primitives.h b/openair2/COMMON/mac_rlc_primitives.h index 602062977d..62913bd842 100644 --- a/openair2/COMMON/mac_rlc_primitives.h +++ b/openair2/COMMON/mac_rlc_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h index 72c77b3434..b7f1450909 100644 --- a/openair2/COMMON/mac_rrc_primitives.h +++ b/openair2/COMMON/mac_rrc_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/messages_def.h b/openair2/COMMON/messages_def.h index 86297be314..246aa855ec 100644 --- a/openair2/COMMON/messages_def.h +++ b/openair2/COMMON/messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/messages_types.h b/openair2/COMMON/messages_types.h index 669c2e935a..b1ff6c3b18 100644 --- a/openair2/COMMON/messages_types.h +++ b/openair2/COMMON/messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/nas_messages_def.h b/openair2/COMMON/nas_messages_def.h index f18453991e..0e70564aa9 100644 --- a/openair2/COMMON/nas_messages_def.h +++ b/openair2/COMMON/nas_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/nas_messages_types.h b/openair2/COMMON/nas_messages_types.h index 4f6159c094..2251444a01 100644 --- a/openair2/COMMON/nas_messages_types.h +++ b/openair2/COMMON/nas_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/networkDef.h b/openair2/COMMON/networkDef.h index 2eb376a9c7..46716bee24 100644 --- a/openair2/COMMON/networkDef.h +++ b/openair2/COMMON/networkDef.h @@ -1,31 +1,31 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - -*******************************************************************************/ +/* + * Copyright (c) 2015, EURECOM (www.eurecom.fr) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 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. + * + * The views and conclusions contained in the software and documentation are those + * of the authors and should not be interpreted as representing official policies, + * either expressed or implied, of the FreeBSD Project. + */ /***************************************************************************** diff --git a/openair2/COMMON/openair_defs.h b/openair2/COMMON/openair_defs.h index da0db25d2a..0a6b88ce33 100755 --- a/openair2/COMMON/openair_defs.h +++ b/openair2/COMMON/openair_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/openair_types.h b/openair2/COMMON/openair_types.h index 502af95de9..47f217038d 100755 --- a/openair2/COMMON/openair_types.h +++ b/openair2/COMMON/openair_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/pdcp_messages_def.h b/openair2/COMMON/pdcp_messages_def.h index a6e032a0d7..28cda8bc1b 100644 --- a/openair2/COMMON/pdcp_messages_def.h +++ b/openair2/COMMON/pdcp_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/pdcp_messages_types.h b/openair2/COMMON/pdcp_messages_types.h index 4eb6063a5e..fc239f529f 100644 --- a/openair2/COMMON/pdcp_messages_types.h +++ b/openair2/COMMON/pdcp_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/phy_messages_def.h b/openair2/COMMON/phy_messages_def.h index 80464299ce..bc63c28ac3 100644 --- a/openair2/COMMON/phy_messages_def.h +++ b/openair2/COMMON/phy_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/phy_messages_types.h b/openair2/COMMON/phy_messages_types.h index 6dd647a17c..b8ef212f31 100644 --- a/openair2/COMMON/phy_messages_types.h +++ b/openair2/COMMON/phy_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h index e7f0b7bcb7..ed052fc608 100755 --- a/openair2/COMMON/platform_constants.h +++ b/openair2/COMMON/platform_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index 7b1c02c2e7..a1af19fd0a 100755 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/ral_messages_def.h b/openair2/COMMON/ral_messages_def.h index 96543e6ad8..59719663fe 100755 --- a/openair2/COMMON/ral_messages_def.h +++ b/openair2/COMMON/ral_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/ral_messages_types.h b/openair2/COMMON/ral_messages_types.h index 5b54a03d77..234304004d 100755 --- a/openair2/COMMON/ral_messages_types.h +++ b/openair2/COMMON/ral_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rlc_messages_def.h b/openair2/COMMON/rlc_messages_def.h index aed4022856..990648eff6 100755 --- a/openair2/COMMON/rlc_messages_def.h +++ b/openair2/COMMON/rlc_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rlc_messages_types.h b/openair2/COMMON/rlc_messages_types.h index 2918675fa1..1399dadade 100755 --- a/openair2/COMMON/rlc_messages_types.h +++ b/openair2/COMMON/rlc_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h index 76073933fb..27d3a6bdd4 100644 --- a/openair2/COMMON/rrc_messages_def.h +++ b/openair2/COMMON/rrc_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 2d6f3cdb86..816b936895 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rrm_config_structs.h b/openair2/COMMON/rrm_config_structs.h index 9fa74dd14e..55443f497e 100755 --- a/openair2/COMMON/rrm_config_structs.h +++ b/openair2/COMMON/rrm_config_structs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rrm_constants.h b/openair2/COMMON/rrm_constants.h index 25c584711c..e12608feb2 100755 --- a/openair2/COMMON/rrm_constants.h +++ b/openair2/COMMON/rrm_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/rtos_header.h b/openair2/COMMON/rtos_header.h index 92ed57e822..ea2783ee6f 100755 --- a/openair2/COMMON/rtos_header.h +++ b/openair2/COMMON/rtos_header.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h index ae81968018..ce51ac78ca 100644 --- a/openair2/COMMON/s1ap_messages_def.h +++ b/openair2/COMMON/s1ap_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h index 7849e418d1..c39725b737 100644 --- a/openair2/COMMON/s1ap_messages_types.h +++ b/openair2/COMMON/s1ap_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/sctp_messages_def.h b/openair2/COMMON/sctp_messages_def.h index d3273ba03d..8053f47ec9 100644 --- a/openair2/COMMON/sctp_messages_def.h +++ b/openair2/COMMON/sctp_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/sctp_messages_types.h b/openair2/COMMON/sctp_messages_types.h index 0b365bd38b..490e39a8c7 100644 --- a/openair2/COMMON/sctp_messages_types.h +++ b/openair2/COMMON/sctp_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/tasks_def.h b/openair2/COMMON/tasks_def.h index 1da78c6131..5e0f8bd211 100644 --- a/openair2/COMMON/tasks_def.h +++ b/openair2/COMMON/tasks_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/udp_messages_def.h b/openair2/COMMON/udp_messages_def.h index 43dc61f94f..a6341ec880 100755 --- a/openair2/COMMON/udp_messages_def.h +++ b/openair2/COMMON/udp_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/udp_messages_types.h b/openair2/COMMON/udp_messages_types.h index fe3ebbafd7..9491fab65f 100755 --- a/openair2/COMMON/udp_messages_types.h +++ b/openair2/COMMON/udp_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/x2ap_messages_def.h b/openair2/COMMON/x2ap_messages_def.h index 8518adcc8e..4e5bef69d5 100644 --- a/openair2/COMMON/x2ap_messages_def.h +++ b/openair2/COMMON/x2ap_messages_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h index 0e936c98cb..4e22149f3b 100644 --- a/openair2/COMMON/x2ap_messages_types.h +++ b/openair2/COMMON/x2ap_messages_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 4c55b05070..70fb5ad61f 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/ENB_APP/enb_app.h b/openair2/ENB_APP/enb_app.h index 78580e27bf..30e3373eac 100644 --- a/openair2/ENB_APP/enb_app.h +++ b/openair2/ENB_APP/enb_app.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index b5eeb63e09..07e0ffa640 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index 0fb82dcde3..113681dafe 100755 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index b19e7f72e8..e3f6d8e78c 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index c5c4156c00..a0a43b6d79 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 041cabb686..329c40be05 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index bdcbae6b7f..361c0f461f 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c index 963942d7dc..dd0890783e 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index e8738f9be0..52e0f60d65 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c index ce3386b2cd..e894f3a662 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index d5415e0413..34169d902e 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 8b79090f3d..1018c6e7d8 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/extern.h b/openair2/LAYER2/MAC/extern.h index f29fefbea7..ca847acf4c 100644 --- a/openair2/LAYER2/MAC/extern.h +++ b/openair2/LAYER2/MAC/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/l1_helpers.c b/openair2/LAYER2/MAC/l1_helpers.c index 89314b8200..3b4c78ea92 100644 --- a/openair2/LAYER2/MAC/l1_helpers.c +++ b/openair2/LAYER2/MAC/l1_helpers.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/lte_transport_init.c b/openair2/LAYER2/MAC/lte_transport_init.c index 47493f5086..fa446a4aee 100755 --- a/openair2/LAYER2/MAC/lte_transport_init.c +++ b/openair2/LAYER2/MAC/lte_transport_init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 8a73c9298f..5db78a30c2 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/openair2_proc.c b/openair2/LAYER2/MAC/openair2_proc.c index 5e0b8d5c02..bb4a994a8a 100644 --- a/openair2/LAYER2/MAC/openair2_proc.c +++ b/openair2/LAYER2/MAC/openair2_proc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c index e4f113c77a..5a4caf82c4 100644 --- a/openair2/LAYER2/MAC/pre_processor.c +++ b/openair2/LAYER2/MAC/pre_processor.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index 331d635371..d02e42ee16 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index 6f61f22848..43ec8b05ec 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index acf284bd37..2e97f83fac 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 0a474d14b8..ee6340cb43 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/MAC/vars.h b/openair2/LAYER2/MAC/vars.h index 60023bbae2..88da64de5a 100644 --- a/openair2/LAYER2/MAC/vars.h +++ b/openair2/LAYER2/MAC/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index df27aa2ee0..f25e921570 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h index ee1ef82c93..9e5b15f5a3 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c index facb9c8844..e858008803 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h index 84d3e9cea5..90c4805dde 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index 785a287d58..787d463b32 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c index 524dd2022b..365013c42d 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c index 7ecf483332..fb530f686a 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h index 185b50f866..1913fd69f1 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h index e7ed7dde9b..3b83140af2 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c index 131f56b968..15a1cf57d2 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c index fcfcfb58ae..9615726bc0 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h index a17d9ecc6c..1766613e1f 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c index 4f0d11e235..8786a91690 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c index 0790244fbb..ef2cf1afaf 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h index f5a7141a33..41f73a7045 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c index e8dcae6762..ec303172b0 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h index 0e944d76bc..70cbb3b12e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h index 63cc6d8e9e..3bc97ee650 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h index ea661b3881..15bba038ea 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c index 5d981b417a..8bffde184e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h index 19cc5c2a8e..111de0416e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c index ade7becaf1..eb2d0c5aca 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h index e9633213a7..ed2f7f2936 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h index f6edc6bb34..7f3cc6e31f 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c index badbd0d71b..2581437f91 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h index d4cb8a4373..c5fbc9edea 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c index e85f627a4b..f41b96653c 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h index 18a3423564..66e492649d 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c index ec0da054c8..9c318a0346 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h index e1d01d180c..aa6c4b878d 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c index 4a96a25306..a580181f6e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h index 2f57c3859e..6c6bb0e6c6 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c index d5c53c3b6b..e2dda28f95 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h index 99de4b1f76..eba9dd6455 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c index cb00704175..59f5180e2c 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h index 5b83dfebfd..db171d3e3e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c index 84d86c1a91..9c46297ad6 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h index 85bdd196b7..6a44401701 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h index d887168fb8..738952d3c6 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c index a174b7fa93..13f96e1f3f 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h index 3e77bacca2..a78a391869 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c index a30590bb83..746bde2659 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h index 079a0f4565..2ef993e9ee 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c index f15ae8132f..a05700abc1 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h index 35f79e8637..11bcc92b09 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c index cd04c185a3..716e592ce7 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h index cf6ffc06bc..3881085b0e 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c index 5255ef8b35..89a6657d62 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h index d7716777cf..a9a306cad3 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c index c0bb945d18..9f57a6a0cd 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h index a55971ae9b..d772d1d4be 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h index 2e9e8820c2..fa716f81be 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c index 4a5a4dd259..6b1b487286 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h index b4f9d0bcbc..48322c98b8 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h index 32ed6980b1..e59d2972bc 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c index 834e45e7d7..8aab33f54c 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h index d9b5012766..2289ed639c 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h index afafa734e2..d25a394e8b 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c index 8e735ca5f3..a91e384a55 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h index 98f4b0d4e2..b9a5166ed2 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c index b78feb66e0..b2930e6296 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h index b31d803c64..dce80d2d98 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h index 8aed136494..07fb15bfef 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c index ab7b3a8497..27b35de67d 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h index 04e3a09499..645311f451 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c index 5dfd7c47f3..24c0ee8291 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h index 7a2c13e5e4..adba9c133c 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c index 0cbd74fbf4..085f37e4c1 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h index 560957a50f..b230a6cb40 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c index e57ae55eec..a31f990916 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h index ec9d72851c..45c8b3d16d 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h index 3d518861ce..535998bfd1 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c index aaa4c80e55..04afcff0ff 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h index 185ba9886d..ae64c28278 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c index 7fea51ff72..139490a680 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h index 407d0d76b6..790dc1ee50 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index 67c8803c93..e19c6b0b0a 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h index 627d48c311..392ae88cf8 100755 --- a/openair2/LAYER2/RLC/rlc.h +++ b/openair2/LAYER2/RLC/rlc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_def.h b/openair2/LAYER2/RLC/rlc_def.h index c0c56299a9..1205ad2891 100755 --- a/openair2/LAYER2/RLC/rlc_def.h +++ b/openair2/LAYER2/RLC/rlc_def.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_def_lte.h b/openair2/LAYER2/RLC/rlc_def_lte.h index ee7859e03c..01bf2ac486 100644 --- a/openair2/LAYER2/RLC/rlc_def_lte.h +++ b/openair2/LAYER2/RLC/rlc_def_lte.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index 83ef0716ea..73f323f14b 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_mpls.c b/openair2/LAYER2/RLC/rlc_mpls.c index a8d875984c..263b92b063 100644 --- a/openair2/LAYER2/RLC/rlc_mpls.c +++ b/openair2/LAYER2/RLC/rlc_mpls.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_primitives.h b/openair2/LAYER2/RLC/rlc_primitives.h index 40fa39aedd..d77d131345 100755 --- a/openair2/LAYER2/RLC/rlc_primitives.h +++ b/openair2/LAYER2/RLC/rlc_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c index a2be5cc3cd..05ad79d7d4 100644 --- a/openair2/LAYER2/RLC/rlc_rrc.c +++ b/openair2/LAYER2/RLC/rlc_rrc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/layer2_top.c b/openair2/LAYER2/layer2_top.c index 9acfb1ed94..4cd1f50d03 100644 --- a/openair2/LAYER2/layer2_top.c +++ b/openair2/LAYER2/layer2_top.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c index 83441d7cb7..35684d239a 100644 --- a/openair2/LAYER2/openair2_proc.c +++ b/openair2/LAYER2/openair2_proc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/register.c b/openair2/LAYER2/register.c index 02b299d2cc..ac93364452 100644 --- a/openair2/LAYER2/register.c +++ b/openair2/LAYER2/register.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/LAYER2/register.h b/openair2/LAYER2/register.h index 84113a37c5..09c464ae56 100644 --- a/openair2/LAYER2/register.h +++ b/openair2/LAYER2/register.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/Makefile b/openair2/Makefile index 19ce431a2e..799fde93c0 100755 --- a/openair2/Makefile +++ b/openair2/Makefile @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/openair2/NAS/nas_ue_task.h b/openair2/NAS/nas_ue_task.h index 99410fb335..6695ab0ac5 100644 --- a/openair2/NAS/nas_ue_task.h +++ b/openair2/NAS/nas_ue_task.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c b/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c index 4026f024ed..43b8ec3614 100755 --- a/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c +++ b/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/classifier.c b/openair2/NETWORK_DRIVER/LITE/classifier.c index 5db3ded758..4025e28e19 100755 --- a/openair2/NETWORK_DRIVER/LITE/classifier.c +++ b/openair2/NETWORK_DRIVER/LITE/classifier.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/common.c b/openair2/NETWORK_DRIVER/LITE/common.c index c428d760db..7aca4b8d5f 100755 --- a/openair2/NETWORK_DRIVER/LITE/common.c +++ b/openair2/NETWORK_DRIVER/LITE/common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/constant.h b/openair2/NETWORK_DRIVER/LITE/constant.h index 4bed95b08f..82cef8e8c1 100755 --- a/openair2/NETWORK_DRIVER/LITE/constant.h +++ b/openair2/NETWORK_DRIVER/LITE/constant.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/device.c b/openair2/NETWORK_DRIVER/LITE/device.c index 0ccba3e6ba..9b772d6eef 100755 --- a/openair2/NETWORK_DRIVER/LITE/device.c +++ b/openair2/NETWORK_DRIVER/LITE/device.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/ioctl.c b/openair2/NETWORK_DRIVER/LITE/ioctl.c index df2d74f53a..ad3a4eefac 100755 --- a/openair2/NETWORK_DRIVER/LITE/ioctl.c +++ b/openair2/NETWORK_DRIVER/LITE/ioctl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/ioctl.h b/openair2/NETWORK_DRIVER/LITE/ioctl.h index 578792e5ab..3b5d55823a 100755 --- a/openair2/NETWORK_DRIVER/LITE/ioctl.h +++ b/openair2/NETWORK_DRIVER/LITE/ioctl.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/local.h b/openair2/NETWORK_DRIVER/LITE/local.h index 7d13063555..7268f69b5d 100755 --- a/openair2/NETWORK_DRIVER/LITE/local.h +++ b/openair2/NETWORK_DRIVER/LITE/local.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/netlink.c b/openair2/NETWORK_DRIVER/LITE/netlink.c index bf8030f667..2339540cae 100755 --- a/openair2/NETWORK_DRIVER/LITE/netlink.c +++ b/openair2/NETWORK_DRIVER/LITE/netlink.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/proto_extern.h b/openair2/NETWORK_DRIVER/LITE/proto_extern.h index 16d4e14401..36039ed984 100755 --- a/openair2/NETWORK_DRIVER/LITE/proto_extern.h +++ b/openair2/NETWORK_DRIVER/LITE/proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/sap.h b/openair2/NETWORK_DRIVER/LITE/sap.h index 00aed03764..ffe778fe34 100755 --- a/openair2/NETWORK_DRIVER/LITE/sap.h +++ b/openair2/NETWORK_DRIVER/LITE/sap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/LITE/tool.c b/openair2/NETWORK_DRIVER/LITE/tool.c index 37910bc6c2..492d674c06 100755 --- a/openair2/NETWORK_DRIVER/LITE/tool.c +++ b/openair2/NETWORK_DRIVER/LITE/tool.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c b/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c index 0c0107a37e..fb005b3589 100644 --- a/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c +++ b/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/classifier.c b/openair2/NETWORK_DRIVER/MESH/classifier.c index 7c6ab220ef..2c55c0ca79 100755 --- a/openair2/NETWORK_DRIVER/MESH/classifier.c +++ b/openair2/NETWORK_DRIVER/MESH/classifier.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/common.c b/openair2/NETWORK_DRIVER/MESH/common.c index fa29b91955..37862046c9 100755 --- a/openair2/NETWORK_DRIVER/MESH/common.c +++ b/openair2/NETWORK_DRIVER/MESH/common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/constant.h b/openair2/NETWORK_DRIVER/MESH/constant.h index 4f05f77734..a6f053b658 100755 --- a/openair2/NETWORK_DRIVER/MESH/constant.h +++ b/openair2/NETWORK_DRIVER/MESH/constant.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/device.c b/openair2/NETWORK_DRIVER/MESH/device.c index c7492064db..51b71d6d8e 100755 --- a/openair2/NETWORK_DRIVER/MESH/device.c +++ b/openair2/NETWORK_DRIVER/MESH/device.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/ioctl.c b/openair2/NETWORK_DRIVER/MESH/ioctl.c index 08e445ef6c..89f63ece77 100755 --- a/openair2/NETWORK_DRIVER/MESH/ioctl.c +++ b/openair2/NETWORK_DRIVER/MESH/ioctl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/local.h b/openair2/NETWORK_DRIVER/MESH/local.h index 8539960470..1171eb3b5a 100755 --- a/openair2/NETWORK_DRIVER/MESH/local.h +++ b/openair2/NETWORK_DRIVER/MESH/local.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/mesh.c b/openair2/NETWORK_DRIVER/MESH/mesh.c index b53caf219e..9f49a4b4cd 100755 --- a/openair2/NETWORK_DRIVER/MESH/mesh.c +++ b/openair2/NETWORK_DRIVER/MESH/mesh.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/netlink.c b/openair2/NETWORK_DRIVER/MESH/netlink.c index ac6b9014cf..e8fd851c23 100644 --- a/openair2/NETWORK_DRIVER/MESH/netlink.c +++ b/openair2/NETWORK_DRIVER/MESH/netlink.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/proto_extern.h b/openair2/NETWORK_DRIVER/MESH/proto_extern.h index 7dd52c7682..ea46858445 100755 --- a/openair2/NETWORK_DRIVER/MESH/proto_extern.h +++ b/openair2/NETWORK_DRIVER/MESH/proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h b/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h index 2900ac8be2..a1787b1df7 100755 --- a/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h +++ b/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/sap.h b/openair2/NETWORK_DRIVER/MESH/sap.h index 7320f749df..4241744d86 100755 --- a/openair2/NETWORK_DRIVER/MESH/sap.h +++ b/openair2/NETWORK_DRIVER/MESH/sap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/MESH/tool.c b/openair2/NETWORK_DRIVER/MESH/tool.c index 3b32535d24..54acd68ba7 100755 --- a/openair2/NETWORK_DRIVER/MESH/tool.c +++ b/openair2/NETWORK_DRIVER/MESH/tool.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c index 47d2786fa4..17ce737e6a 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/common.c +++ b/openair2/NETWORK_DRIVER/UE_IP/common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/constant.h b/openair2/NETWORK_DRIVER/UE_IP/constant.h index 2dfc810080..0345d2dfad 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/constant.h +++ b/openair2/NETWORK_DRIVER/UE_IP/constant.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/device.c b/openair2/NETWORK_DRIVER/UE_IP/device.c index c02165174f..a0e32726d9 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/device.c +++ b/openair2/NETWORK_DRIVER/UE_IP/device.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/local.h b/openair2/NETWORK_DRIVER/UE_IP/local.h index 5dd428c4cf..f00d26385d 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/local.h +++ b/openair2/NETWORK_DRIVER/UE_IP/local.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/netlink.c b/openair2/NETWORK_DRIVER/UE_IP/netlink.c index a3efbb2140..17870218c9 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/netlink.c +++ b/openair2/NETWORK_DRIVER/UE_IP/netlink.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h b/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h index 260af062f8..4eac01b680 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h +++ b/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/NETWORK_DRIVER/UE_IP/sap.h b/openair2/NETWORK_DRIVER/UE_IP/sap.h index 170ddf38c6..086390cdc4 100755 --- a/openair2/NETWORK_DRIVER/UE_IP/sap.h +++ b/openair2/NETWORK_DRIVER/UE_IP/sap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index a33e1586f3..20acba99e4 100755 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/PHY_INTERFACE/extern.h b/openair2/PHY_INTERFACE/extern.h index e90423be0e..b1700b7697 100644 --- a/openair2/PHY_INTERFACE/extern.h +++ b/openair2/PHY_INTERFACE/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/PHY_INTERFACE/mac_phy_primitives.c b/openair2/PHY_INTERFACE/mac_phy_primitives.c index 0b7fecf66e..52b4a1b039 100644 --- a/openair2/PHY_INTERFACE/mac_phy_primitives.c +++ b/openair2/PHY_INTERFACE/mac_phy_primitives.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/PHY_INTERFACE/mac_phy_primitives.h b/openair2/PHY_INTERFACE/mac_phy_primitives.h index 774f393c58..a52ce6c8cb 100644 --- a/openair2/PHY_INTERFACE/mac_phy_primitives.h +++ b/openair2/PHY_INTERFACE/mac_phy_primitives.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/PHY_INTERFACE/vars.h b/openair2/PHY_INTERFACE/vars.h index 8e33fafc01..561ab426e7 100644 --- a/openair2/PHY_INTERFACE/vars.h +++ b/openair2/PHY_INTERFACE/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c index fe71e4bd4c..732d2aa54a 100644 --- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c +++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h index 15807ddb83..f694a68c58 100644 --- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h +++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c index 16811fe70f..6a64095e92 100644 --- a/openair2/RRC/LITE/L2_interface.c +++ b/openair2/RRC/LITE/L2_interface.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index 8823a87130..110dc6442d 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h index d1516feccc..b5747cb94b 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index 75db59add6..bae3dc887a 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/extern.h b/openair2/RRC/LITE/extern.h index 40e5e3e262..64863b796f 100644 --- a/openair2/RRC/LITE/extern.h +++ b/openair2/RRC/LITE/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h index 9fbfadbd85..5d77698c8e 100644 --- a/openair2/RRC/LITE/proto.h +++ b/openair2/RRC/LITE/proto.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_2_rrm_msg.c b/openair2/RRC/LITE/rrc_2_rrm_msg.c index 64318c8063..0dcdce6b12 100644 --- a/openair2/RRC/LITE/rrc_2_rrm_msg.c +++ b/openair2/RRC/LITE/rrc_2_rrm_msg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 9682f2f587..a919a055f2 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_UE_ral.c b/openair2/RRC/LITE/rrc_UE_ral.c index 401d7257f9..ed1e6ca205 100755 --- a/openair2/RRC/LITE/rrc_UE_ral.c +++ b/openair2/RRC/LITE/rrc_UE_ral.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_UE_ral.h b/openair2/RRC/LITE/rrc_UE_ral.h index 6ad8e24023..a06ae637cd 100755 --- a/openair2/RRC/LITE/rrc_UE_ral.h +++ b/openair2/RRC/LITE/rrc_UE_ral.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c index 1d0e855a82..e2d8a6c69b 100644 --- a/openair2/RRC/LITE/rrc_common.c +++ b/openair2/RRC/LITE/rrc_common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_config.c b/openair2/RRC/LITE/rrc_config.c index e33c2a71b9..cd91e6c2f3 100644 --- a/openair2/RRC/LITE/rrc_config.c +++ b/openair2/RRC/LITE/rrc_config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 47c6055c62..f19c3bced4 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c index ef70760235..b85933ad47 100755 --- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c +++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h index 70f9876164..388f71c136 100755 --- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h +++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 60b514ba2c..5c41658862 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.h b/openair2/RRC/LITE/rrc_eNB_S1AP.h index 0f6e01d5b6..ea797e8c20 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.h +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_UE_context.c b/openair2/RRC/LITE/rrc_eNB_UE_context.c index 2bd2f1d69c..0662471763 100644 --- a/openair2/RRC/LITE/rrc_eNB_UE_context.c +++ b/openair2/RRC/LITE/rrc_eNB_UE_context.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_UE_context.h b/openair2/RRC/LITE/rrc_eNB_UE_context.h index 6a575cd700..084baa9cc4 100644 --- a/openair2/RRC/LITE/rrc_eNB_UE_context.h +++ b/openair2/RRC/LITE/rrc_eNB_UE_context.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_ral.c b/openair2/RRC/LITE/rrc_eNB_ral.c index ab9ff08705..d1a0f02e46 100755 --- a/openair2/RRC/LITE/rrc_eNB_ral.c +++ b/openair2/RRC/LITE/rrc_eNB_ral.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_eNB_ral.h b/openair2/RRC/LITE/rrc_eNB_ral.h index 31c1d031ca..da69b47023 100755 --- a/openair2/RRC/LITE/rrc_eNB_ral.h +++ b/openair2/RRC/LITE/rrc_eNB_ral.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_rrm_interface.c b/openair2/RRC/LITE/rrc_rrm_interface.c index 9e539bf4df..29f97ed296 100644 --- a/openair2/RRC/LITE/rrc_rrm_interface.c +++ b/openair2/RRC/LITE/rrc_rrm_interface.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_rrm_interface.h b/openair2/RRC/LITE/rrc_rrm_interface.h index eccadf03bf..5d83f8679b 100644 --- a/openair2/RRC/LITE/rrc_rrm_interface.h +++ b/openair2/RRC/LITE/rrc_rrm_interface.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrc_types.h b/openair2/RRC/LITE/rrc_types.h index 854f43e747..cd9b7815f6 100644 --- a/openair2/RRC/LITE/rrc_types.h +++ b/openair2/RRC/LITE/rrc_types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/rrm_2_rrc_msg.c b/openair2/RRC/LITE/rrm_2_rrc_msg.c index 6cc08421dd..cc44465201 100644 --- a/openair2/RRC/LITE/rrm_2_rrc_msg.c +++ b/openair2/RRC/LITE/rrm_2_rrc_msg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/utils.c b/openair2/RRC/LITE/utils.c index cf1252c30a..1bf6530384 100644 --- a/openair2/RRC/LITE/utils.c +++ b/openair2/RRC/LITE/utils.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/LITE/vars.h b/openair2/RRC/LITE/vars.h index 92525194e8..122dea1df2 100644 --- a/openair2/RRC/LITE/vars.h +++ b/openair2/RRC/LITE/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/NAS/nas_config.c b/openair2/RRC/NAS/nas_config.c index d6c12a09e6..400be1a604 100644 --- a/openair2/RRC/NAS/nas_config.c +++ b/openair2/RRC/NAS/nas_config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/NAS/nas_config.h b/openair2/RRC/NAS/nas_config.h index 654cb978c5..93ee5a196d 100755 --- a/openair2/RRC/NAS/nas_config.h +++ b/openair2/RRC/NAS/nas_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/NAS/rb_config.c b/openair2/RRC/NAS/rb_config.c index 2779a70420..9a7f8a88da 100644 --- a/openair2/RRC/NAS/rb_config.c +++ b/openair2/RRC/NAS/rb_config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRC/NAS/rb_config.h b/openair2/RRC/NAS/rb_config.h index 9a9bd011f0..e8d807f882 100644 --- a/openair2/RRC/NAS/rb_config.h +++ b/openair2/RRC/NAS/rb_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/platform.h b/openair2/RRM_4_RRC_LITE/src/platform.h index 2d3ed51435..42bab6dc8b 100755 --- a/openair2/RRM_4_RRC_LITE/src/platform.h +++ b/openair2/RRM_4_RRC_LITE/src/platform.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/platform_constants.h b/openair2/RRM_4_RRC_LITE/src/platform_constants.h index 40d936f44a..ecf072ac4c 100755 --- a/openair2/RRM_4_RRC_LITE/src/platform_constants.h +++ b/openair2/RRM_4_RRC_LITE/src/platform_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/platform_defines.h b/openair2/RRM_4_RRC_LITE/src/platform_defines.h index 9f185a04a8..ff3e7c0428 100755 --- a/openair2/RRM_4_RRC_LITE/src/platform_defines.h +++ b/openair2/RRM_4_RRC_LITE/src/platform_defines.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.cpp index 4408039e1c..04b97887e4 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.h index 867b22c040..ee1eb8f38a 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Asn1Utils.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.cpp index cc5bcb68d8..7bd92ad9b6 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.h index c5ddc45756..107cc97717 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Command.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.cpp index ae3c752efa..73824db9a9 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.h index e561a9ea7e..eb897ce894 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/DataRadioBearer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.cpp index b3e486fe85..8a4498861b 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.h index 3e8bf11ad3..c1c761032d 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/ENodeB.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Exceptions.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Exceptions.h index b18730bf38..a236d5e09e 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Exceptions.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Exceptions.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.cpp index 3b810a833b..607bfd042a 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.h index 2420f39f43..c9d572cbf1 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/LogicalChannel.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.cpp index 2e92d95240..7400700800 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.h index 41dbf9bebe..6d2be81694 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Mobile.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.cpp index 179fba1c7f..76a32516e4 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.h index fc944f57a2..16cf600c04 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioBearer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.cpp index 7cd631cc02..efcffdcf7d 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.h index 7eeb564d29..263c486c2e 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/RadioResources.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.cpp index f3a197b135..99fa875d67 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.h index b5603e74cb..e441f9b0d7 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/SignallingRadioBearer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.cpp index 810fdc1636..c9ccc39745 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.h index 7f9eade115..2497a4ea3b 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transaction.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.cpp b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.cpp index ed084245ec..04176f98ee 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.cpp +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.h b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.h index 2060f6a4a2..1b15b2e59f 100755 --- a/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.h +++ b/openair2/RRM_4_RRC_LITE/src/radio_resources/Transactions.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/RRM_4_RRC_LITE/src/rrm.cpp b/openair2/RRM_4_RRC_LITE/src/rrm.cpp index 9c6304da22..02e3cae229 100755 --- a/openair2/RRM_4_RRC_LITE/src/rrm.cpp +++ b/openair2/RRM_4_RRC_LITE/src/rrm.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/AT_COMMANDS/parser.c b/openair2/UTIL/AT_COMMANDS/parser.c index c8cdba1209..0a5a530a31 100755 --- a/openair2/UTIL/AT_COMMANDS/parser.c +++ b/openair2/UTIL/AT_COMMANDS/parser.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/AT_COMMANDS/parser.h b/openair2/UTIL/AT_COMMANDS/parser.h index 443b602221..d232c076aa 100755 --- a/openair2/UTIL/AT_COMMANDS/parser.h +++ b/openair2/UTIL/AT_COMMANDS/parser.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/BIGPHYS/bigphys.c b/openair2/UTIL/BIGPHYS/bigphys.c index bf99d96a70..a325217621 100755 --- a/openair2/UTIL/BIGPHYS/bigphys.c +++ b/openair2/UTIL/BIGPHYS/bigphys.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/BIGPHYS/defs.h b/openair2/UTIL/BIGPHYS/defs.h index 5719cf0511..a371fb0002 100644 --- a/openair2/UTIL/BIGPHYS/defs.h +++ b/openair2/UTIL/BIGPHYS/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/CLI/cli.c b/openair2/UTIL/CLI/cli.c index 710f9c4d8a..9f5f226047 100644 --- a/openair2/UTIL/CLI/cli.c +++ b/openair2/UTIL/CLI/cli.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/CLI/cli.h b/openair2/UTIL/CLI/cli.h index 4e9ba75cfe..fc1109b1c6 100644 --- a/openair2/UTIL/CLI/cli.h +++ b/openair2/UTIL/CLI/cli.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/CLI/cli_cmd.c b/openair2/UTIL/CLI/cli_cmd.c index a7acbbe5e5..8f7db6862c 100644 --- a/openair2/UTIL/CLI/cli_cmd.c +++ b/openair2/UTIL/CLI/cli_cmd.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/CLI/cli_if.h b/openair2/UTIL/CLI/cli_if.h index f7a3e0c381..1ec29d18a5 100644 --- a/openair2/UTIL/CLI/cli_if.h +++ b/openair2/UTIL/CLI/cli_if.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/CLI/cli_server.c b/openair2/UTIL/CLI/cli_server.c index df285c52bd..b93679c384 100644 --- a/openair2/UTIL/CLI/cli_server.c +++ b/openair2/UTIL/CLI/cli_server.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/FIFO/pad_list.c b/openair2/UTIL/FIFO/pad_list.c index dc0176670d..db7e33f1d6 100755 --- a/openair2/UTIL/FIFO/pad_list.c +++ b/openair2/UTIL/FIFO/pad_list.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/FIFO/pad_list.h b/openair2/UTIL/FIFO/pad_list.h index bcaf803cb8..5d018c3e24 100755 --- a/openair2/UTIL/FIFO/pad_list.h +++ b/openair2/UTIL/FIFO/pad_list.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/FIFO/types.h b/openair2/UTIL/FIFO/types.h index 0881074964..f75460d18b 100644 --- a/openair2/UTIL/FIFO/types.h +++ b/openair2/UTIL/FIFO/types.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LISTS/list.c b/openair2/UTIL/LISTS/list.c index 343b1769d2..37450f6b30 100755 --- a/openair2/UTIL/LISTS/list.c +++ b/openair2/UTIL/LISTS/list.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index 283a906b58..abbdbc01ab 100755 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index c5d84689bf..c6abbfa001 100755 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/log_extern.h b/openair2/UTIL/LOG/log_extern.h index 8751254916..fbae536524 100644 --- a/openair2/UTIL/LOG/log_extern.h +++ b/openair2/UTIL/LOG/log_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/log_if.h b/openair2/UTIL/LOG/log_if.h index b286d027aa..1e89344028 100644 --- a/openair2/UTIL/LOG/log_if.h +++ b/openair2/UTIL/LOG/log_if.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index a1223e6ca5..8dfbfd6ef5 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 7ec2e2445e..68257484f0 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/crc_byte.c b/openair2/UTIL/MATH/crc_byte.c index 18054bf4d8..d305b10aeb 100644 --- a/openair2/UTIL/MATH/crc_byte.c +++ b/openair2/UTIL/MATH/crc_byte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/oml.c b/openair2/UTIL/MATH/oml.c index 09e5b1a9c2..20c2876207 100644 --- a/openair2/UTIL/MATH/oml.c +++ b/openair2/UTIL/MATH/oml.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/oml.h b/openair2/UTIL/MATH/oml.h index 24e951fa68..9b0b863549 100644 --- a/openair2/UTIL/MATH/oml.h +++ b/openair2/UTIL/MATH/oml.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/random.c b/openair2/UTIL/MATH/random.c index 0d60a02512..04c20abaa8 100644 --- a/openair2/UTIL/MATH/random.c +++ b/openair2/UTIL/MATH/random.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/random_proto_extern.h b/openair2/UTIL/MATH/random_proto_extern.h index 3844a394ef..2fd70eb86c 100644 --- a/openair2/UTIL/MATH/random_proto_extern.h +++ b/openair2/UTIL/MATH/random_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MATH/taus.c b/openair2/UTIL/MATH/taus.c index cba74ef1b4..277c2c16f6 100755 --- a/openair2/UTIL/MATH/taus.c +++ b/openair2/UTIL/MATH/taus.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c index 6b4b3dab18..f0191a536a 100644 --- a/openair2/UTIL/MEM/mem_block.c +++ b/openair2/UTIL/MEM/mem_block.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MEM/mem_block.h b/openair2/UTIL/MEM/mem_block.h index b38e9a2417..edcb147cee 100755 --- a/openair2/UTIL/MEM/mem_block.h +++ b/openair2/UTIL/MEM/mem_block.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MEM/mem_mngt.c b/openair2/UTIL/MEM/mem_mngt.c index 43f55d1a05..1c4ad60552 100755 --- a/openair2/UTIL/MEM/mem_mngt.c +++ b/openair2/UTIL/MEM/mem_mngt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MEM/mem_mngt_proto_extern.h b/openair2/UTIL/MEM/mem_mngt_proto_extern.h index 9195aa558e..dd20bc2f25 100755 --- a/openair2/UTIL/MEM/mem_mngt_proto_extern.h +++ b/openair2/UTIL/MEM/mem_mngt_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/MEM/mem_pool.h b/openair2/UTIL/MEM/mem_pool.h index 7b68c88baa..5d950008de 100755 --- a/openair2/UTIL/MEM/mem_pool.h +++ b/openair2/UTIL/MEM/mem_pool.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG.c b/openair2/UTIL/OCG/OCG.c index 1170a6db7f..54f011260b 100644 --- a/openair2/UTIL/OCG/OCG.c +++ b/openair2/UTIL/OCG/OCG.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG.h b/openair2/UTIL/OCG/OCG.h index a32bfb14ee..cf96de7963 100644 --- a/openair2/UTIL/OCG/OCG.h +++ b/openair2/UTIL/OCG/OCG.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_call_emu.h b/openair2/UTIL/OCG/OCG_call_emu.h index 836a10456c..25e455764e 100644 --- a/openair2/UTIL/OCG/OCG_call_emu.h +++ b/openair2/UTIL/OCG/OCG_call_emu.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_config_mobi.c b/openair2/UTIL/OCG/OCG_config_mobi.c index b84210c073..f931fe0929 100644 --- a/openair2/UTIL/OCG/OCG_config_mobi.c +++ b/openair2/UTIL/OCG/OCG_config_mobi.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_config_mobi.h b/openair2/UTIL/OCG/OCG_config_mobi.h index d1125651a0..a52c784fc6 100644 --- a/openair2/UTIL/OCG/OCG_config_mobi.h +++ b/openair2/UTIL/OCG/OCG_config_mobi.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_create_dir.c b/openair2/UTIL/OCG/OCG_create_dir.c index 357fce7b20..27258ff122 100644 --- a/openair2/UTIL/OCG/OCG_create_dir.c +++ b/openair2/UTIL/OCG/OCG_create_dir.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_create_dir.h b/openair2/UTIL/OCG/OCG_create_dir.h index b51306f624..f9f8db1690 100644 --- a/openair2/UTIL/OCG/OCG_create_dir.h +++ b/openair2/UTIL/OCG/OCG_create_dir.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_detect_file.c b/openair2/UTIL/OCG/OCG_detect_file.c index 1ce230fb97..fb18f90bbc 100644 --- a/openair2/UTIL/OCG/OCG_detect_file.c +++ b/openair2/UTIL/OCG/OCG_detect_file.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_detect_file.h b/openair2/UTIL/OCG/OCG_detect_file.h index 237bfa41d2..de877a4fcf 100644 --- a/openair2/UTIL/OCG/OCG_detect_file.h +++ b/openair2/UTIL/OCG/OCG_detect_file.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_extern.h b/openair2/UTIL/OCG/OCG_extern.h index 1dc0b82ab7..e03932e406 100644 --- a/openair2/UTIL/OCG/OCG_extern.h +++ b/openair2/UTIL/OCG/OCG_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_generate_report.c b/openair2/UTIL/OCG/OCG_generate_report.c index 36db0d2ccb..5cf448a15d 100644 --- a/openair2/UTIL/OCG/OCG_generate_report.c +++ b/openair2/UTIL/OCG/OCG_generate_report.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_generate_report.h b/openair2/UTIL/OCG/OCG_generate_report.h index e8a777f8a4..2a2f26f827 100644 --- a/openair2/UTIL/OCG/OCG_generate_report.h +++ b/openair2/UTIL/OCG/OCG_generate_report.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_get_opt.c b/openair2/UTIL/OCG/OCG_get_opt.c index d4d0c877d9..1e9d8a784b 100644 --- a/openair2/UTIL/OCG/OCG_get_opt.c +++ b/openair2/UTIL/OCG/OCG_get_opt.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_get_opt.h b/openair2/UTIL/OCG/OCG_get_opt.h index a084619a07..d44e96f5c3 100644 --- a/openair2/UTIL/OCG/OCG_get_opt.h +++ b/openair2/UTIL/OCG/OCG_get_opt.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_if.h b/openair2/UTIL/OCG/OCG_if.h index 7b56003424..5f600539dd 100644 --- a/openair2/UTIL/OCG/OCG_if.h +++ b/openair2/UTIL/OCG/OCG_if.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_parse_XML.c b/openair2/UTIL/OCG/OCG_parse_XML.c index 7d6cfad8ae..5397cdbd98 100644 --- a/openair2/UTIL/OCG/OCG_parse_XML.c +++ b/openair2/UTIL/OCG/OCG_parse_XML.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_parse_XML.h b/openair2/UTIL/OCG/OCG_parse_XML.h index 6295a7afe6..25de67e196 100644 --- a/openair2/UTIL/OCG/OCG_parse_XML.h +++ b/openair2/UTIL/OCG/OCG_parse_XML.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_parse_filename.c b/openair2/UTIL/OCG/OCG_parse_filename.c index bb860728a7..2f2a196fa0 100644 --- a/openair2/UTIL/OCG/OCG_parse_filename.c +++ b/openair2/UTIL/OCG/OCG_parse_filename.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_parse_filename.h b/openair2/UTIL/OCG/OCG_parse_filename.h index ebdb617efe..4c1bd6989d 100644 --- a/openair2/UTIL/OCG/OCG_parse_filename.h +++ b/openair2/UTIL/OCG/OCG_parse_filename.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_save_XML.c b/openair2/UTIL/OCG/OCG_save_XML.c index 5ad4081572..ec94ab9f8e 100644 --- a/openair2/UTIL/OCG/OCG_save_XML.c +++ b/openair2/UTIL/OCG/OCG_save_XML.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_save_XML.h b/openair2/UTIL/OCG/OCG_save_XML.h index 0fff43fa34..d8cc24c9e8 100644 --- a/openair2/UTIL/OCG/OCG_save_XML.h +++ b/openair2/UTIL/OCG/OCG_save_XML.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OCG/OCG_vars.h b/openair2/UTIL/OCG/OCG_vars.h index 34c97dd58d..f1aab9b580 100644 --- a/openair2/UTIL/OCG/OCG_vars.h +++ b/openair2/UTIL/OCG/OCG_vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/TraCIConstants.h b/openair2/UTIL/OMG/TraCIConstants.h index 90c78e0012..1defa16aad 100644 --- a/openair2/UTIL/OMG/TraCIConstants.h +++ b/openair2/UTIL/OMG/TraCIConstants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/client_traci_OMG.c b/openair2/UTIL/OMG/client_traci_OMG.c index a4b027116a..b3b43f49b2 100644 --- a/openair2/UTIL/OMG/client_traci_OMG.c +++ b/openair2/UTIL/OMG/client_traci_OMG.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/client_traci_OMG.h b/openair2/UTIL/OMG/client_traci_OMG.h index a30f64372e..4d8b9e86d1 100644 --- a/openair2/UTIL/OMG/client_traci_OMG.h +++ b/openair2/UTIL/OMG/client_traci_OMG.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/common.c b/openair2/UTIL/OMG/common.c index 1e2ea5a1f3..dd12cb302a 100644 --- a/openair2/UTIL/OMG/common.c +++ b/openair2/UTIL/OMG/common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/defs.h b/openair2/UTIL/OMG/defs.h index 1e70f1ea47..99de25b176 100644 --- a/openair2/UTIL/OMG/defs.h +++ b/openair2/UTIL/OMG/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/grid.c b/openair2/UTIL/OMG/grid.c index 69c9f2eb24..1c3fc0cc5c 100644 --- a/openair2/UTIL/OMG/grid.c +++ b/openair2/UTIL/OMG/grid.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/grid.h b/openair2/UTIL/OMG/grid.h index dd148e3e2a..138eb0b552 100644 --- a/openair2/UTIL/OMG/grid.h +++ b/openair2/UTIL/OMG/grid.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/id_manager.c b/openair2/UTIL/OMG/id_manager.c index ba6b8391e9..d37e56210d 100644 --- a/openair2/UTIL/OMG/id_manager.c +++ b/openair2/UTIL/OMG/id_manager.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/id_manager.h b/openair2/UTIL/OMG/id_manager.h index ac2be91e43..d255d84dea 100644 --- a/openair2/UTIL/OMG/id_manager.h +++ b/openair2/UTIL/OMG/id_manager.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/job.c b/openair2/UTIL/OMG/job.c index 51efd44e91..e43ed1a3eb 100644 --- a/openair2/UTIL/OMG/job.c +++ b/openair2/UTIL/OMG/job.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/mobility_parser.c b/openair2/UTIL/OMG/mobility_parser.c index f22fea9972..d011dbe34f 100644 --- a/openair2/UTIL/OMG/mobility_parser.c +++ b/openair2/UTIL/OMG/mobility_parser.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/mobility_parser.h b/openair2/UTIL/OMG/mobility_parser.h index 9b2ded837e..834f01d64a 100644 --- a/openair2/UTIL/OMG/mobility_parser.h +++ b/openair2/UTIL/OMG/mobility_parser.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg.c b/openair2/UTIL/OMG/omg.c index 86e865ab9d..11bdc62071 100644 --- a/openair2/UTIL/OMG/omg.c +++ b/openair2/UTIL/OMG/omg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg.h b/openair2/UTIL/OMG/omg.h index 0b6627be60..1df5205df7 100644 --- a/openair2/UTIL/OMG/omg.h +++ b/openair2/UTIL/OMG/omg.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg_constants.h b/openair2/UTIL/OMG/omg_constants.h index 8be36532ba..ba09ac6dd8 100644 --- a/openair2/UTIL/OMG/omg_constants.h +++ b/openair2/UTIL/OMG/omg_constants.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg_hashtable.c b/openair2/UTIL/OMG/omg_hashtable.c index 2528c0e80e..761750a634 100644 --- a/openair2/UTIL/OMG/omg_hashtable.c +++ b/openair2/UTIL/OMG/omg_hashtable.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg_hashtable.h b/openair2/UTIL/OMG/omg_hashtable.h index 8c4003e53b..c5437e381c 100644 --- a/openair2/UTIL/OMG/omg_hashtable.h +++ b/openair2/UTIL/OMG/omg_hashtable.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/omg_vars.h b/openair2/UTIL/OMG/omg_vars.h index 3baf3758fb..f2715cdf1b 100644 --- a/openair2/UTIL/OMG/omg_vars.h +++ b/openair2/UTIL/OMG/omg_vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/rwalk.c b/openair2/UTIL/OMG/rwalk.c index 40c7940c12..1a406d20e8 100644 --- a/openair2/UTIL/OMG/rwalk.c +++ b/openair2/UTIL/OMG/rwalk.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/rwalk.h b/openair2/UTIL/OMG/rwalk.h index 9d512c67ad..6d38a8f799 100644 --- a/openair2/UTIL/OMG/rwalk.h +++ b/openair2/UTIL/OMG/rwalk.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/rwp.c b/openair2/UTIL/OMG/rwp.c index f00d1f0bf2..6766cd9555 100644 --- a/openair2/UTIL/OMG/rwp.c +++ b/openair2/UTIL/OMG/rwp.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/rwp.h b/openair2/UTIL/OMG/rwp.h index d35130fb00..ae895b95e3 100644 --- a/openair2/UTIL/OMG/rwp.h +++ b/openair2/UTIL/OMG/rwp.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/socket_traci_OMG.c b/openair2/UTIL/OMG/socket_traci_OMG.c index fed154aa08..1a62ec04da 100644 --- a/openair2/UTIL/OMG/socket_traci_OMG.c +++ b/openair2/UTIL/OMG/socket_traci_OMG.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/socket_traci_OMG.h b/openair2/UTIL/OMG/socket_traci_OMG.h index 1a7f4f5528..a873591148 100644 --- a/openair2/UTIL/OMG/socket_traci_OMG.h +++ b/openair2/UTIL/OMG/socket_traci_OMG.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/static.c b/openair2/UTIL/OMG/static.c index f882ae7fe6..8305c6e9b7 100644 --- a/openair2/UTIL/OMG/static.c +++ b/openair2/UTIL/OMG/static.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/static.h b/openair2/UTIL/OMG/static.h index 18b22123d7..1b5cb0f72f 100644 --- a/openair2/UTIL/OMG/static.h +++ b/openair2/UTIL/OMG/static.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/steadystaterwp.c b/openair2/UTIL/OMG/steadystaterwp.c index 9bf11d240f..c466f3cd23 100644 --- a/openair2/UTIL/OMG/steadystaterwp.c +++ b/openair2/UTIL/OMG/steadystaterwp.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/steadystaterwp.h b/openair2/UTIL/OMG/steadystaterwp.h index e7f3b184ee..1e274d9e1f 100644 --- a/openair2/UTIL/OMG/steadystaterwp.h +++ b/openair2/UTIL/OMG/steadystaterwp.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/storage_traci_OMG.c b/openair2/UTIL/OMG/storage_traci_OMG.c index 7b703387f5..f8ccfdc059 100644 --- a/openair2/UTIL/OMG/storage_traci_OMG.c +++ b/openair2/UTIL/OMG/storage_traci_OMG.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/storage_traci_OMG.h b/openair2/UTIL/OMG/storage_traci_OMG.h index cf2ecbe999..e1f97615c6 100644 --- a/openair2/UTIL/OMG/storage_traci_OMG.h +++ b/openair2/UTIL/OMG/storage_traci_OMG.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/sumo.c b/openair2/UTIL/OMG/sumo.c index 65e193d8dc..f709a73e2a 100644 --- a/openair2/UTIL/OMG/sumo.c +++ b/openair2/UTIL/OMG/sumo.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/sumo.h b/openair2/UTIL/OMG/sumo.h index f4950afc5c..71b36bf310 100644 --- a/openair2/UTIL/OMG/sumo.h +++ b/openair2/UTIL/OMG/sumo.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/trace.c b/openair2/UTIL/OMG/trace.c index 04c84ed22a..89a9377f93 100644 --- a/openair2/UTIL/OMG/trace.c +++ b/openair2/UTIL/OMG/trace.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/trace.h b/openair2/UTIL/OMG/trace.h index b3fe9af630..b3825e2fa8 100644 --- a/openair2/UTIL/OMG/trace.h +++ b/openair2/UTIL/OMG/trace.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/trace_hashtable.c b/openair2/UTIL/OMG/trace_hashtable.c index 633ba700a1..2ecb392219 100644 --- a/openair2/UTIL/OMG/trace_hashtable.c +++ b/openair2/UTIL/OMG/trace_hashtable.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OMG/trace_hashtable.h b/openair2/UTIL/OMG/trace_hashtable.h index 0f0490318c..cd7feb73fc 100644 --- a/openair2/UTIL/OMG/trace_hashtable.h +++ b/openair2/UTIL/OMG/trace_hashtable.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OPT/mac_pcap.h b/openair2/UTIL/OPT/mac_pcap.h index e6e1dfb800..f44c12ec40 100644 --- a/openair2/UTIL/OPT/mac_pcap.h +++ b/openair2/UTIL/OPT/mac_pcap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h index 62ec940cc3..bb3a099e12 100644 --- a/openair2/UTIL/OPT/opt.h +++ b/openair2/UTIL/OPT/opt.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index 5fd34bbcf4..effd0bee85 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -52,7 +52,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OPT/socket_sender.c b/openair2/UTIL/OPT/socket_sender.c index b904e008c5..c984895351 100644 --- a/openair2/UTIL/OPT/socket_sender.c +++ b/openair2/UTIL/OPT/socket_sender.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OPT/vars.h b/openair2/UTIL/OPT/vars.h index 2730a971bd..4e03467537 100644 --- a/openair2/UTIL/OPT/vars.h +++ b/openair2/UTIL/OPT/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OSA/osa_defs.h b/openair2/UTIL/OSA/osa_defs.h index 99f8023142..c11f93d2bb 100644 --- a/openair2/UTIL/OSA/osa_defs.h +++ b/openair2/UTIL/OSA/osa_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OSA/osa_internal.h b/openair2/UTIL/OSA/osa_internal.h index 9376fc8a39..a42f925322 100644 --- a/openair2/UTIL/OSA/osa_internal.h +++ b/openair2/UTIL/OSA/osa_internal.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OSA/osa_key_deriver.c b/openair2/UTIL/OSA/osa_key_deriver.c index 25ed08889e..d8b5fba58b 100644 --- a/openair2/UTIL/OSA/osa_key_deriver.c +++ b/openair2/UTIL/OSA/osa_key_deriver.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OSA/osa_stream_eea.c b/openair2/UTIL/OSA/osa_stream_eea.c index 60fd731902..0a044e2e01 100644 --- a/openair2/UTIL/OSA/osa_stream_eea.c +++ b/openair2/UTIL/OSA/osa_stream_eea.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OSA/osa_stream_eia.c b/openair2/UTIL/OSA/osa_stream_eia.c index 9dc03f3f44..22ad10d25d 100644 --- a/openair2/UTIL/OSA/osa_stream_eia.c +++ b/openair2/UTIL/OSA/osa_stream_eia.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg.c b/openair2/UTIL/OTG/otg.c index 5c7708c5c6..e167eb7b45 100644 --- a/openair2/UTIL/OTG/otg.c +++ b/openair2/UTIL/OTG/otg.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg.h b/openair2/UTIL/OTG/otg.h index 8fef4c0c87..4c3f5bf8d9 100644 --- a/openair2/UTIL/OTG/otg.h +++ b/openair2/UTIL/OTG/otg.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_config.h b/openair2/UTIL/OTG/otg_config.h index 18bb4f5969..7e0e014375 100644 --- a/openair2/UTIL/OTG/otg_config.h +++ b/openair2/UTIL/OTG/otg_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_defs.h b/openair2/UTIL/OTG/otg_defs.h index 4f4cc4f601..c6cee01ec2 100644 --- a/openair2/UTIL/OTG/otg_defs.h +++ b/openair2/UTIL/OTG/otg_defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_externs.h b/openair2/UTIL/OTG/otg_externs.h index bcaa5d307d..7ceccfce35 100644 --- a/openair2/UTIL/OTG/otg_externs.h +++ b/openair2/UTIL/OTG/otg_externs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_form.c b/openair2/UTIL/OTG/otg_form.c index 69b2549541..db77c6a801 100644 --- a/openair2/UTIL/OTG/otg_form.c +++ b/openair2/UTIL/OTG/otg_form.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_form.h b/openair2/UTIL/OTG/otg_form.h index b149206502..153ec75b32 100644 --- a/openair2/UTIL/OTG/otg_form.h +++ b/openair2/UTIL/OTG/otg_form.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_kpi.c b/openair2/UTIL/OTG/otg_kpi.c index f69c6940ff..3aa55df05f 100644 --- a/openair2/UTIL/OTG/otg_kpi.c +++ b/openair2/UTIL/OTG/otg_kpi.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_kpi.h b/openair2/UTIL/OTG/otg_kpi.h index d2c2fcec8a..c4ea232d87 100644 --- a/openair2/UTIL/OTG/otg_kpi.h +++ b/openair2/UTIL/OTG/otg_kpi.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_models.c b/openair2/UTIL/OTG/otg_models.c index b1327e8a08..e671160444 100644 --- a/openair2/UTIL/OTG/otg_models.c +++ b/openair2/UTIL/OTG/otg_models.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_models.h b/openair2/UTIL/OTG/otg_models.h index a0a776f8a7..51944fc15e 100644 --- a/openair2/UTIL/OTG/otg_models.h +++ b/openair2/UTIL/OTG/otg_models.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_rx.c b/openair2/UTIL/OTG/otg_rx.c index b5f0fd416b..8331dd8477 100644 --- a/openair2/UTIL/OTG/otg_rx.c +++ b/openair2/UTIL/OTG/otg_rx.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_rx.h b/openair2/UTIL/OTG/otg_rx.h index 6b3536a9c0..21c6fd85cb 100644 --- a/openair2/UTIL/OTG/otg_rx.h +++ b/openair2/UTIL/OTG/otg_rx.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_rx_socket.c b/openair2/UTIL/OTG/otg_rx_socket.c index 29590e33fc..e9d2e8a863 100644 --- a/openair2/UTIL/OTG/otg_rx_socket.c +++ b/openair2/UTIL/OTG/otg_rx_socket.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_rx_socket.h b/openair2/UTIL/OTG/otg_rx_socket.h index d9e33c9eea..0128269270 100644 --- a/openair2/UTIL/OTG/otg_rx_socket.h +++ b/openair2/UTIL/OTG/otg_rx_socket.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_tx.c b/openair2/UTIL/OTG/otg_tx.c index d6f6507644..e70bccbc73 100644 --- a/openair2/UTIL/OTG/otg_tx.c +++ b/openair2/UTIL/OTG/otg_tx.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_tx.h b/openair2/UTIL/OTG/otg_tx.h index b5cd7741a4..26013dfe47 100644 --- a/openair2/UTIL/OTG/otg_tx.h +++ b/openair2/UTIL/OTG/otg_tx.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_tx_socket.c b/openair2/UTIL/OTG/otg_tx_socket.c index 7eac7d0195..60b9df020c 100644 --- a/openair2/UTIL/OTG/otg_tx_socket.c +++ b/openair2/UTIL/OTG/otg_tx_socket.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_tx_socket.h b/openair2/UTIL/OTG/otg_tx_socket.h index 61668015df..2c5372773f 100644 --- a/openair2/UTIL/OTG/otg_tx_socket.h +++ b/openair2/UTIL/OTG/otg_tx_socket.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/otg_vars.h b/openair2/UTIL/OTG/otg_vars.h index 9ce0afb82d..cc4c56ce9e 100644 --- a/openair2/UTIL/OTG/otg_vars.h +++ b/openair2/UTIL/OTG/otg_vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/OTG/traffic_config.h b/openair2/UTIL/OTG/traffic_config.h index 59b609cca7..3e982b1742 100644 --- a/openair2/UTIL/OTG/traffic_config.h +++ b/openair2/UTIL/OTG/traffic_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TIMER/umts_timer.c b/openair2/UTIL/TIMER/umts_timer.c index 4e59e1e82f..9562aee67d 100755 --- a/openair2/UTIL/TIMER/umts_timer.c +++ b/openair2/UTIL/TIMER/umts_timer.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TIMER/umts_timer.h b/openair2/UTIL/TIMER/umts_timer.h index e5668f6788..a857244ddf 100755 --- a/openair2/UTIL/TIMER/umts_timer.h +++ b/openair2/UTIL/TIMER/umts_timer.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TIMER/umts_timer_proto_extern.h b/openair2/UTIL/TIMER/umts_timer_proto_extern.h index cb0223b111..ca50d3193f 100755 --- a/openair2/UTIL/TIMER/umts_timer_proto_extern.h +++ b/openair2/UTIL/TIMER/umts_timer_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TIMER/umts_timer_struct.h b/openair2/UTIL/TIMER/umts_timer_struct.h index d6e15fabac..46b7216cd9 100755 --- a/openair2/UTIL/TIMER/umts_timer_struct.h +++ b/openair2/UTIL/TIMER/umts_timer_struct.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TRACE/fifo_printf.c b/openair2/UTIL/TRACE/fifo_printf.c index e3b85337d3..2c5f5202f9 100755 --- a/openair2/UTIL/TRACE/fifo_printf.c +++ b/openair2/UTIL/TRACE/fifo_printf.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TRACE/fifo_printf.h b/openair2/UTIL/TRACE/fifo_printf.h index ee0778fbda..84571e355c 100755 --- a/openair2/UTIL/TRACE/fifo_printf.h +++ b/openair2/UTIL/TRACE/fifo_printf.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TRACE/fifo_printf_proto_extern.h b/openair2/UTIL/TRACE/fifo_printf_proto_extern.h index f9e6e278f9..66456af305 100755 --- a/openair2/UTIL/TRACE/fifo_printf_proto_extern.h +++ b/openair2/UTIL/TRACE/fifo_printf_proto_extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/UTIL/TRACE/print.h b/openair2/UTIL/TRACE/print.h index aff035a242..2c465e0fa5 100755 --- a/openair2/UTIL/TRACE/print.h +++ b/openair2/UTIL/TRACE/print.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/X2AP/x2ap.c b/openair2/X2AP/x2ap.c index 4ce72caf55..69b70964a4 100644 --- a/openair2/X2AP/x2ap.c +++ b/openair2/X2AP/x2ap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/X2AP/x2ap.h b/openair2/X2AP/x2ap.h index 16c07eb672..561f0953c3 100644 --- a/openair2/X2AP/x2ap.h +++ b/openair2/X2AP/x2ap.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c index 9d9d7bc656..5565835997 100755 --- a/openair2/X2AP/x2ap_common.c +++ b/openair2/X2AP/x2ap_common.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h index fe7b710d96..04ad77f8e3 100755 --- a/openair2/X2AP/x2ap_common.h +++ b/openair2/X2AP/x2ap_common.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c index 6ebf709ec9..d515a206ae 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h index 39518173db..15e1d39da7 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 63f086ff1d..8b91a74b49 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index a6851b0dbe..8cc7926d45 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c index 6dd457d9b5..ce90d2cff9 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h index 628fcb377c..eabec94ebc 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h index 3ca2f093f7..2be7b7f088 100755 --- a/targets/ARCH/EXMIMO/DEFS/openair_device.h +++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h index 9c47d9b392..925787cabf 100644 --- a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h +++ b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h index 7467bd0357..ffba2d61c4 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c index e02173d9d2..eb23d1afb8 100644 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h index b0bbd5c89b..90d1eaa64c 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c index 99edddab89..4427f4c8af 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c index 1e48a1f8c1..c8b9217ce3 100644 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c index 988238bea9..4ef187b073 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h index e3a3a7abfc..7220946e6b 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h index 7467bd0357..ffba2d61c4 100755 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c index d0d1a4fa08..1cc6abf9f7 100644 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h index b0bbd5c89b..90d1eaa64c 100755 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c index 99edddab89..4427f4c8af 100755 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c index 1e48a1f8c1..c8b9217ce3 100644 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c index 679f83d426..b25ff1cfa8 100755 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h index e3a3a7abfc..7220946e6b 100755 --- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h +++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c index 2e1a8f2587..2a25dd39fe 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c index 060db51b2b..b22b224e04 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h index ab81f78f8a..f19f0cfc42 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c index 4eb0ed7058..15f4deacd2 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c index 30ecf2a56a..8ade1d69a0 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c index a4af653862..c2860f0b18 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c index a07194f770..478f8bb363 100644 --- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c +++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c index 87d006dbbf..5fbe19eacd 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c index 9413295d46..84b2d8e8e2 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h index bad05ca1c5..dd48683ad0 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index 71c1009039..df9900d3bc 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h index f40b7ae88c..ae2ff8a36b 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h index 793f585ae4..238c4ee606 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h +++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elf.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h index a83f89c794..dfd16118c6 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h +++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/elftypes.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c index 17cca70a8a..692742c7cf 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c +++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h index c44570d8a1..ea2abec216 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h +++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc index c451647f49..a007618e43 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc index 4618128401..4d0eef921b 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc index bdf50e1459..708910b4f7 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc index ec10e5d893..a26b6a0a67 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc index 4066cef7c9..75cdef67b2 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc index 5a0eb8c716..03b4b5324d 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc index 98dcb6f2f3..058a8bba3e 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 192ed503e2..e57f55720b 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index 537dbd91f6..148843dbbc 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/COMMON/create_tasks.h b/targets/COMMON/create_tasks.h index 5d27c64abe..4e6f5817d8 100644 --- a/targets/COMMON/create_tasks.h +++ b/targets/COMMON/create_tasks.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf index bd9014670e..21303ebc71 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf @@ -130,7 +130,7 @@ eNBs = }; ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.12.17"; + mme_ip_address = ( { ipv4 = "192.168.12.62"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; @@ -139,11 +139,11 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash index 83e2eb9aea..b6151fc677 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash index 4b4173e6cb..81c4b7b1a6 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash index e0e97d8145..880382699c 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash index b76a267976..8ae7b10b67 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash index 7664678290..aa9bb333d4 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash index 57b935c0db..1fad3fe879 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash +++ b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/RT/USER/TOOLS/thread_ipc.c b/targets/RT/USER/TOOLS/thread_ipc.c index d6b86d2efb..36a61298ef 100644 --- a/targets/RT/USER/TOOLS/thread_ipc.c +++ b/targets/RT/USER/TOOLS/thread_ipc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/TOOLS/thread_ipc.h b/targets/RT/USER/TOOLS/thread_ipc.h index 2a8fcc5185..99439b2b8d 100644 --- a/targets/RT/USER/TOOLS/thread_ipc.h +++ b/targets/RT/USER/TOOLS/thread_ipc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/UE_transport_IQ.c b/targets/RT/USER/UE_transport_IQ.c index e986046d81..a52e3654ae 100644 --- a/targets/RT/USER/UE_transport_IQ.c +++ b/targets/RT/USER/UE_transport_IQ.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/condtest.c b/targets/RT/USER/condtest.c index 7244c47992..6ff2fe4516 100644 --- a/targets/RT/USER/condtest.c +++ b/targets/RT/USER/condtest.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/eNB_transport_IQ.c b/targets/RT/USER/eNB_transport_IQ.c index eaad2ebb24..07533ff59c 100644 --- a/targets/RT/USER/eNB_transport_IQ.c +++ b/targets/RT/USER/eNB_transport_IQ.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/emos-raw.c b/targets/RT/USER/emos-raw.c index 9e6861f1e6..b436e84502 100644 --- a/targets/RT/USER/emos-raw.c +++ b/targets/RT/USER/emos-raw.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 2faa4e796d..b96a7ae529 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 7c82b7976c..31701d877f 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/msg_many.h b/targets/RT/USER/msg_many.h index f9d7e6a8d5..82e5eb1371 100644 --- a/targets/RT/USER/msg_many.h +++ b/targets/RT/USER/msg_many.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rrh.c b/targets/RT/USER/rrh.c index ff4776754b..6da21190e5 100644 --- a/targets/RT/USER/rrh.c +++ b/targets/RT/USER/rrh.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rrh_gw.c b/targets/RT/USER/rrh_gw.c index 2ff213b147..39b726ae07 100644 --- a/targets/RT/USER/rrh_gw.c +++ b/targets/RT/USER/rrh_gw.c @@ -22,7 +22,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rrh_gw.h b/targets/RT/USER/rrh_gw.h index 37852c3b11..69546dbe07 100644 --- a/targets/RT/USER/rrh_gw.h +++ b/targets/RT/USER/rrh_gw.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rrh_gw_externs.h b/targets/RT/USER/rrh_gw_externs.h index 47cb50605b..8d2d1d7e5e 100644 --- a/targets/RT/USER/rrh_gw_externs.h +++ b/targets/RT/USER/rrh_gw_externs.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rt_wrapper.c b/targets/RT/USER/rt_wrapper.c index 62329d0f1b..0242dab3d8 100644 --- a/targets/RT/USER/rt_wrapper.c +++ b/targets/RT/USER/rt_wrapper.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/rt_wrapper.h b/targets/RT/USER/rt_wrapper.h index abe6e79a91..88a3d96efa 100644 --- a/targets/RT/USER/rt_wrapper.h +++ b/targets/RT/USER/rt_wrapper.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. diff --git a/targets/RT/USER/sched_dlsch.c b/targets/RT/USER/sched_dlsch.c index c13be0b7d4..d582e79310 100644 --- a/targets/RT/USER/sched_dlsch.c +++ b/targets/RT/USER/sched_dlsch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/sched_rx_pdsch.c b/targets/RT/USER/sched_rx_pdsch.c index a32c4f2e59..be1ffbd752 100644 --- a/targets/RT/USER/sched_rx_pdsch.c +++ b/targets/RT/USER/sched_rx_pdsch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/sched_ulsch.c b/targets/RT/USER/sched_ulsch.c index 2a698928ff..3ab0c312f5 100644 --- a/targets/RT/USER/sched_ulsch.c +++ b/targets/RT/USER/sched_ulsch.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/sleeptest.c b/targets/RT/USER/sleeptest.c index 694f9ddb4f..369f335307 100644 --- a/targets/RT/USER/sleeptest.c +++ b/targets/RT/USER/sleeptest.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/RT/USER/synctest.c b/targets/RT/USER/synctest.c index a4390640be..e365ad6728 100644 --- a/targets/RT/USER/synctest.c +++ b/targets/RT/USER/synctest.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash b/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash index 3821d656c9..dc6f1aef25 100755 --- a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash +++ b/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. # diff --git a/targets/SIMU/PROC/Process.c b/targets/SIMU/PROC/Process.c index a2c6260848..28d4970cc0 100644 --- a/targets/SIMU/PROC/Process.c +++ b/targets/SIMU/PROC/Process.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/PROC/Process.h b/targets/SIMU/PROC/Process.h index 1f8eb4358b..4bf6c7a739 100644 --- a/targets/SIMU/PROC/Process.h +++ b/targets/SIMU/PROC/Process.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/PROC/Tsync.h b/targets/SIMU/PROC/Tsync.h index e87b4cc6fc..6488759440 100644 --- a/targets/SIMU/PROC/Tsync.h +++ b/targets/SIMU/PROC/Tsync.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/PROC/channel_sim_proc.c b/targets/SIMU/PROC/channel_sim_proc.c index 2af7513781..334d3f5549 100644 --- a/targets/SIMU/PROC/channel_sim_proc.c +++ b/targets/SIMU/PROC/channel_sim_proc.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/PROC/channel_sim_proc.h b/targets/SIMU/PROC/channel_sim_proc.h index 3d1ac4e8b0..49e732de98 100644 --- a/targets/SIMU/PROC/channel_sim_proc.h +++ b/targets/SIMU/PROC/channel_sim_proc.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/PROC/interface.h b/targets/SIMU/PROC/interface.h index e24e97066a..0688226ca6 100644 --- a/targets/SIMU/PROC/interface.h +++ b/targets/SIMU/PROC/interface.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c index 69f41841a2..aeddfaddbe 100644 --- a/targets/SIMU/USER/channel_sim.c +++ b/targets/SIMU/USER/channel_sim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/cor_SF_sim.c b/targets/SIMU/USER/cor_SF_sim.c index 339a00ff69..73a6f023cc 100644 --- a/targets/SIMU/USER/cor_SF_sim.c +++ b/targets/SIMU/USER/cor_SF_sim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/cor_SF_sim.h b/targets/SIMU/USER/cor_SF_sim.h index 2afd3e664f..193eef90f1 100644 --- a/targets/SIMU/USER/cor_SF_sim.h +++ b/targets/SIMU/USER/cor_SF_sim.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/event_handler.c b/targets/SIMU/USER/event_handler.c index 956f345550..4072c6bfe7 100644 --- a/targets/SIMU/USER/event_handler.c +++ b/targets/SIMU/USER/event_handler.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/event_handler.h b/targets/SIMU/USER/event_handler.h index 46136de751..748d4efc2c 100644 --- a/targets/SIMU/USER/event_handler.h +++ b/targets/SIMU/USER/event_handler.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 33c70ed4c8..d798b0968a 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/init_lte.h b/targets/SIMU/USER/init_lte.h index 83e58bc734..b00f1f8a3c 100644 --- a/targets/SIMU/USER/init_lte.h +++ b/targets/SIMU/USER/init_lte.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index cd87d30495..c1d4d64ef6 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim.h b/targets/SIMU/USER/oaisim.h index 15eaebda26..216acaa653 100644 --- a/targets/SIMU/USER/oaisim.h +++ b/targets/SIMU/USER/oaisim.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c index 92d14797fa..51a5a03eac 100644 --- a/targets/SIMU/USER/oaisim_config.c +++ b/targets/SIMU/USER/oaisim_config.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim_config.h b/targets/SIMU/USER/oaisim_config.h index 7d580bd237..a50a8d2426 100644 --- a/targets/SIMU/USER/oaisim_config.h +++ b/targets/SIMU/USER/oaisim_config.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 54d7aca589..ebdb3c00d3 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim_functions.h b/targets/SIMU/USER/oaisim_functions.h index 693272b688..346e95eaf8 100644 --- a/targets/SIMU/USER/oaisim_functions.h +++ b/targets/SIMU/USER/oaisim_functions.h @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/oaisim_pad.c b/targets/SIMU/USER/oaisim_pad.c index 1ab933b688..b54709b925 100644 --- a/targets/SIMU/USER/oaisim_pad.c +++ b/targets/SIMU/USER/oaisim_pad.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/SIMU/USER/sinr_sim.c b/targets/SIMU/USER/sinr_sim.c index ba57ec3344..8bdc4a5057 100644 --- a/targets/SIMU/USER/sinr_sim.c +++ b/targets/SIMU/USER/sinr_sim.c @@ -21,7 +21,7 @@ Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr + OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/case01.py b/targets/TEST/OAI/case01.py index 4a9594fdca..f2211bf6ac 100644 --- a/targets/TEST/OAI/case01.py +++ b/targets/TEST/OAI/case01.py @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/case02.py b/targets/TEST/OAI/case02.py index d3d9577c4e..e3a4849901 100644 --- a/targets/TEST/OAI/case02.py +++ b/targets/TEST/OAI/case02.py @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/case03.py b/targets/TEST/OAI/case03.py index e75b96a03f..ece67bcba0 100644 --- a/targets/TEST/OAI/case03.py +++ b/targets/TEST/OAI/case03.py @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/case04.py b/targets/TEST/OAI/case04.py index 8b17265970..857190313d 100644 --- a/targets/TEST/OAI/case04.py +++ b/targets/TEST/OAI/case04.py @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/case05.py b/targets/TEST/OAI/case05.py index 0d3fe0229f..c73ae969eb 100644 --- a/targets/TEST/OAI/case05.py +++ b/targets/TEST/OAI/case05.py @@ -22,7 +22,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/TEST/OAI/test01.py b/targets/TEST/OAI/test01.py index f1c048fdcf..c382dd5c71 100644 --- a/targets/TEST/OAI/test01.py +++ b/targets/TEST/OAI/test01.py @@ -23,7 +23,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE diff --git a/targets/build_helper.bash b/targets/build_helper.bash index c51a99bac8..2d30029eb4 100755 --- a/targets/build_helper.bash +++ b/targets/build_helper.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/build_oai.bash b/targets/build_oai.bash index c6c7edd56a..58e1659d56 100755 --- a/targets/build_oai.bash +++ b/targets/build_oai.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # diff --git a/targets/perf_oai.bash b/targets/perf_oai.bash index 57139cdb01..c01ca35a8a 100755 --- a/targets/perf_oai.bash +++ b/targets/perf_oai.bash @@ -21,7 +21,7 @@ # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE #

S 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�^x>c$TIMYe*3|FpVKii`FRK@2ouwuUEJki&vWQxR_>nxIA14)%X`tW>f59I}s?7Yh|Cfa1VHX}hsK35nP7PFGotWW(piN=eA z=2qOM<)s${{#1Qvc~!1!*nap;xIU~-b?!|g$CjvdR>62iT_FD_lgYTl%u>}kTk~Xw zRm{0Dm&yHbft^DPZ`|J=YyHjb zpBd!*O50kywR^5yITx_3Yy|W3U2&@1%6W6QaO^mMCsUQQZ0#%$Q?k_Q8-y`b(&E4v z28p#h8qcX&eC1qk=9%vOJrA-WaJ0`?7gqGW>guvuP^~$2eW8-bQsPe7T5b7GaUIuQ zPO!YUpak1i?|=C(I7b}rG#j%d-b$<#9AP{2eYp%3Y~FxLV0atCM_wAH2fQME7jz|R z$*u*`F^JuSV^C%HgHyR<1EsQxAK;)HY%fIgq?-FC0vb7!NdQ;V;e+}M8u*#1!$DDk0-bLKt(b}OPtw1VL2>8|FVrz)tYOyKE0 zc#51S`16z#^^_PqRRK@W4$Uu~Vx-9iyy74N`5Mvk`0W0W{Zm>j>bKcosgj`&=uH+X zxImvjQ3O970zZw7A`!G7%Nn~NpR4lX*e!$OqcLTW>0Eo*pY-)|;HM~K>p@8C=1d@U z{zV2jfKYCL0k%v8evoNPz^y;OeaHY>h6;d+PRHZ3*^K$;X$$Hp3dj184uvBBPP^X7 zfzDqK78zXJR<&%2kSrfxsr9J7b??sTNEpGUcb@~h1A~4Vt^t)K9%me5#;!-!J^c1_LGvxxv#`|8ZpjX_UJ$!zVigr z=x&;p6hrvX;_iU(aMQ^CanBBSswWXg&4f=o@+g&&(@Rn@-P4WO$TClRg=Il*A09j_ z(Dbl1%ZtUi6yeQeZJs0|Fj9x186qK6=<1L_w-T+fv$|PuMg@b;5zHNiGXAzqQ*=Sw zY|5=k&M@kLCREU+TgH59k{c+^h1ps!z}Dcwbt*ewUAs?0)jqQcNGU?e&kLEoH_A}D zY1hrQk6g<;N7?E1?z@PsT0f-HPK2|hQ`G9H@yNbw1TJy*EBVuMp;^<>sHHMEe9i!+ zpU#6Koy_V?WId^~9#QQSbq6WZHSV!Qbxgw9BYslw=+wnjBiTQRHa7ZaNc691aw*5I zxmFsJ%Rc{%$WF0rzfezcH5Hd(>z+Sodixr9aIb6Vu+VI!SPj0}LvsSgony5A(_0o{ zrPbY3?;o?m9}0MTbPYtkKetTl8UXiS756-I`Q`G5yb5gsta{!)N%niJtd0uw=e5&N z%u%?55xWwt3f33qD!Ph3s*5|?r#gk16_9+}CERDxw^=1FMRVyBq_5VL~(>?F~=S{L< zOv%4GZ0|T6g<&$`|M{@SLP1g2O z3WnOY^-`kgsGkk<+1dkJcmAILYQ$DDpWQ9Mogba^67uy4ppnJl0LomZ?;^4-uK&@n z%i4Hypb|!!M8HRXA9FApII0p`KJ09c5>sC|K7li|b)FnxlOtrz4(E4zQD(0z(3U&# z5R}p=j^84i4gtaVxNtnfX>^)UN?t9PyT1E=sHlC@#~%^{#gU6(k6r@Fxu;=?Z300; zICYjkagZ0Wgd_Gz4>8jlvhm(b5(8i5F*P6V^$Ym7@f~ZbVdx14I6@+(TFC>nfp;a_ z#{kUEYL~fp)gKj(vte9^Ww1n?@-7N9@u#@Q@g|U1={c+rYZTjRQR$ zfn0i>)PPX}1SNg~_Leb({YaB9<^>`BRlf<&!@P^g!|`>FUwc}Tsv#)18OjRvpFUBX z7IVnt)k{MSs@6it4Zsbb>P2+`7o-sFkF)JzVutB2`6de>9kE)+uiWA%iyD`95f>1c z*kXGf9IT8NQB7SEa`>C57Pu5S;Z8t48>o8YHkCdCMkMADKkg^MX5)m^2Ca>kH9MS> zBKBt2!bj*`*mF?9iLsFT;5-vCthp69Qao^B@BEkxa-)H#fhtH$l)e=q4lCwB`7Tjy zdICma+IArrg@|QPhZpby>`MWC@#F(xlTk5J3^*{&{l@7NrjWlk+);qL4sR#N&KfRyw zJmJG9?{QBY%_?0Adlv}% zbbcH}9T(T{AL@ll5xtcL(@hPObJSgp`hoyP&eS9R*<%K<#{U>QQSS6GA9rxVECyai zQ{DZOpi3LyCqP`U@2u8FWri3H>!&ORb7as)iUfu8)<@n3Jy7i0f&ZMU2)aS?#}4WS zlAzDmqe3OVl*1X3@Fqm97ly#zB@LXe1s6bX#7g^3KHL#W=WCb3!2l-mKQWQ13UOa- z{glGIK#k)7nZ21817=L0NK~cSy=+)7XO`(Z;AUlq(}2Ey112^}k=M$dO9|kB8a$jA z10&w&9XX(b6G6pLHf59!<_e6TpL|wPtL@%1g0Y0JuuN=Q$QovFd%-!SsY2Lg!$Hu>joKiQhw zzB@nQ%s)hzxMa6Rp+4gK?sN!noG=h>_pa~@EnKR^ zfvxwcLe@Jx*7`F{HGepjPcB{;4d~J@j#Y^jRotOB?vFi7k&;;IN5bv5WUkPrH$8N2 z-r|ZaiV;4Oly_Fz^y)ooS3O($X?~74327&!cive`ag^|MHc_Ummyk>)IHf!!nZ)(> zGH>+V)k3hmue~KNvr>_@7<(GEv0#L`s@hW@G0+^bXi@%balJCgx&5pps@&y$=csmS zUoG)LRQQj+`Q){?Y?ifwA<~LXMK2wvXpZXNw(PklcP!h+WVau;&3LCJdG()O!geoDlehxHMjgVic70vtf%Rg zNTZ5jf$xRGHQTnX50IV<|+H; zNa%jkwavD(gNfr44B%y7pRKjSXwIDCjj-#%nB2 z*DGvAMiaJ`!yksV3$#|*Yz#P(%jmTnejOZ35oejKj<+F}ZPO3V#o?PLAf$M$`*W4& zeaPNKZ-{ZMEGI?x)do?MGlGe)1V!Dyjoa^X&!yhXeShpC4)1Tx)s^ri4R3D!4SQ$K zZSQs!2i*{34TF2#M1{hFgQ;pWE!lp?wd=>VCn`E*!3}t6TjIVssy)UZ5&5H-Vjcl> zPg>FPSD(Bt&LZU-9%4Kx;3rl|xRE}I)V7eCd1|AP?3{ef z|DH?N8RGZ!NL0sDk1U$STU~EH8ib1bpcQ|6)8$R+DSa&ZRf-|vm7KTt4*B~)>fN_d zn0z@Vv6#^ZqT3|DnibA#w?4kLPCE{m=Q+w2zY3M5Qkq)rd>G{QpbHw`p(0#`x5;St zp3P7P>!}_76&`}%sq`OPC)Wx1U~dlL&q7EfOu!3u5oz?NV-i*4>chVrgp}(Rhowvd zwS6fz#ua^gWRGXQohMLw;rPCC3{FFTf+jefBSUhW;~(RkNsi7)*?uN=dIJCTk><(E z;$a1a-Xhj@!t9Y z8D2G7e=e*;@|5?(wJ)7AxE@-ZN>p^jIUG<%;+#}F=9afbqIJ*83Bv8KHLxb1U&D3t zUsbpQ8y4v~mLY|c&5fKuc1s;+u*(7j`TEV>D<}s7uV>fj6hntQoA|Tb_Do&rOW15vLHNd=#fc^Kqx0=h zfek4GE#2 zosDIw9^Of6T)EX{eswnygoF3{(~Ib1BY4I`eEPyi;B%a?iX88$Nb#J87}-Na=f&W7 zMCYN!{8ndSOLf&~QK*;{ioVmc4o!wPpXF$P?jbFGZ^xm- z_AGpE>o0shPnhzhKB^!(aweQLd`H^o{V5k4q1KNvm1B&PunRvB$@=Q5gLbBX2#zi~ zazj#(NC;z~%@8}ZY)0JN42Nu3V|DbO z@vvWPHiyxT83972Iu%#PTCZO3{2lu04os9fp+Q2a{>mI0?6%PaJ;m)N(WV4MbRu!j z$HwZ4aZ>L=%Q=no!! zA*T}U5ae?+Ub@=T@O1Gi0psf-#cQo}QqnjI4-hm06&9wJ`zB}A0Y`~m^E%AiW*XWQ49rLQI++pY=fs^|18rQWn!=7P7Z zR((ZUoRd!O*6s1FrydU!eGb?qljgm5z2t7m?Gma;tf%{r6B}VJUmky9{PJ8H;~qiD z^%A0zTanj0G3+qc(AKW4U2VX9D!fSb#TYHq#2KyjYMfIz7Ks{mnJrC2oo%-N_h?gFgX{J44fM>N8Om!02n_c-72$CwT`(%>`;k~J zrq7@6#tYtkyhdHTX7S;-O|a#M&ulhM$+pUe82MAW+Co(gaTE?8PH+exn;O?-JT|b$ znO2?CArH~Vm@BK(_4O?LBCRZ_b`8s5yhWM?%b@(l-T7%%w^#2iZqbfn1UvUgCz3Eb za19JfCpKd`qg$AMs3T>TOo0_vsJo@AnN7Sco_12}Wevp|vw!>R{sUn-UDky7b+5TG z9}UQaz@vLknvZXceB&y;{bB;v-YTqqHwBN=5#Qth4`-tY@2evdUY-WNZ{e>|e3hzJ zdV{hM?xz6q!zs8u~pqz9xUe}g=<(IejR%#dsE1t0V+hofXR%o!rnpJ9K zXuIjKdC#-JekXD)XU|445O`T?1=zeDUaQvJcvu*>Xng;bnaecZXgmjgC=O{farN~2 zfZ7vMeX`)<{uM>T^tODQA#z+PM&ec~QquQQ1`zR)knwwW`WJ-6>kW(sYtd`SI{z2A^>VWxppHp^>x$NtJ;s);YY1ZxkGy&GJd(3l){PgOPtxi=NLfGXZF5dC zY{c9(nHpIzgWEfkV^(HQC+mDZ@SToSz9vE9R3_rJKKARCpK(`HrERf~2=qsj*@IXc z*AJi-lgdj!>{*!LVx;Ehq0|&3PIKEEc&iL86AHm)usSAc?woY$W7gl~JIeZfC#(p( zs!Thk(e_cSxC4huNu9>mPu+DKz7T13$_PH#&tC3nzJB85M*y{wa3CJ<3o<0N-aB(2 zsvk@q9eXx9)Y($DQx@PTwcBX0_Kqszc0ZN2d-X4F3r`dBTBY!Y1%i1Sq@sM6tJ5G? z*%MenNl4=bRL#`%k zEJ2RdXI{5#mFJ ztX%VEBGg_B!ah}KSmO65>X0n=2-G!u1|KH0&KG#ro^udv`Kv}qeySh=cz@-x!AO2x(d5EL=1ea=X%w%pHu3O{$3%6?k(XZM-8y5Gt zBThF3$y@x)wYu9xl3CA=SX+E+`+!{jNg`gM{2;jW&NV_*W7plt_o;_-x*et*N?tS^0b#bwb? zzcgNrTQrerJdIG5lsx`me^bMnHFD*;h5(Mwn8Wcdg~p_G{=oiA#yD2Ayts^o{F9fA z8ZvbDVQy-*y~swss}7;x!(hT)oI)NmeXpZ2^@|G|_&qIE^`>r_jTNy}H`RF9tCBOo zT7IvjTVqNpu!vN(F0wSz+$U4Mqu=d5nbs?rXgpn!1`SECdh$ZX-9#tHwjsvaD|5pb zQDEET>s5N5S`C4)X-?ggvXA2$7}LJRsZb-T{Z(u;PT`o;)p?M|0zKVQ5mULsB)m>` zKdOBMSaVqM#15=IERUG5i|^hgj3X8#O41sA(v=_SuH_M1XX7|zH@cA@QQ)HG-BiF@ z_*%9&Ukx|!R&QjLr1Ti8((km2l{r1n+^Bu)(XLOpUpL5)(?e&GCf_q_72o)(pA1YN zdTqp7NTr2p=+W3WM@Op{6l@+aW!~N;^|UEjxu#*1tPL}tJyNo_{#1QMHa!7P@W)A$ zhF|(R)>tR&3R`O2bN(%Zwl) zg!ie({7k(&s&q9oO}p#5)u5x}Wzu?CYfrw1rr3?P;jFKRCYLdlL5e5qe7pqK749`n zsBF+kxzg(vz2}N4j<$9G7SYA^4bmMlKjg%;-cgua*{ffTossTZO?h>RnNb&0#F{Qg z^>kx9u=WkL|E7+APjsppb>PD8*ZJ@AR7|rQ{+J!NB}{R|)W{o^S1iRn7|o6<^H!IL z-?};vh3N_Sc4X0DR}syp1tnx0i0p?Aod2|nkfnLeZ&VV(>M`@3V5PEo=PGa%?+To> zWn1@3!kLvDoEyU>uu9oS{F_{9<=xEMV-0qe`~$Zg3Yfk1kTG5rB@$ zQmNV3+m7Ac_cD4Qy1gaLV>=dWKJt2>AX7wrk$7XR)@v=vaxCu01heUAs(}e~(_U#T zj->$-bA_fBA&!OT&ZdNAKu*CS7WHni;C0(gDyBuxR9!OPB|8r!-@MnR5C1!wL5@KN zr$q$5t(la+?)21J_8T5)8pq=oT-x~n zd1HqCCiFf$_O^s?EFu%D>2A5W^YGYoiERNb&upoi_{4C9dGT|-lla08oqp3%pY$+l z`wrnsWBIJ%a*frlK`%j{>8xRA%~elz>>ih)-*zXGy$4$XhgBX;?J9F0@3$OA^V{z_ z^)lX4=2|cr`Vf<{E}~3Uj+2a|7vSFh7DvdneKxcrbh5{+u7&N3DL&;ZJtj&+s}JG@ zHhYgVvg2d|u{mK0UZ3h;OByy6v^m?P1Vm4S|88JJ}=|rZ4-x$uFEw&8=wwy;|3#XHcz2r#XUso}%6Yh#b zV=FO>5V*_V;UZBie8k@d&vQaOLSK<>Wu^KkDIWGs`W-JLs%!`c4@qoJDhzU~cMkO1 zVoK{?#O^IXzA>MQ4g0d|&T0+z*cHjJo4X20DzAn$SKXE2=)vc9qaXPp-SzYovs-M3 z#z#t%Az;DSbA5QAy`BHH_7SnRKt)BN%?#V^+4m>n21}4S?WJ<5Um~i0 z(GR`6HfNH0SPR~oOf+y2wb1HCKBic#h@iaJ`lc{wCuN3qn5b{t?I(YadX!a_-1Cgr zm@G2$%AGf#7GE!ePO8{_XkWARmC>J!h1z%<4LpC`)j#`Co3UV&AEuw+&J`x+D^-w{ zXM|Od9&PVHp?&Z~>9$Hs<1%v;R@)ouFt_Wuv1GeAjd$+K?0je6eYSBek4-~4iZO%3 zQDGVD)zl|r#T>KMo@GW=_P7HMYXwgG6uL*W499c@!AUjz8g%2d#~63(vcsa0r)g-m zsc$D@s5VAACEe_^68qNW>$?d0Ot&7><`tId>pyHxW2nJ)8)%N?Wyz3}#JO_zVpC)@ z+1ksTHSzw>!R;_B{3w<3Jh>*fD^iK+y;40={je^sr}q5!8C=LeC!Ky+`0+07dWOLb zcUAhl|)a2c#z-T6!&)6y}><1-7y61w=)w#uMCCF|}8IANyrXc+F@acWTYzPF~$oloj~> z)ath`GHs1Egq3UJ!;ZOSixQd%dWRae(d%VZGG;dm*UBFQ8B+;nwp$ff0^%{p$ydWl z%e!rxA=4u7pSDl=t$rQ8LGcPci-!^Hnm+AS;vO&9?(s&90K-&$>0Z`Cdh#`1j_k?g z`7`1VdAJbCf~K}2_NVckxB)mk1a`ENOBHl9O&z6-O$(bcpD|P1x^k1b6JvrhvWNs^ z8W-$p-=)U*x9>mtdLaB*rGA;wE<>MH`+pI3PC>SFZM$yUwryLhZQHhO+qSXVwrz8@ zZQJ}8lM*Zz_6SyMlz4|7@0OWlYJ#3 zyFQea55ZK6nqVL4z*+J0V6|YEfnBXzJ19i);^?DwYoc80ZkqV^9C>cI>{uv!Tbxyp z$}w;)6F8e?N*_00A*0^H3 zGpCXO?h?k0k~<0qtG~|2d>=5K!PN^{uJh>65(i8r4|Dn2<&PXZ+H9@TR9n~C?$UO( zJtQi2X>^t;GwQEN&gB9v5#dO(o0Q8W1Jj1c@#j5FHuAYFXgpo66a$1%xpnyGd&fOP zj+NW#t)QA*@?=tuyFOB6Peq4zcdHm@iY&Td6O`(Fu}X`u-Zb*WxuB;)0k_3N&;U z73`k3Z1>cbD;p`xyk|*AkZg8Aax4?J{3k)Z7$V*UbJ*})>a_Zz^<928(DVWF$^tGlCv zHB`uz1FB}=N9XxX1)Y-ENdtOGB6F?d%lA~p~&dQ}{a z?iHcg&EiQNEL+sxwP0^F)DgYakeAg{4DvV7lU7;@C0Huk^)|CnMGrpw>yIrI8is-| zSt9Wo9B7pi60)mh1)c{n3!;;-dU7iQZAIwSFz=i|c&5o$la8)A#!Z=}%BTf!= znbI$wQEsoeqRS?*HpD0PAYTYo+wXJ~GhOK{#Z@zO1Qs2w7A7u7i9KC88}RV-?jTs} z0wov}q?YO7;S=Xo)AUH08!=6srwPcNUJI2YM>p4Th_-gX+<8si-pRg+my-#kGTHZ< zBN#d$*sO5MMPTBvp8hzN(U0Zu^I<@3wJ#w7_kaGfj(jKx>*#=JqD{B^y--y$Y$IU+ zx#P`G0D_&LMQI4{TP~qs$S7lf(dn8TIjI(rSLuH;&RheVLNCe4*fb;F1&3F$7p6VK z%lcXTg!{Gn9X0FY_1a(B2Lxg<&C*!s1eP+;$-*fpG&Z+4F=h!-9Oe5%{rTsj`3E<> zUzS=t2=lToa3=s0XPDaN661}ZSrvi(b-=nMd!oPU0SB=x;KEA6t=nPBx1sR3#yhZD z^B&S@x6UriXY$w#;$fkUn(K1IbfnK^t+j;!?i$wwe%5$Fe{Sh^AvawZr4}87CP1e5 z6u5$KVu$+l&!zKZr+TX6HeR#|7N<6wtmo=VaJYm-3;jiifH;lx(&F1m4XjME6vVx(AL2VD zDRc+vNN$J=PH`%HnvUK{v)=^3a%tB>ITk_V=D{-O%*%|EWs_tBE23jqB#5R(*NHsn zxrADeenOEMy!<4fwJ0cMhKY8;5MclXYG`J<$SnJ#Gdu zOvw<@EO82xbDkc8EJ`{zH{VCuG^3wevbK(N$-fMh5Vd4{*1&pbNoO`{U1(m!d!PgA zyCL|);(`D?f(QY$ZB}T4>w*K9vG)wFU|$$cT1~??!@Ox5@#lGgDX!B!=X;xWSQGhja%QiT~hLwT1`<@2PgT z?CJ=2ClmlYjX*^E33qb}5V#8v@BxAmn$chOFG#N5*v0SC5DJk#KOycM=)-C46P=Ir zlg$?_^R_ps+ih~Ec4h#3=dT9JyTewc8gYL!72qcjWiQ34o8s~^z*>=>eW{ODH|9Kz z@S=n@!fz2+b+(hM`^nJPeRrtWjFo?J?6yC~b}ij;3+Zj?a(1QxNemTkb#IhPZr0^yTwerpbIhS)!Kcl+ z1XDg)kg8z*GyfwPIp71wlkuV&NhHrNiO9T0>)S+xH$A0wkaU_;C+@Jx?HNNP+bhpV zFH9(-05JRe04CUBExm7p|70HGIcVG}A`*#77^$ug;lbn31ceMXO9OsM) zOA^_~wMw0}YwH(25_7$DSc0jjkg4lAfIp{;p%Vc{d2ChO<36L~1?4XQH$fF}VmK$}FkO+hg_FXra;0+u z4L_R+`h&RK6bY%NIp^QT>Qr)e*$30Qp3r-M7^>>nBaXZ|IFsiiS!K-_Iar&MN=H#3 z5hw7F1QIcG%LfCU*F6%HsNKgtX=_|2Ypz>m}X30JgDInWKPMlNZoRGq8Ewro%*B73VznvX$>y6zR zt&6uu>rXq1);(C=4CKw6%$(HjrLoL^z2a?3eRirhVu45yV4E|yHYtRQ)NMpoP~aJi zyX|`2i9M9wp4@J!-ZQ^`yv?3N+GyyoyAGzUHbvftq!G;T-A3I&)`ePRJz=2qc?r1f zs#bF_@L4XUssmDIklwzo6cd*H5Tm>@M|wyLlYE1)KhabPAp40<4CN_&5~GkHOp$~n zSh@=jKOkx@2_X?4LG-Ocf?D$LCEfl3Vn0MAgAl{QS3i&z0DMvSLqdo_f+(F%Cs0Pv za^Uq4T;IQjHsmR-wuC^Go=A74@7};CywWn}F9?%di<@vi7AJx4C^qJ!YgZ{8zk$|HZUM#_)pKY9((ozEG9pY~_TskR&)GGH)0_WBz-v{C#RUSjteb~Z? z5@_(kPQbFx{4u}(GTjUKjwI?JRhVR7bKx0D%6&ajC0eL*mP)NDA`YMUXUgJ?1P^*4HSAMLdwVpT(hwZAr8)y+J4J$cU{5{f=^LBtWK zv}CS7Ei2D5Fn`VDsgr& zZqhAqfkZ=TMts`Y+Wk*D_d^?5&G$}T#`plBbh8KtBuo+4l=EW&T z7N$WL^SRc_{F!%3QT+J#ckc9VjZe`WVxY(SE#rY}+K~`t zgaN0k5|{p1t1BSkXF<&cJH_y9i2_5Y#BgkuoLBHtT`w*ANL;WQI8hjDt>Ig4xNW%+% z)pU!fG_54}7O-CBcyN2tkyqhn#nTX%QEd$^cGQf10s}4PNOPEKgJ{LnC~rnDL?hGY z&LWBb-x z_kx1E-X<@M1H9+&+i?C*r@tyGHHt-CmJRo|S9szScUB6sk)tQQlzXrKa&Na2_}4cA zF-t0AoxN^{;-4@(#HqjNi!iZPG-9?{sTqy??pb81i!>QcKBtE8G9@nWvZ2p2 zxZeoK7T2q>n`q+}g&%Y>f(la1PN`C;Qktygv#x59S>}w)CQ&~^Q__t)bUvlo324HH z8uFdQa7`A9qlc@MYq+WZTxYRDm8;0EA3j&vre`~A)O9v^Kad_2W*jJOyZ;bN>|ioc znXP@h&EHXHr^#)jy&^Quua@3KXC`Je*4-?)t0M1IFn+kzOoC!GesU^WS5EX;<$27L zyR{KC-dcIdRyle(@4_8BE|jmnMB_RvNHEA;s;jGq zb3%mx8BCbTq$)an#&*xP)G2UI&u5)l777?CIGFrZM&x&XE&TMuEooKJ_5dh3#%v$9 zG#^f}KPegaNuz7iWSSa1K7ws!<0)sfkU(IeyV`8 zg?dQ|(S2-oxS?h_9^e_E+;e`w47dvNZV{10)$`x!QoKoeDJ8Q$&me^?n{9|f-FZ8F zvzSVOWIvdt?Ld7n6VB}&X?STE0+h17-ufB-WUoE9p7Q+Y6k8Flj>RyXyfkM2eadN?+kFPB6XdV{o^j$ zM|-d6?`9%lai4zGx^eVk1?S$BxWb>}wUiW9CN)TII-?>xSt_f8tCAv*pW6rjo>3bd$+jCA#vsH;Im$_%YeoYAM7koEM>IBevlXi=bxF8*Kze zjR=Fk?MC|A@1mQ6Ea9s;HYydJMP4;l%Y;(vA*qYSjDgz%wZ&0O=Imd*(+eq&MxF#o z=Juv@%GIKkhJ_gJs_pF%>Mdopzx@(&bht zdrUzHW>qx2IWY}S+>fJA=uhmAtnZ%Peg2^qys$+u2B99Ilj|^ps=!=^9A<5nWo%uH z1VuRx{)nJh3fdT>6RD1vo2u7f zQ8Nx|oJpUsC*`e4F!3OgbHd}Li6G$1x?^LAKH!nVO`m-#bKq>zyWAcm-+} z&Bos=x>Sm(dUpomqD;(rEjmsZ?e|Uz-bmiM3u+X?9cUAOq`rqxvqHM+G?pC?tHp|O zG2P$Umrwm8v{53^63Y(>4z~LeO8dIc`R`HQL#+37lWxZ8^jyj+jE04Lgjx+tar0r9d<$s*A~#WaG~wXR<<6&C-B{^aY&5eaV~2Q`BUpkphii)16hAAF zmp36*M0$#L%S=$Rq&Wt>I?%=M0)cAh$3vs^$EHKG901X_2}rHh?*mo03uKAOsB79Z za=4FXKHhzeAqVTK&wpXy$0U&IHymVTYedy-v|{v>V-6KC>?q>bIo z&7P^QCps9!XDcuvO4BqZYK&f*_L!m2D2?-&W@0d2OclHQ-P@~sMBNOul`C5BCcb%Gs}X1SX`iok(w${_j%82nGEdQ8%?@pznxdt6Fku^2`}=-n zJ3t+F#mN$1Y1FgtoK3AX#wuI8JJ*YiUCMtjp$;vu?IDZ2N%)_X$xXpeb6Uh7 z#&c@ugz0$N23*7tyTrF^jV|35F;&nc*;eDSxj7oQPyDO{+MZZ zBPW#kRT^_^G&Z&y=gO`Bm$+)l2i`RqL%)>%q^}?R@ANIb?~up#FUMNMbBg z1o3D+Xg*q?wSo#Elgej#V!tQ%Cz|F?hi1=4EH~_3ca$O^6I9V^}TfmO_cJO zp!YW2PO*=m7IiNv?yHCv4J*;7f;q6(a%;wWaNa>0%kW>$Ru@uoMOF2iKsch4ypn zH3zQ4^2kM>0``GRhbeUO36I;PmiP$$8%FvJwh<{(qdh@L(;W-+ zhVsi+GpJHKvw4MADr2oOuS==tqeU0 z^lyK={A7Zu7`49#)oXUl>rz#>VOCdmQtv^p|AqWxDZ5k*1Fl1)k0AeGg91{^jYb_)|ZrM-;{ znwbBcih5IQkr17f9hXe!W_r|Kp=wO-96NF>;Sq!jT1&Zix!=0KIjZVX{8ry4VMk7y zIczpTtiAsllXoPGI6mzmVNYPOD5WL6iJz4yKA};etI(G$$0CYQsa7s zd{SR7MygC`^i1z)l`e_>rZL<~JD0HxHiMO;mycTrIXgbXIyUx;xojRS>(B+yYUtg} z->SszfXZm%I1+#@R74_^Z!C{Xg|Q6zW+fU)7{c4Fq-aXuBIB3PVe9PaxN}vxq@K8% zFxSu-?LH-Im0780mPs)eK6+GbpY_78lrd3%Vrq|@D;zXlGjN>H>bMJbuHZ)hxsLgI z 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⪙meIOXABCrRjx`HO%`g`ad7Jcppq; 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