git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6389 818b1a75-f10b-46b9-bf7c-635c3b92a50f

This commit is contained in:
Lionel Gauthier
2015-01-15 09:29:18 +00:00
parent 9a17b228fd
commit 6cc793e0cb
173 changed files with 0 additions and 103303 deletions
-1
View File
@@ -1 +0,0 @@
-674
View File
@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
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.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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 <http://www.gnu.org/licenses/>.
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:
<program> Copyright (C) <year> <name of author>
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
<http://www.gnu.org/licenses/>.
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
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-6
View File
@@ -1,6 +0,0 @@
v0.1:
- Build system
- SCTP layer v0.1
- S1AP layer v0.1
v0.2:
- Updated S1AP messages to RELEASE9 v9.8
File diff suppressed because it is too large Load Diff
@@ -1,21 +0,0 @@
if HAVE_DOXYGEN
directory = $(top_srcdir)/DOCS/Documentation
doc_DATA = $(directory)
if HAVE_PDFLATEX
doc_DATA += oaisim_mme.pdf
endif
$(directory): doxyfile.stamp
doxyfile.stamp:
$(DOXYGEN) Doxyfile
echo Timestamp > doxyfile.stamp
CLEANFILES = doxyfile.stamp
all-local: doxyfile.stamp
clean-local:
rm -f doxyfile.stamp
rm -rf $(top_srcdir)/DOCS/Documentation/html
rm -rf $(top_srcdir)/DOCS/Documentation/latex
endif
@@ -1,482 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = DOCS/DOXYGEN
DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = Doxyfile
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(docdir)"
DATA = $(doc_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
@HAVE_DOXYGEN_TRUE@directory = $(top_srcdir)/DOCS/Documentation
@HAVE_DOXYGEN_TRUE@doc_DATA = $(directory)
@HAVE_DOXYGEN_TRUE@CLEANFILES = doxyfile.stamp
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu DOCS/DOXYGEN/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu DOCS/DOXYGEN/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
@HAVE_DOXYGEN_TRUE@Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
@HAVE_DOXYGEN_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-docDATA: $(doc_DATA)
@$(NORMAL_INSTALL)
@list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
done
uninstall-docDATA:
@$(NORMAL_UNINSTALL)
@list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
@HAVE_DOXYGEN_FALSE@all-local:
all-am: Makefile $(DATA) all-local
installdirs:
for dir in "$(DESTDIR)$(docdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
@HAVE_DOXYGEN_FALSE@clean-local:
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-docDATA
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-docDATA
.MAKE: install-am install-strip
.PHONY: all all-am all-local check check-am clean clean-generic \
clean-libtool clean-local distclean distclean-generic \
distclean-libtool distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am \
install-docDATA install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-docDATA
@HAVE_DOXYGEN_TRUE@@HAVE_PDFLATEX_TRUE@ doc_DATA += oaisim_mme.pdf
@HAVE_DOXYGEN_TRUE@$(directory): doxyfile.stamp
@HAVE_DOXYGEN_TRUE@doxyfile.stamp:
@HAVE_DOXYGEN_TRUE@ $(DOXYGEN) Doxyfile
@HAVE_DOXYGEN_TRUE@ echo Timestamp > doxyfile.stamp
@HAVE_DOXYGEN_TRUE@all-local: doxyfile.stamp
@HAVE_DOXYGEN_TRUE@clean-local:
@HAVE_DOXYGEN_TRUE@ rm -f doxyfile.stamp
@HAVE_DOXYGEN_TRUE@ rm -rf $(top_srcdir)/DOCS/Documentation/html
@HAVE_DOXYGEN_TRUE@ rm -rf $(top_srcdir)/DOCS/Documentation/latex
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
-1
View File
@@ -1 +0,0 @@
SUBDIRS = DOXYGEN
-622
View File
@@ -1,622 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = DOCS
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = DOXYGEN
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu DOCS/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu DOCS/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
cscopelist-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
cscopelist-recursive ctags-recursive install-am install-strip \
tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
cscopelist cscopelist-recursive ctags ctags-recursive \
distclean distclean-generic distclean-libtool distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
-28
View File
@@ -1,28 +0,0 @@
AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_srcdir)/GTPV1-U/nw-gtpv1u/include \
-I$(top_srcdir)/GTPV1-U/nw-gtpv1u/shared \
-I$(top_srcdir)/UTILS \
-I$(top_srcdir)/UTILS/TIMER
noinst_LTLIBRARIES = libgtpv1u.la
libgtpv1u_la_LDFLAGS = -all-static
libgtpv1u_la_SOURCES = \
gtpv1_u_task.c gtpv1_u.h \
nw-gtpv1u/shared/NwTypes.h \
nw-gtpv1u/shared/NwUtils.h \
nw-gtpv1u/shared/NwGtpv1uError.h \
nw-gtpv1u/shared/NwLog.h \
nw-gtpv1u/shared/NwGtpv1uIe.h \
nw-gtpv1u/shared/NwGtpv1uMsg.h \
nw-gtpv1u/shared/NwGtpv1u.h \
nw-gtpv1u/include/NwGtpv1uPrivate.h \
nw-gtpv1u/include/NwGtpv1uLog.h \
nw-gtpv1u/include/NwGtpv1uTrxn.h \
nw-gtpv1u/include/NwGtpv1uTunnelEndPoint.h \
nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c \
nw-gtpv1u/src/NwGtpv1uTrxn.c \
nw-gtpv1u/src/NwGtpv1uMsg.c \
nw-gtpv1u/src/NwGtpv1u.c
-607
View File
@@ -1,607 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = GTPV1-U
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libgtpv1u_la_LIBADD =
am_libgtpv1u_la_OBJECTS = gtpv1_u_task.lo NwGtpv1uTunnelEndPoint.lo \
NwGtpv1uTrxn.lo NwGtpv1uMsg.lo NwGtpv1u.lo
libgtpv1u_la_OBJECTS = $(am_libgtpv1u_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libgtpv1u_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libgtpv1u_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libgtpv1u_la_SOURCES)
DIST_SOURCES = $(libgtpv1u_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_srcdir)/GTPV1-U/nw-gtpv1u/include \
-I$(top_srcdir)/GTPV1-U/nw-gtpv1u/shared \
-I$(top_srcdir)/UTILS \
-I$(top_srcdir)/UTILS/TIMER
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_LTLIBRARIES = libgtpv1u.la
libgtpv1u_la_LDFLAGS = -all-static
libgtpv1u_la_SOURCES = \
gtpv1_u_task.c gtpv1_u.h \
nw-gtpv1u/shared/NwTypes.h \
nw-gtpv1u/shared/NwUtils.h \
nw-gtpv1u/shared/NwGtpv1uError.h \
nw-gtpv1u/shared/NwLog.h \
nw-gtpv1u/shared/NwGtpv1uIe.h \
nw-gtpv1u/shared/NwGtpv1uMsg.h \
nw-gtpv1u/shared/NwGtpv1u.h \
nw-gtpv1u/include/NwGtpv1uPrivate.h \
nw-gtpv1u/include/NwGtpv1uLog.h \
nw-gtpv1u/include/NwGtpv1uTrxn.h \
nw-gtpv1u/include/NwGtpv1uTunnelEndPoint.h \
nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c \
nw-gtpv1u/src/NwGtpv1uTrxn.c \
nw-gtpv1u/src/NwGtpv1uMsg.c \
nw-gtpv1u/src/NwGtpv1u.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu GTPV1-U/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu GTPV1-U/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libgtpv1u.la: $(libgtpv1u_la_OBJECTS) $(libgtpv1u_la_DEPENDENCIES) $(EXTRA_libgtpv1u_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgtpv1u_la_LINK) $(libgtpv1u_la_OBJECTS) $(libgtpv1u_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwGtpv1u.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwGtpv1uMsg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwGtpv1uTrxn.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwGtpv1uTunnelEndPoint.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtpv1_u_task.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
NwGtpv1uTunnelEndPoint.lo: nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NwGtpv1uTunnelEndPoint.lo -MD -MP -MF $(DEPDIR)/NwGtpv1uTunnelEndPoint.Tpo -c -o NwGtpv1uTunnelEndPoint.lo `test -f 'nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NwGtpv1uTunnelEndPoint.Tpo $(DEPDIR)/NwGtpv1uTunnelEndPoint.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c' object='NwGtpv1uTunnelEndPoint.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NwGtpv1uTunnelEndPoint.lo `test -f 'nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
NwGtpv1uTrxn.lo: nw-gtpv1u/src/NwGtpv1uTrxn.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NwGtpv1uTrxn.lo -MD -MP -MF $(DEPDIR)/NwGtpv1uTrxn.Tpo -c -o NwGtpv1uTrxn.lo `test -f 'nw-gtpv1u/src/NwGtpv1uTrxn.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uTrxn.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NwGtpv1uTrxn.Tpo $(DEPDIR)/NwGtpv1uTrxn.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nw-gtpv1u/src/NwGtpv1uTrxn.c' object='NwGtpv1uTrxn.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NwGtpv1uTrxn.lo `test -f 'nw-gtpv1u/src/NwGtpv1uTrxn.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uTrxn.c
NwGtpv1uMsg.lo: nw-gtpv1u/src/NwGtpv1uMsg.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NwGtpv1uMsg.lo -MD -MP -MF $(DEPDIR)/NwGtpv1uMsg.Tpo -c -o NwGtpv1uMsg.lo `test -f 'nw-gtpv1u/src/NwGtpv1uMsg.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uMsg.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NwGtpv1uMsg.Tpo $(DEPDIR)/NwGtpv1uMsg.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nw-gtpv1u/src/NwGtpv1uMsg.c' object='NwGtpv1uMsg.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NwGtpv1uMsg.lo `test -f 'nw-gtpv1u/src/NwGtpv1uMsg.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1uMsg.c
NwGtpv1u.lo: nw-gtpv1u/src/NwGtpv1u.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT NwGtpv1u.lo -MD -MP -MF $(DEPDIR)/NwGtpv1u.Tpo -c -o NwGtpv1u.lo `test -f 'nw-gtpv1u/src/NwGtpv1u.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1u.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/NwGtpv1u.Tpo $(DEPDIR)/NwGtpv1u.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nw-gtpv1u/src/NwGtpv1u.c' object='NwGtpv1u.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o NwGtpv1u.lo `test -f 'nw-gtpv1u/src/NwGtpv1u.c' || echo '$(srcdir)/'`nw-gtpv1u/src/NwGtpv1u.c
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
-36
View File
@@ -1,36 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#ifndef GTPV1_U_H_
#define GTPV1_U_H_
int gtpv1_u_init(const mme_config_t *mme_config);
#endif /* GTPV1_U_H_ */
-321
View File
@@ -1,321 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <assert.h>
#include "mme_config.h"
#include "gtpv1_u.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uMsg.h"
#include "NwLog.h"
#include "timer.h"
#include "intertask_interface.h"
#ifndef GTPU_DEBUG
# define GTPU_DEBUG(x, args...) do { fprintf(stdout, "[GTPU][D]"x, ##args); } \
while(0)
#endif
#ifndef GTPU_ERROR
# define GTPU_ERROR(x, args...) do { fprintf(stdout, "[GTPU][E]"x, ##args); } \
while(0)
#endif
static NwGtpv1uStackHandleT gtpv1u_stack = 0;
static pthread_t gtpv1u_task_thread;
static int gtpv1_u_send_init_udp(uint16_t port_number);
static int gtpv1u_create_s1u_tunnel(void);
static void* gtpv1u_thread(void *args);
NwGtpv1uRcT gtpv1_u_send_udp_msg(
NwGtpv1uUdpHandleT udpHandle,
NwU8T* dataBuf,
NwU32T dataSize,
NwU32T peerIpAddr,
NwU32T peerPort);
NwGtpv1uRcT gtpv1_u_log_request(
NwGtpv1uLogMgrHandleT hLogMgr,
NwU32T logLevel,
NwCharT* file,
NwU32T line,
NwCharT* logStr);
NwGtpv1uRcT gtpv1u_process_stack_req(
NwGtpv1uUlpHandleT hUlp,
NwGtpv1uUlpApiT *pUlpApi);
static int gtpv1_u_send_init_udp(uint16_t port_number) {
// Create and alloc new message
MessageDef *message_p;
message_p = alloc_new_message(TASK_GTPV1_U, TASK_UDP, UDP_INIT);
if (message_p == NULL) return -1;
message_p->msg.udpInit.port = port_number;
message_p->msg.udpInit.address = "0.0.0.0"; //ANY address
return send_msg_to_task(TASK_UDP, message_p);
}
NwGtpv1uRcT gtpv1_u_log_request(NwGtpv1uLogMgrHandleT hLogMgr,
NwU32T logLevel,
NwCharT* file,
NwU32T line,
NwCharT* logStr) {
GTPU_DEBUG("%s\n", logStr);
return NW_GTPV1U_OK;
}
NwGtpv1uRcT gtpv1_u_send_udp_msg(
NwGtpv1uUdpHandleT udpHandle,
NwU8T* dataBuf,
NwU32T dataSize,
NwU32T peerIpAddr,
NwU32T peerPort) {
// Create and alloc new message
MessageDef *message_p;
UdpDataReq *udpDataReq_p;
message_p = (MessageDef *)malloc(sizeof(MessageDef));
message_p->messageId = UDP_DATA_REQ;
message_p->originTaskId = TASK_GTPV1_U;
message_p->destinationTaskId = TASK_UDP;
udpDataReq_p = &message_p->msg.udpDataReq;
udpDataReq_p->peer_address = peerIpAddr;
udpDataReq_p->peer_port = peerPort;
udpDataReq_p->buffer = dataBuf;
udpDataReq_p->buffer_length = dataSize;
return send_msg_to_task(TASK_UDP, message_p);
}
/* Callback called when a gtpv1_u message arrived on UDP interface */
NwGtpv1uRcT gtpv1u_process_stack_req(
NwGtpv1uUlpHandleT hUlp,
NwGtpv1uUlpApiT *pUlpApi) {
switch(pUlpApi->apiType)
{
/* Here there are two type of messages handled:
* - T-PDU
* - END-MARKER
*/
case NW_GTPV1U_ULP_API_RECV_TPDU:
{
NwU8T dataBuf[4096];
NwU32T dataSize;
if (NW_GTPV1U_OK != nwGtpv1uMsgGetTpdu(pUlpApi->apiInfo.recvMsgInfo.hMsg, dataBuf, &dataSize)) {
GTPU_ERROR("Error while retrieving T-PDU");
}
GTPU_DEBUG("Received TPDU from gtpv1u stack %u!", pUlpApi->apiInfo.recvMsgInfo.teid);
} break;
default:
GTPU_ERROR("Received undefined UlpApi (%02x) from gtpv1u stack!\n", pUlpApi->apiType);
}
return NW_GTPV1U_OK;
}
static int gtpv1u_create_s1u_tunnel(void) {
/* Create a new nw-gtpv1-u stack req using API */
NwGtpv1uUlpApiT stack_req;
/* Local tunnel end-point identifier */
static uint32_t s1u_teid = 1;
int ret = 0;
MessageDef *message_p;
memset(&stack_req, 0, sizeof(NwGtpv1uUlpApiT));
stack_req.apiType = NW_GTPV1U_ULP_API_CREATE_TUNNEL_ENDPOINT;
stack_req.apiInfo.createTunnelEndPointInfo.teid = s1u_teid;
stack_req.apiInfo.createTunnelEndPointInfo.hUlpSession = 0;
stack_req.apiInfo.createTunnelEndPointInfo.hStackSession = 0;
if (nwGtpv1uProcessUlpReq(gtpv1u_stack, &stack_req) != NW_GTPV1U_OK) {
ret = -1;
}
message_p = alloc_new_message(TASK_GTPV1_U, TASK_SGW_LITE, SGW_S1U_ENDPOINT_CREATED);
message_p->msg.sgwS1UEndpointCreated.teid = s1u_teid;
message_p->msg.sgwS1UEndpointCreated.status = ret;
ret = send_msg_to_task(TASK_SGW_LITE, message_p);
s1u_teid++;
return ret;
}
static NwGtpv1uRcT gtpv1u_start_timer_wrapper(
NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwU32T timeoutSec,
NwU32T timeoutUsec,
NwU32T tmrType,
void* timeoutArg,
NwGtpv1uTimerHandleT* hTmr) {
NwGtpv1uRcT rc = NW_GTPV1U_OK;
long timer_id;
timer_setup(timeoutSec, timeoutUsec, TASK_GTPV1_U, TIMER_ONE_SHOT, &timer_id);
return rc;
}
static NwGtpv1uRcT gtpv1u_stop_timer_wrapper(
NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwGtpv1uTimerHandleT hTmr) {
NwGtpv1uRcT rc = NW_GTPV1U_OK;
return rc;
}
static void* gtpv1u_thread(void *args) {
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.
*/
MessageDef *received_message_p;
receive_msg(TASK_GTPV1_U, &received_message_p);
assert(received_message_p != NULL);
switch(received_message_p->messageId) {
case S1U_CREATE_TUNNEL:
{
long timer_id;
gtpv1u_create_s1u_tunnel();
} break;
case GTPV1U_DATA_REQ:
{
Gtpv1uDataReq *gtpv1u_data_req_p;
gtpv1u_data_req_p = &received_message_p->msg.gtpv1uDataReq;
nwGtpv1uProcessUdpReq(gtpv1u_stack, gtpv1u_data_req_p->buffer,
gtpv1u_data_req_p->buffer_length,
gtpv1u_data_req_p->port,
gtpv1u_data_req_p->peer_addr);
free(gtpv1u_data_req_p->buffer);
} break;
default:
{
GTPU_ERROR("Unkwnon message ID %d\n", received_message_p->messageId);
} break;
}
free(received_message_p);
received_message_p = NULL;
}
return NULL;
}
int gtpv1_u_init(const mme_config_t *mme_config) {
int ret;
NwGtpv1uRcT rc;
NwGtpv1uUlpEntityT ulp;
NwGtpv1uUdpEntityT udp;
NwGtpv1uLogMgrEntityT log;
NwGtpv1uTimerMgrEntityT tmr;
GTPU_DEBUG("Initializing GTPV1U interface\n");
ret = gtpv1_u_send_init_udp(mme_config->gtpv1_u_config.port_number);
if (ret < 0) {
return ret;
}
/* Initializing GTPv1-U stack */
if ((rc = nwGtpv1uInitialize(&gtpv1u_stack)) != NW_GTPV1U_OK) {
GTPU_ERROR("Failed to setup nwGtpv1u stack %x\n", rc);
return -1;
}
if ((rc = nwGtpv1uSetLogLevel(gtpv1u_stack, NW_LOG_LEVEL_DEBG)) != NW_GTPV1U_OK) {
GTPU_ERROR("Failed to setup loglevel for stack %x\n", rc);
return -1;
}
/* Set the ULP API callback. Called once message have been processed by the
* nw-gtpv1u stack.
*/
ulp.ulpReqCallback = gtpv1u_process_stack_req;
if ((rc = nwGtpv1uSetUlpEntity(gtpv1u_stack, &ulp)) != NW_GTPV1U_OK) {
GTPU_ERROR("nwGtpv1uSetUlpEntity: %x", rc);
return -1;
}
/* nw-gtpv1u stack requires an udp callback to send data over UDP.
* We provide a wrapper to UDP task.
*/
udp.udpDataReqCallback = gtpv1_u_send_udp_msg;
if ((rc = nwGtpv1uSetUdpEntity(gtpv1u_stack, &udp)) != NW_GTPV1U_OK) {
GTPU_ERROR("nwGtpv1uSetUdpEntity: %x", rc);
return -1;
}
log.logReqCallback = gtpv1_u_log_request;
if ((rc = nwGtpv1uSetLogMgrEntity(gtpv1u_stack, &log)) != NW_GTPV1U_OK) {
GTPU_ERROR("nwGtpv1uSetLogMgrEntity: %x", rc);
return -1;
}
/* Timer interface is more complicated as both wrappers doesn't send a message
* to the timer task but call the timer API functions start/stop timer.
*/
tmr.tmrMgrHandle = 0;
tmr.tmrStartCallback = gtpv1u_start_timer_wrapper;
tmr.tmrStopCallback = gtpv1u_stop_timer_wrapper;
if ((rc = nwGtpv1uSetTimerMgrEntity(gtpv1u_stack, &tmr)) != NW_GTPV1U_OK) {
GTPU_ERROR("nwGtpv1uSetTimerMgrEntity: %x", rc);
return -1;
}
if (pthread_create(&gtpv1u_task_thread, NULL, &gtpv1u_thread, NULL) < 0) {
GTPU_ERROR("s1ap phtread_create: %s", strerror(errno));
return -1;
}
GTPU_DEBUG("Initializing GTPV1U interface: DONE\n");
return ret;
}
@@ -1 +0,0 @@
Amit Chawre
@@ -1,26 +0,0 @@
Copyright (c) 2010-2011 Amit Chawre <http://www.amitchawre.net/contact.html>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must 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.
@@ -1,83 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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_GTPV1U_LOG_H__
#define __NW_GTPV1U_LOG_H__
#include <stdio.h>
#include "NwLog.h"
/**
* @file NwGtpv1uLog.h
* @brief This header contains logging related definitions.
*/
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------
* Log Macro Definition
*--------------------------------------------------------------------------*/
#define NW_LOG(_gtpv1uHandle, _logLevel, ...) \
do { \
if(((NwGtpv1uStackT*)(_gtpv1uHandle))->logLevel >= _logLevel) \
{ \
char _logBuf[1024]; \
snprintf(_logBuf, 1024, __VA_ARGS__); \
((NwGtpv1uStackT*)(_gtpv1uHandle))->logMgr.logReqCallback(((NwGtpv1uStackT*)_gtpv1uHandle)->logMgr.logMgrHandle, _logLevel, __FILE__, __LINE__, _logBuf);\
} \
} while(0)
#define NW_ENTER(_gtpv1uHandle) \
do { \
NW_LOG(_gtpv1uHandle, NW_LOG_LEVEL_DEBG, "Entering '%s'", __func__);\
} while(0)
#define NW_LEAVE(_gtpv1uHandle) \
do { \
NW_LOG(_gtpv1uHandle, 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 *
*--------------------------------------------------------------------------*/
@@ -1,230 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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_GTPV1U_PRIVATE_H__
#define __NW_GTPV1U_PRIVATE_H__
#include "tree.h"
#include "queue.h"
#include "NwTypes.h"
#include "NwGtpv1uError.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uMsg.h"
/**
* @file NwGtpv1uPrivate.h
* @brief This header file contains nw-gtpv1u private definitions not to be
* exposed to user application.
*/
#ifdef __cplusplus
extern "C" {
#endif
#define NW_GTPV1U_MALLOC(_stack, _size, _mem, _type) \
do { \
if(((NwGtpv1uStackT*)(_stack))->memMgr.memAlloc && ((NwGtpv1uStackT*)(_stack))->memMgr.memFree )\
{ \
_mem = (_type) ((NwGtpv1uStackT*) (_stack))->memMgr.memAlloc(((NwGtpv1uStackT*) (_stack))->memMgr.hMemMgr, _size, __FILE__, __LINE__);\
} \
else \
{ \
_mem = (_type) malloc (_size); \
} \
} while (0)
/*--------------------------------------------------------------------------*
* G T P U 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 *
*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*
* GRPS Tunneling Protocol Stack Class Definition
*--------------------------------------------------------------------------*/
/**
* gtpv1u stack class definition
*/
typedef struct NwGtpv1uStack
{
NwU32T id;
NwU32T seq;
NwGtpv1uUlpEntityT ulp;
NwGtpv1uUdpEntityT udp;
NwGtpv1uMemMgrEntityT memMgr;
NwGtpv1uTimerMgrEntityT tmrMgr;
NwGtpv1uLogMgrEntityT logMgr;
NwU32T logLevel;
RB_HEAD( NwGtpv1uOutstandingTxSeqNumTrxnMap, NwGtpv1uTrxn) outstandingTxSeqNumMap;
RB_HEAD( NwGtpv1uOutstandingRxSeqNumTrxnMap, NwGtpv1uTrxn) outstandingRxSeqNumMap;
RB_HEAD(NwGtpv1uTunnelEndPointTMap, NwGtpv1uTunnelEndPoint) sessionMap;
RB_HEAD(NwGtpv1uTunnelEndPointIdentifierMap, NwGtpv1uTunnelEndPoint) teidMap;
} NwGtpv1uStackT;
/**
* GTP Tunnel End Point class definition
*/
typedef struct NwGtpv1uTunnelEndPoint
{
NwU32T teid; /**< Gtpu Tunnel End Point Identifier */
NwU32T peerAddr; /**< Peer IP address for the session */
NwGtpv1uStackT* pStack; /**< Pointer to the parent stack */
NwGtpv1uUlpSessionHandleT hUlpSession; /**< ULP session handle for the session */
RB_ENTRY (NwGtpv1uTunnelEndPoint) sessionMapRbtNode; /**< RB Tree Data Structure Node */
struct NwGtpv1uTunnelEndPoint *next;
} NwGtpv1uTunnelEndPointT;
/*--------------------------------------------------------------------------*
* Timeout Info Type Definition
*--------------------------------------------------------------------------*/
/**
* gtpv1u timeout info
*/
typedef struct NwGtpv1uTimeoutInfo
{
NwGtpv1uStackHandleT hStack;
void* timeoutArg;
NwGtpv1uRcT (*timeoutCallbackFunc)(void*);
} NwGtpv1uTimeoutInfoT;
/**
* Start a transaction response timer
*
* @param[in] thiz Pointer to stack instance
* @param[in] timeoutArg Arg to timeout function.
* @param[out] phTmr Pointer to timer handle.
* @return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpStartTrxnPeerRspTimer(NwGtpv1uStackT* thiz, NwGtpv1uTimeoutInfoT* timeoutInfo, NwGtpv1uTimerHandleT* phTmr);
/**
* Stop a transaction response timer
*
* @param[in] thiz Pointer to stack instance
* @param[out] phTmr Pointer to timer handle.
* @return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpStopTrxnPeerRspTimer(NwGtpv1uStackT* thiz, NwGtpv1uTimerHandleT* phTmr);
#define NW_GTPV1U_MAX_MSG_LEN (4096) /**< Maximum supported gtpv1u packet length including header */
/**
* NwGtpv1uMsgT holds gtpv1u messages to/from the peer.
*/
typedef struct NwGtpv1uMsg
{
NwU8T version;
NwU8T protocolType;
NwU8T extHdrFlag;
NwU8T seqNumFlag;
NwU16T npduNumFlag;
NwU32T msgType;
NwU16T msgLen;
NwU32T teid;
NwU16T seqNum;
NwU8T npduNum;
NwU8T nextExtHdrType;
NwU8T msgBuf[NW_GTPV1U_MAX_MSG_LEN];
struct NwGtpv1uMsg* next;
} NwGtpv1uMsgT;
/*--------------------------------------------------------------------------*
* R6/R4 Transaction Context Type Definition
*--------------------------------------------------------------------------*/
/**
* Transaction structure
*/
typedef struct NwGtpv1uTrxn
{
NwU32T seqNum;
NwU32T peerIp;
NwU32T peerPort;
NwU8T maxRetries;
NwU8T t3Timer;
NwGtpv1uTimerHandleT hRspTmr;
NwGtpv1uTimeoutInfoT peerRspTimeoutInfo;
NwGtpv1uStackT* pStack;
NwGtpv1uTunnelEndPointT* pSession;
NwU32T hUlpTrxn;
NwGtpv1uMsgT* pMsg;
RB_ENTRY (NwGtpv1uTrxn) outstandingTxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */
RB_ENTRY (NwGtpv1uTrxn) outstandingRxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */
struct NwGtpv1uTrxn* next;
} NwGtpv1uTrxnT;
/**
* GTPv2 message header structure
*/
#pragma pack(1)
typedef struct NwGtpv1uMsgHeader
{
NwU8T PN:1;
NwU8T S:1;
NwU8T E:1;
NwU8T spare:1;
NwU8T PT:1;
NwU8T version:3;
NwU8T msgType;
NwU16T msgLength;
NwU32T teid;
} NwGtpv1uMsgHeaderT;
#pragma pack()
#ifdef __cplusplus
}
#endif
#endif /* __NW_GTPV1U_PRIVATE_H__ */
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,88 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 NwGtpv1uTrxn.h
* @author Amit Chawre
* @brief
*
* This header file contains required definitions and functions
* prototypes used by gtpv1u transactions.
*
**/
#ifndef __NW_GTPV1U_TRXN_H__
#define __NW_GTPV1U_TRXN_H__
#ifdef __cplusplus
extern "C" {
#endif
NwGtpv1uRcT
nwGtpv1uTrxnNew( NW_IN NwGtpv1uStackT* thiz,
NW_OUT NwGtpv1uTrxnT **ppTrxn);
NwGtpv1uRcT
nwGtpv1uTrxnWithSeqNew( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwU32T seqNum,
NW_OUT NwGtpv1uTrxnT **ppTrxn);
NwGtpv1uRcT
nwGtpv1uTrxnDelete( NW_INOUT NwGtpv1uTrxnT **ppTrxn);
NwGtpv1uRcT
nwGtpv1uTrxnNew( NW_IN NwGtpv1uStackT* thiz,
NW_OUT NwGtpv1uTrxnT **ppTrxn);
NwGtpv1uRcT
nwGtpv1uTrxnDelete( NW_INOUT NwGtpv1uTrxnT **pthiz);
NwGtpv1uRcT
nwGtpv1uTrxnCreateAndSendMsg( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwGtpv1uTrxnT *pTrxn,
NW_IN NwU32T peerIp,
NW_IN NwU32T peerPort,
NW_IN NwGtpv1uMsgT *pMsg);
#ifdef __cplusplus
}
#endif
#endif /* __NW_GTPV1U_TRXN_H__ */
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,85 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "NwTypes.h"
#include "NwUtils.h"
#include "NwGtpv1uError.h"
#include "NwGtpv1uPrivate.h"
#include "NwGtpv1uMsg.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uLog.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __NW_GTPV1U_CONNECTION_H__
#define __NW_GTPV1U_CONNECTION_H__
/**
Constructor
@return Pointer to session on success, NULL n failure.
*/
NwGtpv1uTunnelEndPointT*
nwGtpTunnelEndPointNew(struct NwGtpv1uStack* pStack);
/**
Destructor
@param[in] thiz: Pointer to session
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpTunnelEndPointDestroy(struct NwGtpv1uStack* pStack, NwGtpv1uTunnelEndPointT* thiz);
NwGtpv1uRcT
nwGtpSessionSendMsgApiToUlpEntity(NwGtpv1uTunnelEndPointT* thiz,
NwGtpv1uMsgT *pMsg);
#ifdef __cplusplus
}
#endif
#endif
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,630 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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_GTPV1U_H__
#define __NW_GTPV1U_H__
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "NwTypes.h"
#include "NwGtpv1uError.h"
/** @mainpage
@section intro Introduction
nw-gtpv1u library is a free and open source implementation of GPRS Tunneling
protocol v2 user plane also known as eGTP-U based on 3GPP TS 29.281 V9.3.0.
The library is published under BSD three clause license.
@section scope Scope
The stack library also does basic tasks like packet/header validation,
retransmission, duplicate detection 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 NwGtpv1u.h
* @author Amit Chawre
* @brief
*
* This header file contains all required definitions and functions
* prototypes for using nw-gtpv1u library.
*
**/
#define NW_GTPU_VERSION (0x01)
#define NW_GTP_PROTOCOL_TYPE_GTP (0x01)
#define NW_GTP_PROTOCOL_TYPE_GTP_PRIME (0x00)
/*--------------------------------------------------------------------------*
* S H A R E D A P I M A C R O S *
*--------------------------------------------------------------------------*/
#define NW_GTP_ECHO_REQ (1)
#define NW_GTP_ECHO_RSP (2)
#define NW_GTP_ERROR_INDICATION (26)
#define NW_GTP_SUPPORTED_EXTENSION_HEADER_INDICATION (31)
#define NW_GTP_END_MARKER (254)
#define NW_GTP_GPDU (255)
/*---------------------------------------------------------------------------
* Opaque Gtpv2 Stack Handles
*--------------------------------------------------------------------------*/
typedef NwPtrT NwGtpv1uStackHandleT; /**< Gtpv2 Stack Handle */
typedef NwPtrT NwGtpv1uUlpHandleT; /**< Gtpv2 Stack Ulp Entity Handle */
typedef NwPtrT NwGtpv1uUdpHandleT; /**< Gtpv2 Stack Udp Entity Handle */
typedef NwPtrT NwGtpv1uMemMgrHandleT; /**< Gtpv2 Stack Mem Manager Handle */
typedef NwPtrT NwGtpv1uTimerMgrHandleT; /**< Gtpv2 Stack Timer Manager Handle */
typedef NwPtrT NwGtpv1uLogMgrHandleT; /**< Gtpv2 Stack Log Mnagaer Handle */
typedef NwPtrT NwGtpv1uTimerHandleT; /**< Gtpv2 Stack Timer Handle */
typedef NwPtrT NwGtpv1uMsgHandleT; /**< Gtpv2 Msg Handle */
typedef struct NwGtpv1uStackConfig
{
NwU16T udpSrcPort;
} NwGtpv1uStackConfigT;
/*--------------------------------------------------------------------------*
* S T A C K A P I D E F I N I T I O N S *
*--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
* Gtpv2 Stack ULP API type definitions
*--------------------------------------------------------------------------*/
/**
* APIs types between ULP and Stack
*/
typedef enum
{
/* APIs from ULP to stack */
NW_GTPV1U_ULP_API_CREATE_TUNNEL_ENDPOINT = 0x00000000, /**< Create a local teid context on stack */
NW_GTPV1U_ULP_API_DESTROY_TUNNEL_ENDPOINT, /**< Delete a local teid context on stack */
NW_GTPV1U_ULP_API_INITIAL_REQ, /**< Send a Initial Request over a session */
NW_GTPV1U_ULP_API_TRIGGERED_REQ, /**< Send a Initial Request over a session */
NW_GTPV1U_ULP_API_TRIGGERED_RSP, /**< Send a Trigger Response over a session */
NW_GTPV1U_ULP_API_SEND_TPDU, /**< Send a T-PDU message over teid context */
/* APIs from stack to ULP */
NW_GTPV1U_ULP_API_RECV_TPDU, /**< Receive a gtpv1u T-PDU from stack */
NW_GTPV1U_ULP_API_RECV_MSG, /**< Receive a gtpv1u message from stack */
NW_GTPV1U_ULP_API_RSP_FAILURE, /**< Rsp failure for gtpv2 message from stack */
/* Do not add below this */
NW_GTPV1U_ULP_API_END = 0xFFFFFFFF,
} NwGtpv1uUlpApiTypeT;
/*---------------------------------------------------------------------------
* Gtpv2 Stack API information elements definitions
*--------------------------------------------------------------------------*/
typedef NwU32T NwGtpv1uStackSessionHandleT;/**< Gtpv2 Stack session Handle */
typedef NwU8T NwGtpv1uMsgTypeT; /**< Gtpv2 Msg Type */
typedef NwU32T NwGtpv1uTrxnHandleT; /**< Gtpv2 Transaction Handle */
typedef NwU32T NwGtpv1uUlpTrxnHandleT; /**< Gtpv2 Ulp Transaction Handle */
typedef NwU32T NwGtpv1uUlpSessionHandleT; /**< Gtpv2 Ulp session Handle */
/**
* API information elements between ULP and Stack for
* creating a session.
*/
typedef struct
{
NW_IN NwU32T teid;
NW_IN NwGtpv1uUlpSessionHandleT hUlpSession;
NW_OUT NwGtpv1uStackSessionHandleT hStackSession;
} NwGtpv1uCreateTunnelEndPointT;
/**
* API information elements between ULP and Stack for
* destroying a session.
*/
typedef struct
{
NW_IN NwGtpv1uStackSessionHandleT hStackSessionHandle;
} NwGtpv1uDestroyTunnelEndPointT;
/**
* API information elements between ULP and Stack for
* sending a Gtpv1u initial message.
*/
typedef struct
{
NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn;
NW_IN NwU32T peerIp;
NW_IN NwU32T peerPort;
NW_IN NwU8T flags;
NW_IN NwU32T teid;
} NwGtpv1uInitialReqInfoT;
/**
* API information elements between ULP and Stack for
* sending a Gtpv1u triggered response message.
*/
typedef struct
{
NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn;
NW_IN NwU32T peerIp;
NW_IN NwU32T peerPort;
NW_IN NwU8T flags;
NW_IN NwU32T teid;
NW_IN NwU32T seqNum;
NW_IN NwGtpv1uMsgHandleT hMsg;
} NwGtpv1uTriggeredRspInfoT;
/**
* API information elements between ULP and Stack for
* sending a Gtpv1u triggered request message.
*/
typedef struct
{
NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn;
NW_IN NwU32T peerIp;
NW_IN NwU32T peerPort;
NW_IN NwU8T flags;
NW_IN NwU32T teid;
NW_IN NwU32T seqNum;
NW_IN NwGtpv1uMsgHandleT hMsg;
} NwGtpv1uTriggeredReqInfoT;
/**
* API information elements between ULP and Stack for
* sending a Gtpv2 message over a session.
*/
typedef struct
{
NW_IN NwU32T teid;
NW_IN NwU32T ipAddr;
NW_IN NwU8T flags;
NW_IN NwGtpv1uMsgHandleT hMsg;
} NwGtpv1uSendtoInfoT;
/**
* API information elements between ULP and Stack for
* sending a Gtpv2 message over a session.
*/
typedef struct
{
NW_OUT NwGtpv1uStackSessionHandleT hStackSessionHandle;
NW_INOUT NwGtpv1uTrxnHandleT hTrxn;
NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn;
NW_IN NwGtpv1uMsgTypeT msgType;
NW_IN NwU8T flags;
NW_IN NwGtpv1uMsgHandleT hMsg;
} NwGtpv1uSendMsgInfoT;
/**
* API information elements between ULP and Stack for
* receiving a Gtpv2 message over a session from stack.
*/
typedef struct
{
NW_IN NwGtpv1uUlpSessionHandleT hUlpSession;
NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn;
NW_IN NwU32T teid;
NW_IN NwU32T peerIp;
NW_IN NwU32T peerPort;
NW_IN NwU32T msgType; /**< Message type */
NW_IN NwGtpv1uMsgHandleT hMsg; /**< Gtp Message handle */
} NwGtpv1uRecvMsgInfoT;
/**
* API information elements between ULP and Stack for
* receiving a Gtpv2 message over a session from stack.
*/
typedef struct
{
NW_IN NwGtpv1uUlpSessionHandleT hUlpSession;
NW_IN NwGtpv1uTrxnHandleT hTrxn;
} NwGtpv1uNackInfoT;
/*---------------------------------------------------------------------------
* Gtpv2 Stack API structure definition
*--------------------------------------------------------------------------*/
/**
* API structure between ULP and Stack
*/
typedef struct
{
NwGtpv1uUlpApiTypeT apiType;
NwGtpv1uMsgHandleT hMsg;
union
{
NwGtpv1uCreateTunnelEndPointT createTunnelEndPointInfo;
NwGtpv1uDestroyTunnelEndPointT destroyTunnelEndPointInfo;
NwGtpv1uInitialReqInfoT initialReqInfo;
NwGtpv1uTriggeredRspInfoT triggeredRspInfo;
NwGtpv1uTriggeredReqInfoT triggeredReqInfo;
NwGtpv1uSendtoInfoT sendtoInfo;
NwGtpv1uSendMsgInfoT sendMsgInfo;
NwGtpv1uRecvMsgInfoT recvMsgInfo;
NwGtpv1uNackInfoT nackMsgInfo;
} apiInfo;
} NwGtpv1uUlpApiT;
/*--------------------------------------------------------------------------*
* S T A C K E N T I T I E S D E F I N I T I O N S *
*--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
* ULP Entity Definitions
*--------------------------------------------------------------------------*/
/**
* Gtpv2 ULP entity definition
*/
typedef struct
{
NwGtpv1uUlpHandleT hUlp;
NwGtpv1uRcT (*ulpReqCallback) ( NW_IN NwGtpv1uUlpHandleT hUlp,
NW_IN NwGtpv1uUlpApiT *pUlpApi);
} NwGtpv1uUlpEntityT;
/*---------------------------------------------------------------------------
* UDP Entity Definitions
*--------------------------------------------------------------------------*/
/**
* Gtpv2 UDP entity definition
*/
typedef struct
{
NwGtpv1uUdpHandleT hUdp;
NwGtpv1uRcT (*udpDataReqCallback) ( NW_IN NwGtpv1uUdpHandleT udpHandle,
NW_IN NwU8T* dataBuf,
NW_IN NwU32T dataSize,
NW_IN NwU32T peerIP,
NW_IN NwU32T peerPort);
} NwGtpv1uUdpEntityT;
/**
* Gtpv1u Memory Manager entity definition
*/
typedef struct
{
NwGtpv1uMemMgrHandleT hMemMgr;
void* (*memAlloc)( NW_IN NwGtpv1uMemMgrHandleT hMemMgr,
NW_IN NwU32T memSize,
NW_IN NwCharT* fileName,
NW_IN NwU32T lineNumber);
void (*memFree) ( NW_IN NwGtpv1uMemMgrHandleT hMemMgr,
NW_IN void* hMem,
NW_IN NwCharT* fileName,
NW_IN NwU32T lineNumber);
} NwGtpv1uMemMgrEntityT;
/*---------------------------------------------------------------------------
* Timer Entity Definitions
*--------------------------------------------------------------------------*/
#define NW_GTPV1U_TMR_TYPE_ONE_SHOT (0)
#define NW_GTPV1U_TMR_TYPE_REPETITIVE (1)
/**
* Gtpv2 Timer Manager entity definition
*/
typedef struct
{
NwGtpv1uTimerMgrHandleT tmrMgrHandle;
NwGtpv1uRcT (*tmrStartCallback)( NW_IN NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NW_IN NwU32T timeoutSecs,
NW_IN NwU32T timeoutUsec,
NW_IN NwU32T tmrType,
NW_IN void* tmrArg,
NW_OUT NwGtpv1uTimerHandleT* tmrHandle);
NwGtpv1uRcT (*tmrStopCallback) ( NW_IN NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NW_IN NwGtpv1uTimerHandleT tmrHandle);
} NwGtpv1uTimerMgrEntityT;
/*---------------------------------------------------------------------------
* Log Entity Definitions
*--------------------------------------------------------------------------*/
/**
* Gtpv2 Log manager entity definition
*/
typedef struct
{
NwGtpv1uLogMgrHandleT logMgrHandle;
NwGtpv1uRcT (*logReqCallback) (NW_IN NwGtpv1uLogMgrHandleT logMgrHandle,
NW_IN NwU32T logLevel,
NW_IN NwCharT* file,
NW_IN NwU32T line,
NW_IN NwCharT* logStr);
} NwGtpv1uLogMgrEntityT;
/*--------------------------------------------------------------------------*
* P U B L I C F U N C T I O N S *
*--------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------*/
/**
Initialize the nw-gtpv1u stack.
@param[in,out] phGtpv1uStackHandle : Pointer to stack handle
*/
NwGtpv1uRcT
nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT* phGtpv1uStackHandle);
/*---------------------------------------------------------------------------
* Destructor
*--------------------------------------------------------------------------*/
/**
Destroy the nw-gtpv1u stack.
@param[in] hGtpv1uStackHandle : Stack handle
*/
NwGtpv1uRcT
nwGtpv1uFinalize( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle);
/*---------------------------------------------------------------------------
* Configuration Get/Set Operations
*--------------------------------------------------------------------------*/
/**
Set Configuration for the nw-gtpv1u stack.
@param[in,out] phGtpv1uStackHandle : Pointer to stack handle
*/
NwGtpv1uRcT
NwGtpv1uConfigSet( NW_IN NwGtpv1uStackHandleT* phGtpv1uStackHandle, NW_IN NwGtpv1uStackConfigT* pConfig);
/**
Get Configuration for the nw-gtpv1u stack.
@param[in,out] phGtpv1uStackHandle : Pointer to stack handle
*/
NwGtpv1uRcT
NwGtpv1uConfigGet( NW_IN NwGtpv1uStackHandleT* phGtpv1uStackHandle, NW_OUT NwGtpv1uStackConfigT* pConfig);
/**
Set ULP entity for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pUlpEntity : Pointer to ULP entity.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetUlpEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uUlpEntityT* pUlpEntity);
/**
Set UDP entity for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pUdpEntity : Pointer to UDP entity.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetUdpEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uUdpEntityT* pUdpEntity);
/**
Set MemMgr entity for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pMemMgr : Pointer to Memory Manager.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetMemMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uMemMgrEntityT* pMemMgr);
/**
Set TmrMgr entity for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pTmrMgr : Pointer to Timer Manager.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetTimerMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uTimerMgrEntityT* pTmrMgr);
/**
Set LogMgr entity for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pLogMgr : Pointer to Log Manager.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetLogMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uLogMgrEntityT* pLogMgr);
/**
Set log level for the stack.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] logLevel : Log level.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU32T logLevel);
/*---------------------------------------------------------------------------
* Process Request from Udp Layer
*--------------------------------------------------------------------------*/
/**
Process Data Request from UDP entity.
@param[in] hGtpv1uStackHandle : 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_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwU8T* udpData,
NW_IN NwU32T udpDataLen,
NW_IN NwU16T peerPort,
NW_IN NwU32T peerIP);
/*---------------------------------------------------------------------------
* Process Request from Upper Layer
*--------------------------------------------------------------------------*/
/**
Process Request from ULP entity.
@param[in] hGtpv1uStackHandle : Stack handle
@param[in] pLogMgr : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uProcessUlpReq( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle,
NW_IN NwGtpv1uUlpApiT *ulpReq);
/*---------------------------------------------------------------------------
* Process Timer timeout Request from Timer Manager
*--------------------------------------------------------------------------*/
/**
Process Timer timeout Request from Timer Manager
@param[in] pLogMgr : Pointer timeout arguments.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uProcessTimeout( NW_IN void* timeoutArg);
NwGtpv1uRcT
nwGtpv1uPeerRspTimeout(void* arg);
#ifdef __cplusplus
}
#endif
#endif /* __NW_GTPV1U_H__ */
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,62 +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_GTPV1U_ERROR_H__
#define __NW_GTPV1U_ERROR_H__
/**
* @file NwGtpv1uError.h
* @brief This header file contains return error code type definitions.
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
NW_GTPV1U_OK = 0x00000000,
NW_GTPV1U_MANDATORY_IE_DUPLICATE,
NW_GTPV1U_MANDATORY_IE_MISSING,
NW_GTPV1U_MSG_MALFORMED,
NW_GTPV1U_FAILURE = 0xFFFFFFFE
} NwGtpv1uRcT;
#ifdef __cplusplus
}
#endif
#endif /* __NW_GTPV1U_ERROR_H__*/
@@ -1,66 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 NwGtpv1uIe.h
* @brief This header file contains Information Element definitions for GTPv1u
* as per 3GPP TS 29281-930.
*/
#ifndef __NW_GTPV1U_IE_H__
#define __NW_GTPV1U_IE_H__
/*--------------------------------------------------------------------------*
* G T P V 2 U I E T Y P E M A C R O D E F I N I T I O N S *
*--------------------------------------------------------------------------*/
#define NW_GTPV1U_IE_RECOVERY (14)
#define NW_GTPV1U_IE_TEID_DATA_I (15)
#define NW_GTPV1U_IE_GSN_ADDRESS (133)
#define NW_GTPV1U_IE_EXT_HDR_TYPE_LIST (141)
#define NW_GTPV1U_IE_PRIVATE_EXTENSION (255)
/*--------------------------------------------------------------------------*
* G T P V 2 U C A U S E V A L U E D E F I N I T I O N S *
*--------------------------------------------------------------------------*/
#define NW_GTPV1U_CAUSE_REQUEST_ACCEPTED (16)
#define NW_GTPV1U_CAUSE_MANDATORY_IE_MISSING (70)
#endif /* __NW_GTPV1U_IE_H__ */
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,320 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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_GTPV1U_MSG_H__
#define __NW_GTPV1U_MSG_H__
#include "NwTypes.h"
#include "NwGtpv1u.h"
/**
* @file NwGtpv1uMsg.h
* @brief This file defines APIs for to build new outgoing gtpv1u messages and to parse incoming messages.
*/
#ifdef __cplusplus
extern "C" {
#endif
/*--------------------------------------------------------------------------*
* 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 NwGtpv1uIeTv1
{
NwU8T t;
NwU8T v;
} NwGtpv1uIeTv1T;
typedef struct NwGtpv1uIeTv2
{
NwU8T t;
NwU8T v;
} NwGtpv1uIeTv2T;
typedef struct NwGtpv1uIeTv4
{
NwU8T t;
NwU32T v;
} NwGtpv1uIeTv4T;
typedef struct NwGtpv1uIeTlv
{
NwU8T t;
NwU16T l;
} NwGtpv1uIeTlvT;
#pragma pack()
/**
* Allocate a GPDU gtpv1u message.
*
* @param[in] hGtpuStackHandle : gtpv1u stack handle.
* @param[in] teidPresent : TEID is present flag.
* @param[in] teid : TEID for this message.
* @param[in] seqNum : Sequence number for this message.
* @param[out] phMsg : Pointer to message handle.
*/
NwGtpv1uRcT
nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU8T seqNumFlag,
NW_IN NwU8T npduNumFlag,
NW_IN NwU8T extHdrFlag,
NW_IN NwU8T msgType,
NW_IN NwU8T teid,
NW_IN NwU16T seqNum,
NW_IN NwU8T npduNum,
NW_IN NwU8T nextExtHeader,
NW_OUT NwGtpv1uMsgHandleT *phMsg);
/**
* Allocate a gtpv1u message.
*
* @param[in] hGtpuStackHandle : gtpv1u stack handle.
* @param[in] teid : TEID for this message.
* @param[in] seqNumFlag : Sequence number flag for this message.
* @param[in] seqNum : Sequence number for this message.
* @param[in] pTpdu: T-PDU for this message.
* @param[in] tpduLength: T-PDU length for this message.
* @param[out] phMsg : Pointer to message handle.
*/
NwGtpv1uRcT
nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU32T teid,
NW_IN NwU8T seqNumFlag,
NW_IN NwU16T seqNum,
NW_IN NwU8T* tpdu,
NW_IN NwU16T tpduLength,
NW_OUT NwGtpv1uMsgHandleT *phMsg);
/**
* Allocate a gtpv1u message from another gtpv1u message.
*
* @param[in] hGtpuStackHandle : gtpv1u stack handle.
* @param[out] hMsg : Handle to input message.
* @param[out] phMsg : Pointer to message handle.
*/
NwGtpv1uRcT
nwGtpv1uMsgFromMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uMsgHandleT hMsg,
NW_OUT NwGtpv1uMsgHandleT *phMsg);
/**
* Allocate a gtpv1u message from data buffer.
*
* @param[in] hGtpuStackHandle : gtpv1u 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.
*/
NwGtpv1uRcT
nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU8T* pBuf,
NW_IN NwU32T bufLen,
NW_OUT NwGtpv1uMsgHandleT *phMsg);
/**
* Free a gtpv1u message.
*
* @param[in] hGtpuStackHandle : gtpv1u stack handle.
* @param[in] hMsg : Message handle.
*/
NwGtpv1uRcT
nwGtpv1uMsgDelete( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uMsgHandleT hMsg);
/**
* Set TEID for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[in] teid: TEID value.
*/
NwGtpv1uRcT
nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T teid);
/**
* Set TEID present flag for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[in] teidPesent: Flag boolean value.
*/
NwGtpv1uRcT
nwGtpv1uMsgSetTeidPresent(NW_IN NwGtpv1uMsgHandleT hMsg, NwBoolT teidPresent);
/**
* Set sequence for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[in] seqNum: Flag boolean value.
*/
NwGtpv1uRcT
nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum);
/**
* Get TEID present for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwU32T
nwGtpv1uMsgGetTeid(NW_IN NwGtpv1uMsgHandleT hMsg);
/**
* Get TEID present for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwBoolT
nwGtpv1uMsgGetTeidPresent(NW_IN NwGtpv1uMsgHandleT hMsg);
/**
* Get sequence number for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwU32T
nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg);
/**
* Get tpdu for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[inout] pTpduBuf : Buffer to copy the T-PDU.
* @param[out] hMsg : T-PDU length.
*/
NwU32T
nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, NwU8T* pTpduBuf, NwU32T* pTpduLength);
NwU8T*
nwGtpv1uMsgGetTpduHandle(NW_IN NwGtpv1uMsgHandleT hMsg);
NwU32T
nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg);
/**
* Add a gtpv1u information element of length 1 to gtpv1u mesasge.
*
* @param[in] hMsg : Handle to gtpv1u message.
* @param[in] type : IE type.
* @param[in] value : IE value.
*/
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU8T value);
/**
* Add a gtpv1u information element of length 2 to gtpv1u mesasge.
*
* @param[in] hMsg : Handle to gtpv1u message.
* @param[in] type : IE type.
* @param[in] value : IE value.
*/
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU16T value);
/**
* Add a gtpv1u information element of length 4 to gtpv1u mesasge.
*
* @param[in] hMsg : Handle to gtpv1u message.
* @param[in] type : IE type.
* @param[in] value : IE value.
*/
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU32T value);
/**
* Add a gtpv1u information element of variable length to gtpv1u mesasge.
*
* @param[in] hMsg : Handle to gtpv1u message.
* @param[in] type : IE type.
* @param[in] length : IE length.
* @param[in] value : IE value.
*/
NwGtpv1uRcT
nwGtpv1uMsgAddIe(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU8T* pVal);
/**
* Dump the contents of gtpv1u mesasge.
*
* @param[in] hMsg : Handle to gtpv1u message.
* @param[in] fp: Pointer to output file.
*/
NwGtpv1uRcT
nwGtpv1uMsgHexDump(NwGtpv1uMsgHandleT hMsg, FILE* fp);
NwU32T
nwGtpv1uMsgGetMsgType(NW_IN NwGtpv1uMsgHandleT hMsg);
#ifdef __cplusplus
}
#endif
#endif /* __NW_TYPES_H__ */
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,88 +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 <libgen.h>
#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 */
// static
// NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"};
/*---------------------------------------------------------------------------
* IPv4 logging macros
*--------------------------------------------------------------------------*/
#define NW_IPV4_ADDR "%u.%u.%u.%u"
#define NW_IPV4_ADDR_FORMAT(__addr) (NwU8T)((__addr) & 0x000000ff), \
(NwU8T)(((__addr) & 0x0000ff00) >> 8 ), \
(NwU8T)(((__addr) & 0x00ff0000) >> 16), \
(NwU8T)(((__addr) & 0xff000000) >> 24)
#define NW_IPV4_ADDR_FORMATP(__paddr) (NwU8T)(*((NwU8T*)(__paddr)) & 0x000000ff), \
(NwU8T)(*((NwU8T*)(__paddr + 1)) & 0x000000ff), \
(NwU8T)(*((NwU8T*)(__paddr + 2)) & 0x000000ff), \
(NwU8T)(*((NwU8T*)(__paddr + 3)) & 0x000000ff)
#ifdef __cplusplus
}
#endif
#endif /* __NW_LOG_H__ */
@@ -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 <stdlib.h>
#include <stdint.h>
#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 argumnet */
#define NW_INOUT /**< An input and output argument */
#define NW_TRUE (1) /**< Truth value */
#define NW_FALSE (0) /**< False value */
typedef unsigned char NwU8T; /**< Unsigned 1 byte */
typedef unsigned short NwU16T; /**< Unsigned 2 byte */
typedef unsigned int NwU32T; /**< Unsigned 4 byte */
typedef unsigned long long NwU64T; /**< 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 uintptr_t NwPtrT; /**< Use this for generic pointers */
typedef unsigned int NwHandleT; /**< Use this for generic handles */
typedef char NwBoolT; /**< Use this for booleans */
typedef char NwCharT; /**< Use this for strings */
typedef signed int NwFdT; /**< Use this for file descriptor */
#ifdef __cplusplus
}
#endif
#endif /* __NW_TYPES_H__ */
@@ -1,68 +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 <assert.h>
#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) ( \
( ( ((NwU64T)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((NwU64T)x) & 0x00ff000000000000ULL ) >> 40 ) | \
( ( ((NwU64T)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((NwU64T)x) & 0x000000ff00000000ULL ) >> 8 ) | \
( ( ((NwU64T)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((NwU64T)x) & 0x00000000000000ffULL ) << 56 ) | \
( ( ((NwU64T)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((NwU64T)x) & 0x00000000ff000000ULL ) << 8 ) \
)
#define NW_NTOHS NW_HTONS
#define NW_NTOHL NW_HTONL
#define NW_NTOHLL NW_HTONLL
#endif /* __NW_UTILS_H__ */
@@ -1,883 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "NwTypes.h"
#include "NwUtils.h"
#include "NwGtpv1uError.h"
#include "NwGtpv1uPrivate.h"
#include "NwGtpv1uTunnelEndPoint.h"
#include "NwGtpv1uTrxn.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uIe.h"
#include "NwGtpv1uLog.h"
#ifdef __cplusplus
extern "C" {
#endif
/*--------------------------------------------------------------------------*
* P R I V A T E F U N C T I O N S *
*--------------------------------------------------------------------------*/
static void
nwGtpv1uDisplayBanner( NwGtpv1uStackT* thiz)
{
printf(" *----------------------------------------------------------------------------*\n");
printf(" * *\n");
printf(" * n w - g t p v 2 u *\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 u 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");
}
/*---------------------------------------------------------------------------
* RBTree Search Functions
*--------------------------------------------------------------------------*/
static inline NwS32T
nwGtpv1uCompareTeid(struct NwGtpv1uTunnelEndPoint* a, struct NwGtpv1uTunnelEndPoint* b);
static inline NwS32T
nwGtpv1uCompareSeqNum(struct NwGtpv1uTrxn* a, struct NwGtpv1uTrxn* b);
RB_PROTOTYPE(NwGtpv1uOutstandingTxSeqNumTrxnMap, NwGtpv1uTrxn, outstandingTxSeqNumMapRbtNode, nwGtpv1uCompareSeqNum)
RB_PROTOTYPE(NwGtpv1uOutstandingRxSeqNumTrxnMap, NwGtpv1uTrxn, outstandingRxSeqNumMapRbtNode, nwGtpv1uCompareSeqNum)
RB_PROTOTYPE(NwGtpv1uTunnelEndPointTMap, NwGtpv1uTunnelEndPoint, sessionMapRbtNode, nwGtpv1uCompareTeid)
RB_PROTOTYPE(NwGtpv1uTunnelEndPointIdentifierMap, NwGtpv1uTunnelEndPoint, sessionMapRbtNode, nwGtpv1uCompareTeid)
RB_GENERATE(NwGtpv1uOutstandingTxSeqNumTrxnMap, NwGtpv1uTrxn, outstandingTxSeqNumMapRbtNode, nwGtpv1uCompareSeqNum)
RB_GENERATE(NwGtpv1uOutstandingRxSeqNumTrxnMap, NwGtpv1uTrxn, outstandingRxSeqNumMapRbtNode, nwGtpv1uCompareSeqNum)
RB_GENERATE(NwGtpv1uTunnelEndPointTMap, NwGtpv1uTunnelEndPoint, sessionMapRbtNode, nwGtpv1uCompareTeid)
RB_GENERATE(NwGtpv1uTunnelEndPointIdentifierMap, NwGtpv1uTunnelEndPoint, sessionMapRbtNode, nwGtpv1uCompareTeid)
/**
Comparator funtion for comparing two sessions.
@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
nwGtpv1uCompareTeid(struct NwGtpv1uTunnelEndPoint* a, struct NwGtpv1uTunnelEndPoint* b)
{
if(a->teid > b->teid)
return 1;
if(a->teid < b->teid)
return -1;
return 0;
}
/**
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
nwGtpv1uCompareSeqNum(struct NwGtpv1uTrxn* a, struct NwGtpv1uTrxn* 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;
}
/**
Create and Send GTPU message.
@param[in] thiz: Stack handle
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT* thiz, NwU32T peerIp, NwU16T peerPort, NwGtpv1uMsgT* pMsg)
{
NwGtpv1uRcT rc;
NwU8T* msgHdr;
NW_ASSERT(thiz);
NW_ASSERT(pMsg);
NW_ENTER(thiz);
msgHdr = pMsg->msgBuf;
NW_ASSERT(msgHdr != NULL);
*(msgHdr++) = (pMsg->version << 5) |
(pMsg->protocolType << 4) |
(pMsg->extHdrFlag << 2) |
(pMsg->seqNumFlag << 1) |
(pMsg->npduNumFlag);
*(msgHdr++) = (pMsg->msgType);
*((NwU16T*) msgHdr) = htons(pMsg->msgLen);
msgHdr += 2;
*((NwU32T*) msgHdr) = htonl(pMsg->teid);
msgHdr += 4;
if(pMsg->seqNumFlag || pMsg->extHdrFlag || pMsg->npduNumFlag)
{
*((NwU16T*) msgHdr) = (pMsg->seqNumFlag ? htons(pMsg->seqNum) : 0x0000);
msgHdr += 2;
*((NwU8T*) msgHdr) = (pMsg->npduNumFlag ? htons(pMsg->npduNum) : 0x00);
msgHdr++;
*((NwU8T*) msgHdr) = (pMsg->extHdrFlag ? htons(pMsg->nextExtHdrType) : 0x00);
msgHdr++;
}
rc = thiz->udp.udpDataReqCallback(thiz->udp.hUdp,
pMsg->msgBuf,
pMsg->msgLen,
peerIp,
peerPort);
NW_LEAVE(thiz);
return rc;
}
/**
* Send GTPv1u Message Indication to ULP entity.
*
* @param[in] hGtpuStackHandle : Stack handle
* @return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uSendUlpMessageIndication( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwU32T hUlpTrxn,
NW_IN NwU32T apiType,
NW_IN NwU32T msgType,
NW_IN NwU32T peerIp,
NW_IN NwU16T peerPort,
NW_IN NwU8T *pMsgBuf,
NW_IN NwU16T msgLength)
{
NwGtpv1uRcT rc;
NwGtpv1uUlpApiT ulpApi;
NW_ENTER(thiz);
ulpApi.apiType = apiType;
ulpApi.apiInfo.recvMsgInfo.msgType = msgType;
ulpApi.apiInfo.recvMsgInfo.hUlpTrxn = hUlpTrxn;
ulpApi.apiInfo.recvMsgInfo.peerIp = peerIp;
ulpApi.apiInfo.recvMsgInfo.peerPort = peerPort;
if(pMsgBuf && msgLength)
{
rc = nwGtpv1uMsgFromBufferNew((NwGtpv1uStackHandleT)thiz, pMsgBuf, msgLength, &(ulpApi.apiInfo.recvMsgInfo.hMsg));
NW_ASSERT(rc == NW_GTPV1U_OK);
}
rc = thiz->ulp.ulpReqCallback(thiz->ulp.hUlp, &ulpApi);
NW_ASSERT(rc == NW_GTPV1U_OK);
NW_LEAVE(thiz);
return rc;
}
NwGtpv1uRcT
nwGtpv1uPeerRspTimeout(void* arg)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTrxnT* thiz;
NwGtpv1uTimeoutInfoT *timeoutInfo = arg;
printf("Retransmission timer expired\n");
thiz = ((NwGtpv1uTrxnT*)timeoutInfo->timeoutArg);
rc = thiz->pStack->udp.udpDataReqCallback(thiz->pStack->udp.hUdp,
thiz->pMsg->msgBuf,
thiz->pMsg->msgLen,
thiz->peerIp,
thiz->peerPort);
if(thiz->maxRetries)
{
rc = thiz->pStack->tmrMgr.tmrStartCallback(thiz->pStack->tmrMgr.tmrMgrHandle, 5, 0, NW_GTPV1U_TMR_TYPE_ONE_SHOT, (void*)timeoutInfo, &thiz->hRspTmr);
thiz->maxRetries--;
}
else
{
/* Inform session layer about path fialure */
printf("Max retries over!\n");
}
return rc;
}
/*---------------------------------------------------------------------------
* ULP API Processing Functions
*--------------------------------------------------------------------------*/
/**
Process NW_GTPV1U_ULP_API_CREATE_TUNNEL_ENDPOINT Request from ULP entity.
@param[in] hGtpuStackHandle : Stack handle
@param[in] pUlpReq : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
NwGtpv1uCreateTunnelEndPoint( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwU32T teid,
NW_IN NwGtpv1uUlpSessionHandleT hUlpSession,
NW_OUT NwGtpv1uStackSessionHandleT *phStackSession )
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTunnelEndPointT* pTunnelEndPoint;
NwGtpv1uTunnelEndPointT* pCollision;
NW_ENTER(thiz);
pTunnelEndPoint = nwGtpTunnelEndPointNew(thiz);
if(pTunnelEndPoint)
{
pTunnelEndPoint->teid = teid;
pTunnelEndPoint->pStack = thiz;
pTunnelEndPoint->hUlpSession = hUlpSession;
pCollision = RB_INSERT(NwGtpv1uTunnelEndPointIdentifierMap, &(thiz->teidMap), pTunnelEndPoint);
if(pCollision)
{
NW_LOG(thiz, NW_LOG_LEVEL_ERRO, "Tunnel end-point cannot be created for teid 0x%x. Tunnel already exists", teid);
rc = nwGtpTunnelEndPointDestroy(thiz, pTunnelEndPoint);
NW_ASSERT(rc == NW_GTPV1U_OK);
*phStackSession = (NwGtpv1uStackSessionHandleT) 0;
NW_ASSERT(0);
rc = NW_GTPV1U_FAILURE;
}
else
{
*phStackSession = (NwGtpv1uStackSessionHandleT) pTunnelEndPoint;
pTunnelEndPoint = RB_FIND(NwGtpv1uTunnelEndPointIdentifierMap, &(thiz->teidMap), pTunnelEndPoint);
NW_ASSERT(pTunnelEndPoint);
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Tunnel end-point 0x%x creation successful for teid 0x%x",
(unsigned int)pTunnelEndPoint, teid);
}
}
else
{
*phStackSession = (NwGtpv1uStackSessionHandleT) 0;
rc = NW_GTPV1U_FAILURE;
}
NW_LEAVE(thiz);
return rc;
}
/**
Process NW_GTPV1U_ULP_API_DESTROY_TUNNEL_ENDPOINT Request from ULP entity.
@param[in] hGtpuStackHandle : Stack handle
@param[in] pUlpReq : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uDestroyTunnelEndPoint( NwGtpv1uStackT* thiz, NW_IN NwGtpv1uUlpApiT *pUlpReq)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTunnelEndPointT *pRemovedTeid;
if(pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle)
{
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Destroying Tunnel end-point '%x'", pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle);
pRemovedTeid = RB_REMOVE(NwGtpv1uTunnelEndPointIdentifierMap, &(thiz->teidMap), (NwGtpv1uTunnelEndPointT*)(pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle));
NW_ASSERT(pRemovedTeid == (NwGtpv1uTunnelEndPointT*)(pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle));
rc = nwGtpTunnelEndPointDestroy(thiz, (NwGtpv1uTunnelEndPointT*) pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle);
}
else
{
NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Non-existent Tunnel end-point handle '%x'", pUlpReq->apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle);
}
return rc;
}
/**
Process NW_GTPV1U_ULP_API_INITIAL_REQ Request from ULP entity.
@param[in] hGtpuStackHandle : Stack handle
@param[in] pUlpReq : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uInitialReq( NW_IN NwGtpv1uStackT* thiz, NW_IN NwGtpv1uUlpApiT *pUlpReq)
{
NwGtpv1uRcT rc;
NwGtpv1uTrxnT *pTrxn;
NW_ENTER(thiz);
/* Create New Transaction */
rc = nwGtpv1uTrxnNew(thiz, &pTrxn);
if(pTrxn)
{
rc = nwGtpv1uTrxnCreateAndSendMsg(thiz,
pTrxn,
pUlpReq->apiInfo.initialReqInfo.peerIp,
pUlpReq->apiInfo.initialReqInfo.peerPort,
(NwGtpv1uMsgT*) pUlpReq->hMsg);
if(rc == NW_GTPV1U_OK)
{
/* Insert into search tree */
RB_INSERT(NwGtpv1uOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), pTrxn);
}
else
{
rc = nwGtpv1uTrxnDelete(&pTrxn);
NW_ASSERT(rc == NW_GTPV1U_OK);
}
}
NW_LEAVE(thiz);
return rc;
}
/**
Process NW_GTPV1U_ULP_API_SEND_TPDU Request from ULP entity.
@param[in] thiz: Stack handle
@param[in] pUlpReq : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uSendto( NwGtpv1uStackT* thiz, NW_IN NwGtpv1uUlpApiT *pUlpReq)
{
NwGtpv1uRcT rc;
NW_ASSERT(thiz);
NW_ENTER(thiz);
(void) nwGtpv1uMsgSetTeid(pUlpReq->apiInfo.sendtoInfo.hMsg, pUlpReq->apiInfo.sendtoInfo.teid);
rc = nwGtpv1uCreateAndSendMsg(thiz,
pUlpReq->apiInfo.sendtoInfo.ipAddr,
2152,
(NwGtpv1uMsgT*) (NwGtpv1uMsgT*) pUlpReq->apiInfo.sendtoInfo.hMsg);
NW_LEAVE(thiz);
return rc;
}
/**
Process GPDU from UDP entity.
@param[in] thiz: Stack handle
@param[in] pUlpReq : Pointer to Ulp Req.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uProcessGpdu( NwGtpv1uStackT* thiz,
NW_IN NwU8T* gpdu,
NW_IN NwU32T gdpuLen,
NW_IN NwU32T peerIp)
{
NwGtpv1uRcT rc;
NwGtpv1uMsgHeaderT* msgHdr;
NwGtpv1uTunnelEndPointT* pTunnelEndPoint;
NwGtpv1uTunnelEndPointT tunnelEndPointKey;
NW_ENTER(thiz);
msgHdr = (NwGtpv1uMsgHeaderT*) gpdu;
tunnelEndPointKey.teid = ntohl(msgHdr->teid);
pTunnelEndPoint = RB_FIND(NwGtpv1uTunnelEndPointIdentifierMap, &(thiz->teidMap), &tunnelEndPointKey);
if(pTunnelEndPoint)
{
NwGtpv1uMsgHandleT hMsg;
rc = nwGtpv1uMsgFromBufferNew( (NwGtpv1uStackHandleT)thiz,
(NwU8T*)gpdu,
gdpuLen,
&hMsg);
if(NW_GTPV1U_OK == rc)
{
NwGtpv1uMsgT* pMsg = (NwGtpv1uMsgT*) hMsg;
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received T-PDU over tunnel end-point '%x' of size %u from "NW_IPV4_ADDR, ntohl(msgHdr->teid), pMsg->msgLen, NW_IPV4_ADDR_FORMAT((peerIp)));
rc = nwGtpSessionSendMsgApiToUlpEntity(pTunnelEndPoint, pMsg);
}
}
else
{
NW_LOG(thiz, NW_LOG_LEVEL_ERRO, "Received T-PDU over non-existent tunnel end-point '%x' from "NW_IPV4_ADDR, ntohl(msgHdr->teid), NW_IPV4_ADDR_FORMAT((peerIp)));
}
NW_LEAVE(thiz);
return rc;
}
/**
Handle Echo Request from Peer Entity.
@param[in] thiz : Stack context
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uHandleEchoReq(NW_IN NwGtpv1uStackT *thiz,
NW_IN NwU8T* msgBuf,
NW_IN NwU32T msgBufLen,
NW_IN NwU16T peerPort,
NW_IN NwU32T peerIp)
{
NwGtpv1uRcT rc;
NwU16T seqNum = 0;
NwGtpv1uMsgHandleT hMsg = 0;
seqNum = ntohs(*(NwU16T*) (msgBuf + (((*msgBuf) & 0x02) ? 8 : 4)));
/* Send Echo Response */
rc = nwGtpv1uMsgNew( (NwGtpv1uStackHandleT)thiz,
NW_TRUE, /* SeqNum flag */
NW_FALSE,
NW_FALSE,
NW_GTP_ECHO_RSP, /* Msg Type */
0x00000000U, /* TEID */
seqNum, /* Seq Number */
0,
0,
(&hMsg));
NW_ASSERT(NW_GTPV1U_OK == rc);
/*
* The Restart Counter value in the Recovery information element shall
* not be used, i.e. it shall be set to zero by the sender and shall be
* ignored by the receiver.
*/
rc = nwGtpv1uMsgAddIeTV1(hMsg, NW_GTPV1U_IE_RECOVERY, 0x00);
NW_LOG(thiz, NW_LOG_LEVEL_INFO, "Sending NW_GTP_ECHO_RSP message to %x:%x with seq %u", peerIp, peerPort, seqNum);
rc = nwGtpv1uCreateAndSendMsg(thiz,
peerIp,
peerPort,
(NwGtpv1uMsgT*) hMsg);
rc = nwGtpv1uMsgDelete((NwGtpv1uStackHandleT)thiz, hMsg);
NW_ASSERT(NW_GTPV1U_OK == rc);
return rc;
}
/*--------------------------------------------------------------------------*
* P U B L I C F U N C T I O N S *
*--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT* hGtpuStackHandle)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz;
thiz = (NwGtpv1uStackT*) malloc( sizeof(NwGtpv1uStackT));
if(thiz)
{
thiz->id = (NwU32T) thiz;
thiz->seq = (NwU16T) ((NwU32T)thiz) ;
RB_INIT(&(thiz->outstandingTxSeqNumMap));
RB_INIT(&(thiz->outstandingRxSeqNumMap));
if (0 == 1)
nwGtpv1uDisplayBanner(thiz);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
*hGtpuStackHandle = (NwGtpv1uStackHandleT) thiz;
return rc;
}
/*---------------------------------------------------------------------------
* Destructor
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uFinalize( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle)
{
NwGtpv1uRcT rc;
if(hGtpuStackHandle)
{
free((void*)hGtpuStackHandle);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
/*---------------------------------------------------------------------------
* Configuration Get/Set
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uSetUlpEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uUlpEntityT* pUlpEntity)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
if(pUlpEntity)
{
thiz->ulp = *(pUlpEntity);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
NwGtpv1uRcT
nwGtpv1uSetUdpEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uUdpEntityT* pUdpEntity)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
if(pUdpEntity)
{
thiz->udp = *(pUdpEntity);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
NwGtpv1uRcT
nwGtpv1uSetMemMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uMemMgrEntityT* pMemMgrEntity)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
if(pMemMgrEntity)
{
thiz->memMgr = *(pMemMgrEntity);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
NwGtpv1uRcT
nwGtpv1uSetTimerMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uTimerMgrEntityT* pTmrMgrEntity)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
if(pTmrMgrEntity)
{
thiz->tmrMgr = *(pTmrMgrEntity);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
NwGtpv1uRcT
nwGtpv1uSetLogMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uLogMgrEntityT* pLogMgrEntity)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
if(pLogMgrEntity)
{
thiz->logMgr = *(pLogMgrEntity);
rc = NW_GTPV1U_OK;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
return rc;
}
NwGtpv1uRcT
nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU32T logLevel)
{
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
thiz->logLevel = logLevel;
return NW_GTPV1U_OK;
}
/*---------------------------------------------------------------------------
* Process Request from Udp Layer
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU8T* udpData,
NW_IN NwU32T udpDataLen,
NW_IN NwU16T peerPort,
NW_IN NwU32T peerIp)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz;
NwU16T msgType;
rc = NW_GTPV1U_FAILURE;
thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
NW_ASSERT(thiz);
msgType = *((NwU8T*)(udpData + 1));
switch(msgType)
{
case NW_GTP_ECHO_REQ:
rc = nwGtpv1uHandleEchoReq( thiz, udpData, udpDataLen, peerPort, peerIp);
break;
case NW_GTP_ERROR_INDICATION:
rc = nwGtpv1uSendUlpMessageIndication( thiz,
0,
NW_GTPV1U_ULP_API_RECV_MSG,
msgType,
peerIp,
peerPort,
udpData,
udpDataLen);
NW_ASSERT(rc == NW_GTPV1U_OK);
break;
case NW_GTP_ECHO_RSP:
rc = NW_GTPV1U_OK;
break;
case NW_GTP_GPDU:
rc = nwGtpv1uProcessGpdu(thiz, udpData, udpDataLen, peerIp);
break;
default:
NW_ASSERT(0);
break;
}
NW_LEAVE(thiz);
return rc;
}
/*---------------------------------------------------------------------------
* Process Request from Upper Layer
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uProcessUlpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uUlpApiT *pUlpReq)
{
NwGtpv1uRcT rc = NW_GTPV1U_FAILURE;
NwGtpv1uStackT* thiz = (NwGtpv1uStackT*) hGtpuStackHandle;
NW_ASSERT(thiz);
NW_ASSERT(pUlpReq != NULL);
NW_ENTER(thiz);
switch(pUlpReq->apiType)
{
case NW_GTPV1U_ULP_API_CREATE_TUNNEL_ENDPOINT:
{
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received create session req from ulp");
rc = NwGtpv1uCreateTunnelEndPoint(thiz,
pUlpReq->apiInfo.createTunnelEndPointInfo.teid,
pUlpReq->apiInfo.createTunnelEndPointInfo.hUlpSession,
&(pUlpReq->apiInfo.createTunnelEndPointInfo.hStackSession));
}
break;
case NW_GTPV1U_ULP_API_DESTROY_TUNNEL_ENDPOINT:
{
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received destroy session req from ulp");
rc = nwGtpv1uDestroyTunnelEndPoint(thiz, pUlpReq);
}
break;
case NW_GTPV1U_ULP_API_INITIAL_REQ:
{
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received initial req from ulp");
rc = nwGtpv1uInitialReq(thiz, pUlpReq);
}
break;
case NW_GTPV1U_ULP_API_SEND_TPDU:
{
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received send tpdu req from ulp");
rc = nwGtpv1uSendto(thiz, pUlpReq);
}
break;
default:
NW_LOG(thiz, NW_LOG_LEVEL_ERRO, "Unsupported API received from ulp");
rc = NW_GTPV1U_FAILURE;
break;
}
NW_LEAVE(thiz);
return rc;
}
/*---------------------------------------------------------------------------
* Process Timer timeout Request from Timer Manager
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwGtpv1uProcessTimeout(void* timeoutInfo)
{
NwGtpv1uRcT rc;
NwGtpv1uStackT* thiz;
NW_ASSERT(timeoutInfo != NULL);
thiz = (NwGtpv1uStackT*) (((NwGtpv1uTimeoutInfoT*) timeoutInfo)->hStack);
NW_ASSERT(thiz != NULL);
NW_ENTER(thiz);
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Received timeout event from ULP with timeoutInfo %x!", (unsigned int)timeoutInfo);
rc = (((NwGtpv1uTimeoutInfoT*) timeoutInfo)->timeoutCallbackFunc) (timeoutInfo);
NW_LEAVE(thiz);
return rc;
}
#ifdef __cplusplus
}
#endif
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,487 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 <stdio.h>
#include <string.h>
#include <ctype.h>
#include "NwTypes.h"
#include "NwLog.h"
#include "NwUtils.h"
#include "NwGtpv1uLog.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uPrivate.h"
#include "NwGtpv1uMsg.h"
#define NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE (12) /**< Size of GTPv1u EPC specific header */
#ifdef __cplusplus
extern "C" {
#endif
static NwGtpv1uMsgT* gpGtpv1uMsgPool = NULL;
NwGtpv1uRcT
nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU8T seqNumFlag,
NW_IN NwU8T npduNumFlag,
NW_IN NwU8T extHdrFlag,
NW_IN NwU8T msgType,
NW_IN NwU8T teid,
NW_IN NwU16T seqNum,
NW_IN NwU8T npduNum,
NW_IN NwU8T nextExtHeader,
NW_OUT NwGtpv1uMsgHandleT *phMsg)
{
NwGtpv1uStackT* pStack = (NwGtpv1uStackT*) hGtpuStackHandle;
NwGtpv1uMsgT *pMsg;
if(gpGtpv1uMsgPool)
{
pMsg = gpGtpv1uMsgPool;
gpGtpv1uMsgPool = gpGtpv1uMsgPool->next;
}
else
{
NW_GTPV1U_MALLOC(pStack, sizeof(NwGtpv1uMsgT), pMsg, NwGtpv1uMsgT*);
}
if(pMsg)
{
pMsg->version = NW_GTPU_VERSION;
pMsg->protocolType = NW_GTP_PROTOCOL_TYPE_GTP;
pMsg->seqNumFlag = seqNumFlag;
pMsg->npduNumFlag = npduNumFlag;
pMsg->extHdrFlag = extHdrFlag;
pMsg->msgType = msgType;
if(seqNumFlag)
pMsg->seqNum = seqNum;
if(npduNumFlag)
pMsg->npduNum = npduNum;
if(extHdrFlag)
pMsg->nextExtHdrType = nextExtHeader;
pMsg->msgLen = ((pMsg->seqNumFlag || pMsg->npduNumFlag || pMsg->extHdrFlag) ?
NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE : (NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE - 4));
*phMsg = (NwGtpv1uMsgHandleT) pMsg;
return NW_GTPV1U_OK;
}
return NW_GTPV1U_FAILURE;
}
NwGtpv1uRcT
nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU32T teid,
NW_IN NwU8T seqNumFlag,
NW_IN NwU16T seqNum,
NW_IN NwU8T* tpdu,
NW_IN NwU16T tpduLength,
NW_OUT NwGtpv1uMsgHandleT *phMsg)
{
NwGtpv1uStackT* pStack = (NwGtpv1uStackT*) hGtpuStackHandle;
NwGtpv1uMsgT *pMsg;
if(gpGtpv1uMsgPool)
{
pMsg = gpGtpv1uMsgPool;
gpGtpv1uMsgPool = gpGtpv1uMsgPool->next;
}
else
{
NW_GTPV1U_MALLOC(pStack, sizeof(NwGtpv1uMsgT), pMsg, NwGtpv1uMsgT*);
}
if(pMsg)
{
pMsg->version = NW_GTPU_VERSION;
pMsg->protocolType = NW_GTP_PROTOCOL_TYPE_GTP;
pMsg->extHdrFlag = NW_FALSE;
pMsg->seqNumFlag = (seqNumFlag? NW_TRUE : NW_FALSE);
pMsg->npduNumFlag = NW_FALSE;
pMsg->msgType = NW_GTP_GPDU;
pMsg->teid = teid;
pMsg->seqNum = seqNum;
pMsg->npduNum = 0x00;
pMsg->nextExtHdrType= 0x00;
pMsg->msgLen = ((pMsg->seqNumFlag || pMsg->npduNumFlag || pMsg->extHdrFlag ) ?
NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE : (NW_GTPV1U_EPC_SPECIFIC_HEADER_SIZE - 4));
memcpy(pMsg->msgBuf + pMsg->msgLen, tpdu, tpduLength);
pMsg->msgLen += tpduLength;
*phMsg = (NwGtpv1uMsgHandleT) pMsg;
return NW_GTPV1U_OK;
}
return NW_GTPV1U_FAILURE;
}
NwGtpv1uRcT
nwGtpv1uMsgFromMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uMsgHandleT hMsg,
NW_OUT NwGtpv1uMsgHandleT *phMsg)
{
NwGtpv1uStackT* pStack = (NwGtpv1uStackT*) hGtpuStackHandle;
NwGtpv1uMsgT *pMsg;
if(gpGtpv1uMsgPool)
{
pMsg = gpGtpv1uMsgPool;
gpGtpv1uMsgPool = gpGtpv1uMsgPool->next;
}
else
{
NW_GTPV1U_MALLOC(pStack, sizeof(NwGtpv1uMsgT), pMsg, NwGtpv1uMsgT*);
}
if(pMsg)
{
memcpy(pMsg, (NwGtpv1uMsgT*)hMsg, sizeof(NwGtpv1uMsgT));
*phMsg = (NwGtpv1uMsgHandleT) pMsg;
return NW_GTPV1U_OK;
}
return NW_GTPV1U_FAILURE;
}
NwGtpv1uRcT
nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwU8T* pBuf,
NW_IN NwU32T bufLen,
NW_OUT NwGtpv1uMsgHandleT *phMsg)
{
NwGtpv1uStackT* pStack = (NwGtpv1uStackT*) hGtpuStackHandle;
NwGtpv1uMsgT *pMsg;
if(gpGtpv1uMsgPool)
{
pMsg = gpGtpv1uMsgPool;
gpGtpv1uMsgPool = gpGtpv1uMsgPool->next;
}
else
{
NW_GTPV1U_MALLOC(pStack, sizeof(NwGtpv1uMsgT), pMsg, NwGtpv1uMsgT*);
}
if(pMsg)
{
memcpy(pMsg->msgBuf, pBuf, bufLen);
pMsg->msgLen = bufLen;
pMsg->version = ((*pBuf) & 0xE0) >> 5;
pMsg->protocolType = ((*pBuf) & 0x10) >> 4;
pMsg->extHdrFlag = ((*pBuf) & 0x04) >> 2;
pMsg->seqNumFlag = ((*pBuf) & 0x02) >> 1;
pMsg->npduNumFlag = ((*pBuf) & 0x01);
pBuf++;
pMsg->msgType = *(pBuf);
pBuf++;
pBuf += 2;
pMsg->teid = ntohl(*((NwU32T*)pBuf));
pBuf += 4;
if(pMsg->extHdrFlag || pMsg->seqNumFlag || pMsg->npduNumFlag)
{
pMsg->seqNum = ntohs(*(((NwU16T*)pBuf)));
pBuf += 2;
pMsg->npduNum = *(pBuf++);
pMsg->nextExtHdrType = *(pBuf++);
}
*phMsg = (NwGtpv1uMsgHandleT) pMsg;
return NW_GTPV1U_OK;
}
return NW_GTPV1U_FAILURE;
}
NwGtpv1uRcT
nwGtpv1uMsgDelete( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
NW_IN NwGtpv1uMsgHandleT hMsg)
{
((NwGtpv1uMsgT*)hMsg)->next = gpGtpv1uMsgPool;
gpGtpv1uMsgPool = (NwGtpv1uMsgT*) hMsg;
return NW_GTPV1U_OK;
}
/**
* Set TEID for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[in] teid: TEID value.
*/
NwGtpv1uRcT
nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T teid)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
thiz->teid = teid;
return NW_GTPV1U_OK;
}
/**
* Set sequence for gtpv1u message.
*
* @param[in] hMsg : Message handle.
* @param[in] seqNum: Flag boolean value.
*/
NwGtpv1uRcT
nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
thiz->seqNum = seqNum;
return NW_GTPV1U_OK;
}
/**
* Get TEID present for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwU32T
nwGtpv1uMsgGetTeid(NW_IN NwGtpv1uMsgHandleT hMsg)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
return (thiz->teid);
}
/**
* Get sequence number for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwU32T
nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
return (thiz->seqNum);
}
/**
* Get msg type for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwU32T
nwGtpv1uMsgGetMsgType(NW_IN NwGtpv1uMsgHandleT hMsg)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
return (thiz->msgType);
}
/**
* Get tpdu for gtpv1u message.
*
* @param[in] hMsg : Message handle.
*/
NwGtpv1uRcT
nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, NwU8T* pTpduBuf, NwU32T* pTpduLength)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
NwU8T headerLength = ((thiz->seqNumFlag || thiz->extHdrFlag || thiz->npduNumFlag) ? 12 : 8);
*pTpduLength = thiz->msgLen - headerLength;
memcpy(pTpduBuf, thiz->msgBuf + headerLength, *pTpduLength);
return NW_GTPV1U_OK;
}
NwU8T*
nwGtpv1uMsgGetTpduHandle(NW_IN NwGtpv1uMsgHandleT hMsg)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
return (thiz->msgBuf + ((thiz->seqNumFlag || thiz->extHdrFlag || thiz->npduNumFlag) ? 12 : 8));
}
NwU32T
nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg)
{
NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT*) hMsg;
return (thiz->msgLen - ((thiz->seqNumFlag || thiz->extHdrFlag || thiz->npduNumFlag) ? 12 : 8));
}
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU8T value)
{
NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT*) hMsg;
NwGtpv1uIeTv1T *pIe;
pIe = (NwGtpv1uIeTv1T*) (pMsg->msgBuf + pMsg->msgLen);
pIe->t = type;
pIe->v = value;
pMsg->msgLen += sizeof(NwGtpv1uIeTv1T);
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU16T value)
{
NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT*) hMsg;
NwGtpv1uIeTv2T *pIe;
pIe = (NwGtpv1uIeTv2T*) (pMsg->msgBuf + pMsg->msgLen);
pIe->t = type;
pIe->v = htons(value);
pMsg->msgLen += sizeof(NwGtpv1uIeTv2T);
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU32T value)
{
NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT*) hMsg;
NwGtpv1uIeTv4T *pIe;
pIe = (NwGtpv1uIeTv4T*) (pMsg->msgBuf + pMsg->msgLen);
pIe->t = type;
pIe->v = htonl(value);
pMsg->msgLen += sizeof(NwGtpv1uIeTv4T);
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwGtpv1uMsgAddIe(NW_IN NwGtpv1uMsgHandleT hMsg,
NW_IN NwU8T type,
NW_IN NwU16T length,
NW_IN NwU8T* pVal)
{
NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT*) hMsg;
NwGtpv1uIeTlvT *pIe;
pIe = (NwGtpv1uIeTlvT*) (pMsg->msgBuf + pMsg->msgLen);
pIe->t = type;
pIe->l = htons(length);
memcpy(pIe + 4, pVal, length);
pMsg->msgLen += (4 + length);
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwGtpv1uMsgHexDump(NwGtpv1uMsgHandleT hMsg, FILE* fp)
{
NwGtpv1uMsgT* pMsg = (NwGtpv1uMsgT*) hMsg;
NwU8T* data = pMsg->msgBuf;
NwU32T 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), "%.4x",
((unsigned int)p-(unsigned int)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_GTPV1U_OK;
}
#ifdef __cplusplus
}
#endif
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,411 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 <stdio.h>
#include <string.h>
#include <ctype.h>
#include "NwTypes.h"
#include "NwLog.h"
#include "NwUtils.h"
#include "NwGtpv1uLog.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uPrivate.h"
#include "NwGtpv1uTrxn.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 NwGtpv1uTrxnT* gpGtpv1uTrxnPool = 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 NwGtpv1uRcT
nwGtpv1uTrxnSendMsgRetransmission(NwGtpv1uTrxnT* thiz)
{
NwGtpv1uRcT 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);
return rc;
}
static NwGtpv1uRcT
nwGtpv1uTrxnPeerRspTimeout(void* arg)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTrxnT* thiz;
NwGtpv1uStackT* pStack;
NwGtpv1uTimeoutInfoT *timeoutInfo = arg;
thiz = ((NwGtpv1uTrxnT*)timeoutInfo->timeoutArg);
pStack = thiz->pStack;
NW_ASSERT(pStack);
NW_LOG(pStack, NW_LOG_LEVEL_WARN, "T3 timer expired for transaction 0x%x", (unsigned int)thiz);
rc = nwGtpv1uTrxnSendMsgRetransmission(thiz);
if(thiz->maxRetries)
{
rc = pStack->tmrMgr.tmrStartCallback(pStack->tmrMgr.tmrMgrHandle, thiz->t3Timer, 0, NW_GTPV1U_TMR_TYPE_ONE_SHOT, (void*)timeoutInfo, &thiz->hRspTmr);
thiz->maxRetries--;
}
else
{
NwGtpv1uUlpApiT ulpApi;
ulpApi.apiType = NW_GTPV1U_ULP_API_RSP_FAILURE;
ulpApi.apiInfo.recvMsgInfo.msgType = nwGtpv1uMsgGetMsgType((NwGtpv1uMsgHandleT)thiz->pMsg);
ulpApi.apiInfo.recvMsgInfo.hUlpTrxn = thiz->hUlpTrxn;
ulpApi.apiInfo.recvMsgInfo.peerIp = thiz->peerIp;
ulpApi.apiInfo.recvMsgInfo.peerPort = thiz->peerPort;
thiz->hRspTmr = 0;
rc = nwGtpv1uTrxnDelete(&thiz);
NW_ASSERT(rc == NW_GTPV1U_OK);
rc = pStack->ulp.ulpReqCallback(pStack->ulp.hUlp, &ulpApi);
NW_ASSERT(rc == NW_GTPV1U_OK);
}
return rc;
}
/**
Send timer start request to TmrMgr Entity.
@param[in] thiz : Pointer to transaction
@param[in] timeoutCallbackFunc : Timeout handler callback function.
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uTrxnStartPeerRspTimer(NwGtpv1uTrxnT* thiz, NwGtpv1uRcT (*timeoutCallbackFunc)(void*))
{
NwGtpv1uRcT rc;
NwGtpv1uTimeoutInfoT *timeoutInfo;
NW_ASSERT(thiz->pStack->tmrMgr.tmrStartCallback != NULL);
timeoutInfo = &thiz->peerRspTimeoutInfo;
timeoutInfo->timeoutArg = thiz;
timeoutInfo->timeoutCallbackFunc = timeoutCallbackFunc;
timeoutInfo->hStack = (NwGtpv1uStackHandleT)thiz->pStack;
rc = thiz->pStack->tmrMgr.tmrStartCallback(thiz->pStack->tmrMgr.tmrMgrHandle, thiz->t3Timer, 0, NW_GTPV1U_TMR_TYPE_ONE_SHOT, (void*)timeoutInfo, &thiz->hRspTmr);
return rc;
}
/**
Send timer stop request to TmrMgr Entity.
@param[in] thiz : Pointer to transaction
@return NW_GTPV1U_OK on success.
*/
static NwGtpv1uRcT
nwGtpv1uTrxnStopPeerRspTimer(NwGtpv1uTrxnT* thiz)
{
NwGtpv1uRcT rc;
NW_ASSERT(thiz->pStack->tmrMgr.tmrStopCallback != NULL);
rc = thiz->pStack->tmrMgr.tmrStopCallback(thiz->pStack->tmrMgr.tmrMgrHandle, 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_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uTrxnNew( NW_IN NwGtpv1uStackT* thiz,
NW_OUT NwGtpv1uTrxnT **ppTrxn)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTrxnT *pTrxn;
if(gpGtpv1uTrxnPool)
{
pTrxn = gpGtpv1uTrxnPool;
gpGtpv1uTrxnPool = gpGtpv1uTrxnPool->next;
}
else
{
NW_GTPV1U_MALLOC(thiz, sizeof(NwGtpv1uTrxnT), pTrxn, NwGtpv1uTrxnT*);
}
if (pTrxn)
{
pTrxn->maxRetries = 2;
pTrxn->pStack = thiz;
pTrxn->t3Timer = 2;
pTrxn->seqNum = thiz->seq;
/* Increment sequence number */
thiz->seq++;
if(thiz->seq == 0x800000)
thiz->seq = 0;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Created transaction 0x%X", (unsigned int)pTrxn);
*ppTrxn = pTrxn;
return rc;
}
/**
* Overloaded Constructor
*
* @param[in] thiz : Pointer to stack.
* @param[in] seqNum : Sequence number for this transaction.
* @param[out] ppTrxn : Pointer to pointer to Trxn object.
* @return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uTrxnWithSeqNew( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwU32T seqNum,
NW_OUT NwGtpv1uTrxnT **ppTrxn)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uTrxnT *pTrxn;
if(gpGtpv1uTrxnPool)
{
pTrxn = gpGtpv1uTrxnPool;
gpGtpv1uTrxnPool = gpGtpv1uTrxnPool->next;
}
else
{
NW_GTPV1U_MALLOC(thiz, sizeof(NwGtpv1uTrxnT), pTrxn, NwGtpv1uTrxnT*);
}
if (pTrxn)
{
pTrxn->maxRetries = 2;
pTrxn->pStack = thiz;
pTrxn->t3Timer = 2;
pTrxn->seqNum = seqNum;
pTrxn->pMsg = NULL;
}
else
{
rc = NW_GTPV1U_FAILURE;
}
NW_LOG(thiz, NW_LOG_LEVEL_DEBG, "Created transaction 0x%X", (unsigned int)pTrxn);
*ppTrxn = pTrxn;
return rc;
}
/**
* Destructor
*
* @param[out] pthiz : Pointer to pointer to Trxn object.
* @return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uTrxnDelete( NW_INOUT NwGtpv1uTrxnT **pthiz)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uStackT* pStack;
NwGtpv1uTrxnT *thiz = *pthiz;
pStack = thiz->pStack;
if(thiz->hRspTmr)
{
rc = nwGtpv1uTrxnStopPeerRspTimer(thiz);
NW_ASSERT(rc == NW_GTPV1U_OK);
}
if(thiz->pMsg)
{
rc = nwGtpv1uMsgDelete((NwGtpv1uStackHandleT)pStack, (NwGtpv1uMsgHandleT)thiz->pMsg);
NW_ASSERT(rc == NW_GTPV1U_OK);
}
thiz->next = gpGtpv1uTrxnPool;
gpGtpv1uTrxnPool = thiz;
NW_LOG(pStack, NW_LOG_LEVEL_DEBG, "Purged transaction 0x%X", (unsigned int)thiz);
*pthiz = NULL;
return rc;
}
#if 1
/**
* Send msg to peer via data request to UDP Entity
*
* @param[in] thiz : Pointer to stack.
* @param[in] pTrxn : Pointer to Trxn object.
* @param[in] peerIp : Peer Ip address.
* @param[in] peerPort : Peer Ip port.
* @param[in] pMsg : Message to be sent.
* @return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpv1uTrxnCreateAndSendMsg( NW_IN NwGtpv1uStackT* thiz,
NW_IN NwGtpv1uTrxnT *pTrxn,
NW_IN NwU32T peerIp,
NW_IN NwU32T peerPort,
NW_IN NwGtpv1uMsgT *pMsg)
{
NwGtpv1uRcT rc;
NwU8T* msgHdr;
NW_ASSERT(thiz);
NW_ASSERT(pMsg);
msgHdr = pMsg->msgBuf;
NW_ASSERT(msgHdr != NULL);
*(msgHdr++) = (pMsg->version << 5) |
(pMsg->protocolType << 4) |
(pMsg->extHdrFlag << 2) |
(pMsg->seqNumFlag << 1) |
(pMsg->npduNumFlag);
*(msgHdr++) = (pMsg->msgType);
*((NwU16T*) msgHdr) = htons(pMsg->msgLen);
msgHdr += 2;
*((NwU32T*) msgHdr) = htonl(pMsg->teid);
msgHdr += 4;
if(pMsg->seqNumFlag | pMsg->extHdrFlag | pMsg->npduNumFlag)
{
if(pMsg->seqNumFlag)
{
*((NwU16T*) msgHdr) = htons((pTrxn ? pTrxn->seqNum : pMsg->seqNum));
}
else
{
*((NwU16T*) msgHdr) = 0x0000;
}
msgHdr += 2;
if(pMsg->npduNumFlag)
{
*((NwU8T*) msgHdr) = pMsg->npduNumFlag;
}
else
{
*((NwU8T*) msgHdr) = 0x00;
}
msgHdr++;
if(pMsg->extHdrFlag)
{
*((NwU8T*) msgHdr) = pMsg->extHdrFlag;
}
else
{
*((NwU8T*) msgHdr) = 0x00;
}
msgHdr++;
}
NW_ASSERT(thiz->udp.udpDataReqCallback != NULL);
rc = thiz->udp.udpDataReqCallback(thiz->udp.hUdp,
pMsg->msgBuf,
pMsg->msgLen,
peerIp,
peerPort);
/* Save the message for retransmission */
if(rc == NW_GTPV1U_OK && pTrxn)
{
pTrxn->pMsg = pMsg;
pTrxn->peerIp = peerIp;
pTrxn->peerPort = peerPort;
rc = nwGtpv1uTrxnStartPeerRspTimer(pTrxn, nwGtpv1uTrxnPeerRspTimeout);
NW_ASSERT(rc == NW_GTPV1U_OK);
}
return rc;
}
#endif
#ifdef __cplusplus
}
#endif
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,136 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "NwTypes.h"
#include "NwUtils.h"
#include "NwGtpv1uError.h"
#include "NwGtpv1uPrivate.h"
#include "NwGtpv1uMsg.h"
#include "NwGtpv1uTunnelEndPoint.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uLog.h"
#ifdef __cplusplus
extern "C" {
#endif
/*--------------------------------------------------------------------------*
* P R I V A T E D E C L A R A T I O N S *
*--------------------------------------------------------------------------*/
static NwGtpv1uTunnelEndPointT *gpTunnelEndPointPool = NULL;
/*--------------------------------------------------------------------------*
* P U B L I C F U N C T I O N S *
*--------------------------------------------------------------------------*/
/**
Constructor
@param[in] msid: MSID
@param[in] peerAddr: Address of the peer.
@return Pointer to Session on success, NULL on failure.
*/
NwGtpv1uTunnelEndPointT*
nwGtpTunnelEndPointNew(struct NwGtpv1uStack *pStack)
{
NwGtpv1uTunnelEndPointT* thiz;
if(gpTunnelEndPointPool)
{
thiz = gpTunnelEndPointPool;
gpTunnelEndPointPool = gpTunnelEndPointPool->next;
}
else
{
NW_GTPV1U_MALLOC(pStack, sizeof(NwGtpv1uTunnelEndPointT), thiz, NwGtpv1uTunnelEndPointT*);
}
return thiz;
}
/**
Destructor
@param[in] thiz: Pointer to session
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpTunnelEndPointDestroy(struct NwGtpv1uStack *pStack, NwGtpv1uTunnelEndPointT* thiz)
{
thiz->next = gpTunnelEndPointPool;
gpTunnelEndPointPool = thiz;
return NW_GTPV1U_OK;
}
/**
Purge a Transaction for a Session.
@param[in] thiz: Pointer to session
@param[in,out] pTrxn: Pointer to the trxn.
@return NW_GTPV1U_OK on success.
*/
NwGtpv1uRcT
nwGtpSessionSendMsgApiToUlpEntity(NwGtpv1uTunnelEndPointT* thiz,
NwGtpv1uMsgT *pMsg)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwGtpv1uUlpApiT api;
api.apiType = NW_GTPV1U_ULP_API_RECV_TPDU;
api.apiInfo.recvMsgInfo.hUlpSession = thiz->hUlpSession;
api.apiInfo.recvMsgInfo.teid = thiz->teid;
api.apiInfo.recvMsgInfo.hMsg = (NwGtpv1uMsgHandleT)pMsg;
NW_ASSERT(thiz->pStack->ulp.ulpReqCallback != NULL);
thiz->pStack->ulp.ulpReqCallback(thiz->pStack->ulp.hUlp, &api);
return rc;
}
#ifdef __cplusplus
}
#endif
/*--------------------------------------------------------------------------*
* E N D O F F I L E *
*--------------------------------------------------------------------------*/
@@ -1,5 +0,0 @@
# this is example-file: Makefile.am
# the subdirectories of the project to go into
SUBDIRS = \
nw-helloworld
@@ -1,461 +0,0 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# this is example-file: Makefile.am
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = nw-gtpv1u/test-app
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_LDFLAGS = @AM_LDFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
# the subdirectories of the project to go into
SUBDIRS = \
nw-helloworld
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu nw-gtpv1u/test-app/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu nw-gtpv1u/test-app/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic ctags \
ctags-recursive distclean distclean-generic distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,17 +0,0 @@
bin_PROGRAMS = helloworld
AM_CFLAGS = -D__WITH_LIBEVENT__ -I../../shared -I../../include -I../../test-app/nw-udp -I../../test-app/nw-log @AM_CFLAGS@
helloworld_SOURCES = \
NwEvt.h\
NwMiniLogMgrEntity.h\
NwMiniTmrMgrEntity.h\
NwMiniUlpEntity.h\
NwMiniUdpEntity.h\
NwMiniLogMgrEntity.c\
NwMiniTmrMgrEntity.c\
NwMiniUlpEntity.c\
NwMiniUdpEntity.c\
helloworld.c
helloworld_LDADD = ../../src/libNwGtpv1u.a -levent $(AM_LDFLAGS)
@@ -1,433 +0,0 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
bin_PROGRAMS = helloworld$(EXEEXT)
subdir = nw-gtpv1u/test-app/nw-helloworld
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_helloworld_OBJECTS = NwMiniLogMgrEntity.$(OBJEXT) \
NwMiniTmrMgrEntity.$(OBJEXT) NwMiniUlpEntity.$(OBJEXT) \
NwMiniUdpEntity.$(OBJEXT) helloworld.$(OBJEXT)
helloworld_OBJECTS = $(am_helloworld_OBJECTS)
am__DEPENDENCIES_1 =
helloworld_DEPENDENCIES = ../../src/libNwGtpv1u.a \
$(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(helloworld_SOURCES)
DIST_SOURCES = $(helloworld_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = -D__WITH_LIBEVENT__ -I../../shared -I../../include -I../../test-app/nw-udp -I../../test-app/nw-log @AM_CFLAGS@
AM_LDFLAGS = @AM_LDFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
helloworld_SOURCES = \
NwEvt.h\
NwMiniLogMgrEntity.h\
NwMiniTmrMgrEntity.h\
NwMiniUlpEntity.h\
NwMiniUdpEntity.h\
NwMiniLogMgrEntity.c\
NwMiniTmrMgrEntity.c\
NwMiniUlpEntity.c\
NwMiniUdpEntity.c\
helloworld.c
helloworld_LDADD = ../../src/libNwGtpv1u.a -levent $(AM_LDFLAGS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu nw-gtpv1u/test-app/nw-helloworld/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu nw-gtpv1u/test-app/nw-helloworld/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
helloworld$(EXEEXT): $(helloworld_OBJECTS) $(helloworld_DEPENDENCIES)
@rm -f helloworld$(EXEEXT)
$(LINK) $(helloworld_OBJECTS) $(helloworld_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwMiniLogMgrEntity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwMiniTmrMgrEntity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwMiniUdpEntity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NwMiniUlpEntity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helloworld.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,81 +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 <event.h>
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__ */
@@ -1,58 +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 <stdio.h>
#include <assert.h>
#include "NwLog.h"
#include "NwEvt.h"
#include "NwGtpv1u.h"
#include "NwMiniLogMgrEntity.h"
#ifdef __cplusplus
extern "C" {
#endif
NwU32T g_log_level = NW_LOG_LEVEL_INFO;
/*---------------------------------------------------------------------------
* Public functions
*--------------------------------------------------------------------------*/
NwGtpv1uRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, NwU32T logLevel )
{
thiz->logLevel = logLevel;
return NW_GTPV1U_OK;
}
NwGtpv1uRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel)
{
thiz->logLevel = logLevel;
}
NwGtpv1uRcT nwMiniLogMgrLogRequest (NwGtpv1uLogMgrHandleT hLogMgr,
NwU32T logLevel,
NwCharT* file,
NwU32T line,
NwCharT* logStr)
{
NwMiniLogMgrT* thiz = (NwMiniLogMgrT*) hLogMgr;
if(thiz->logLevel >= logLevel)
printf("NWGTPv2U-STK %s - %s <%s,%u>\n", gLogLevelStr[logLevel], logStr, basename(file), line);
return NW_GTPV1U_OK;
}
#ifdef __cplusplus
}
#endif
@@ -1,58 +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 <stdio.h>
#include <assert.h>
#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__
extern NwU32T g_log_level;
#define NW_LOG( _logLevel, ...) \
do { \
if(g_log_level >= _logLevel) \
{ \
char _logStr[1024]; \
snprintf(_logStr, 1024, __VA_ARGS__); \
printf("NWGTPv2U-APP %s - %s <%s,%u>\n", gLogLevelStr[_logLevel], _logStr, basename(__FILE__), __LINE__);\
} \
} while(0)
typedef struct
{
NwU8T logLevel;
} NwMiniLogMgrT;
#ifdef __cplusplus
extern "C" {
#endif
NwGtpv1uRcT nwMiniLogMgrLogRequest (NwGtpv1uLogMgrHandleT logMgrHandle,
NwU32T logLevel,
NwCharT* file,
NwU32T line,
NwCharT* logStr);
#ifdef __cplusplus
}
#endif
#endif
@@ -1,98 +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 <stdio.h>
#include <assert.h>
#include "NwEvt.h"
#include "NwGtpv1u.h"
#include "NwMiniLogMgrEntity.h"
#include "NwMiniTmrMgrEntity.h"
#ifndef NW_ASSERT
#define NW_ASSERT assert
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------
* Private functions
*--------------------------------------------------------------------------*/
static void
NW_TMR_CALLBACK(nwMiniTmrMgrHandleTimeout)
{
NwGtpv1uRcT rc;
NwMiniTmrMgrEntityT *pTmr = (NwMiniTmrMgrEntityT*) arg;
/*---------------------------------------------------------------------------
* Send Timeout Request to GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
rc = nwGtpv1uProcessTimeout(pTmr->timeoutArg);
NW_ASSERT( rc == NW_GTPV1U_OK );
free(pTmr);
return;
}
/*---------------------------------------------------------------------------
* Public functions
*--------------------------------------------------------------------------*/
NwGtpv1uRcT nwTimerStart( NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwU32T timeoutSec,
NwU32T timeoutUsec,
NwU32T tmrType,
void* timeoutArg,
NwGtpv1uTimerHandleT* hTmr)
{
NwGtpv1uRcT rc = NW_GTPV1U_OK;
NwMiniTmrMgrEntityT *pTmr;
struct timeval tv;
NW_LOG(NW_LOG_LEVEL_INFO, "Received start timer request from stack with timer type %u, arg %x, for %u sec and %u usec", tmrType, timeoutArg, timeoutSec, timeoutUsec);
pTmr = (NwMiniTmrMgrEntityT*) malloc (sizeof(NwMiniTmrMgrEntityT));
/* set the timevalues*/
timerclear(&tv);
tv.tv_sec = timeoutSec;
tv.tv_usec = timeoutUsec;
pTmr->timeoutArg = timeoutArg;
evtimer_set(&pTmr->ev, nwMiniTmrMgrHandleTimeout, pTmr);
/*add event*/
event_add(&(pTmr->ev), &tv);
*hTmr = (NwGtpv1uTimerHandleT)pTmr;
return rc;
}
NwGtpv1uRcT nwTimerStop( NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwGtpv1uTimerHandleT hTmr)
{
NW_LOG(NW_LOG_LEVEL_INFO, "Received stop timer request from stack for timer handle %u", hTmr);
evtimer_del(&(((NwMiniTmrMgrEntityT*)hTmr)->ev));
free((void*)hTmr);
return NW_GTPV1U_OK;
}
#ifdef __cplusplus
}
#endif
@@ -1,54 +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 <stdio.h>
#include <assert.h>
#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
{
NwEventT ev;
void* timeoutArg;
} NwMiniTmrMgrEntityT;
#ifdef __cplusplus
extern "C" {
#endif
NwGtpv1uRcT nwTimerStart( NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwU32T timeoutSec,
NwU32T timeoutUsec,
NwU32T tmrType,
void* timeoutArg,
NwGtpv1uTimerHandleT* hTmr);
NwGtpv1uRcT nwTimerStop( NwGtpv1uTimerMgrHandleT tmrMgrHandle,
NwGtpv1uTimerHandleT hTmr);
#ifdef __cplusplus
}
#endif
#endif
@@ -1,155 +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 <stdio.h>
#include <string.h>
#include <assert.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include "NwEvt.h"
#include "NwGtpv1u.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
/*---------------------------------------------------------------------------
* Private functions
*--------------------------------------------------------------------------*/
static
void NW_TMR_CALLBACK(nwUdpDataIndicationCallbackData)
{
NwGtpv1uRcT rc;
NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN];
NwS32T bytesRead;
NwU32T peerLen;
struct sockaddr_in peer;
NwMiniUdpEntityT* thiz = (NwMiniUdpEntityT*) arg;
peerLen = sizeof(peer);
bytesRead = recvfrom(thiz->hSocket, udpBuf, MAX_UDP_PAYLOAD_LEN , 0, (struct sockaddr *) &peer,(socklen_t*) &peerLen);
if(bytesRead)
{
NW_LOG(NW_LOG_LEVEL_DEBG, "Received UDP message of length %u from %X:%u", bytesRead, ntohl(peer.sin_addr.s_addr), ntohs(peer.sin_port));
rc = nwGtpv1uProcessUdpReq(thiz->hGtpv1uStack, udpBuf, bytesRead, peer.sin_port, peer.sin_addr.s_addr);
}
else
{
NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno));
}
}
/*---------------------------------------------------------------------------
* Public functions
*--------------------------------------------------------------------------*/
NwGtpv1uRcT nwMiniUdpInit(NwMiniUdpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack, NwU8T* ipAddr)
{
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(2152);
addr.sin_addr.s_addr = inet_addr(ipAddr);
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);
}
event_set(&(thiz->ev), sd, EV_READ|EV_PERSIST, nwUdpDataIndicationCallbackData, thiz);
event_add(&(thiz->ev), NULL);
thiz->hSocket = sd;
thiz->hGtpv1uStack = hGtpv1uStack;
return NW_GTPV1U_OK;
}
NwGtpv1uRcT nwMiniUdpDestroy(NwMiniUdpEntityT* thiz)
{
close(thiz->hSocket);
}
NwGtpv1uRcT nwMiniUdpDataReq(NwGtpv1uUdpHandleT udpHandle,
NwU8T* dataBuf,
NwU32T dataSize,
NwU32T peerIpAddr,
NwU32T peerPort)
{
struct sockaddr_in peerAddr;
NwS32T bytesSent;
NwMiniUdpEntityT* thiz = (NwMiniUdpEntityT*) udpHandle;
peerAddr.sin_family = AF_INET;
peerAddr.sin_port = htons(peerPort);
peerAddr.sin_addr.s_addr = (peerIpAddr);
memset(peerAddr.sin_zero, '\0', sizeof (peerAddr.sin_zero));
NW_LOG(NW_LOG_LEVEL_DEBG, "Sending %u bytes on handle 0x%x to peer %u.%u.%u.%u:%u", dataSize, udpHandle,
(peerIpAddr & 0x000000ff),
(peerIpAddr & 0x0000ff00) >> 8,
(peerIpAddr & 0x00ff0000) >> 16,
(peerIpAddr & 0xff000000) >> 24,
peerPort);
bytesSent = sendto (thiz->hSocket, dataBuf, dataSize, 0, (struct sockaddr *) &peerAddr, sizeof(peerAddr));
if(bytesSent < 0)
{
NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno));
}
else
{
NW_LOG(NW_LOG_LEVEL_DEBG, "Sent %u bytes on handle 0x%x to peer %u.%u.%u.%u", dataSize, udpHandle,
(peerIpAddr & 0x000000ff),
(peerIpAddr & 0x0000ff00) >> 8,
(peerIpAddr & 0x00ff0000) >> 16,
(peerIpAddr & 0xff000000) >> 24);
}
return NW_GTPV1U_OK;
}
#ifdef __cplusplus
}
#endif
@@ -1,52 +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.h
* @brief This file contains example of a minimalistic ULP entity.
*/
#include <stdio.h>
#include <assert.h>
#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
{
NwU32T hSocket;
NwEventT ev;
NwGtpv1uStackHandleT hGtpv1uStack;
} NwMiniUdpEntityT;
#ifdef __cplusplus
extern "C" {
#endif
NwGtpv1uRcT nwMiniUdpInit(NwMiniUdpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack, NwU8T* ipAddr);
NwGtpv1uRcT nwMiniUdpDestroy(NwMiniUdpEntityT* thiz);
NwGtpv1uRcT nwMiniUdpDataReq(NwGtpv1uUdpHandleT udpHandle,
NwU8T* dataBuf,
NwU32T dataSize,
NwU32T peerAddr,
NwU32T peerPort);
#ifdef __cplusplus
}
#endif
#endif
@@ -1,304 +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 <stdio.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#include "NwEvt.h"
#include "NwGtpv1u.h"
#include "NwGtpv1uIe.h"
#include "NwMiniLogMgrEntity.h"
#include "NwMiniUlpEntity.h"
#ifndef NW_ASSERT
#define NW_ASSERT assert
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------
* Private Functions
*--------------------------------------------------------------------------*/
#define MAX_UDP_PAYLOAD_LEN (4096)
NwGtpv1uRcT
nwMiniUlpSendEchoRequestToPeer(NwMiniUlpEntityT* thiz, NwU32T peerIp)
{
NwGtpv1uRcT rc;
NwGtpv1uUlpApiT ulpReq;
/*
* Send Message Request to Gtpv1u Stack Instance
*/
ulpReq.apiType = NW_GTPV1U_ULP_API_INITIAL_REQ;
ulpReq.apiInfo.initialReqInfo.hUlpTrxn = (NwGtpv1uUlpTrxnHandleT)thiz;
ulpReq.apiInfo.initialReqInfo.teid = 0x00;
ulpReq.apiInfo.initialReqInfo.peerIp = (peerIp);
ulpReq.apiInfo.initialReqInfo.peerPort = 2152;
/* Send Echo Request*/
rc = nwGtpv1uMsgNew( thiz->hGtpv1uStack,
NW_TRUE, /* SeqNum flag */
NW_FALSE,
NW_FALSE,
NW_GTP_ECHO_REQ, /* Msg Type */
0x00000000UL, /* TEID */
0x5678, /* Seq Number */
0,
0,
(&ulpReq.hMsg));
NW_ASSERT( rc == NW_GTPV1U_OK );
rc = nwGtpv1uMsgAddIeTV1((ulpReq.hMsg), NW_GTPV1U_IE_RECOVERY, thiz->restartCounter);
NW_ASSERT( rc == NW_GTPV1U_OK );
rc = nwGtpv1uProcessUlpReq(thiz->hGtpv1uStack, &ulpReq);
NW_ASSERT( rc == NW_GTPV1U_OK );
return NW_GTPV1U_OK;
}
static
void NW_EVT_CALLBACK(nwMiniUlpDataIndicationCallbackData)
{
NwMiniUlpEntityT* thiz = (NwMiniUlpEntityT*) arg;
NwGtpv1uRcT rc;
NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN];
NwS32T bytesRead;
NwU32T peerLen;
struct sockaddr_in peer;
peerLen = sizeof(peer);
bytesRead = recvfrom(thiz->hSocket, udpBuf, MAX_UDP_PAYLOAD_LEN , 0, (struct sockaddr *) &peer,(socklen_t*) &peerLen);
if(bytesRead)
{
NW_LOG(NW_LOG_LEVEL_DEBG, "Received UDP message of length %u from %X:%u", bytesRead, ntohl(peer.sin_addr.s_addr), ntohs(peer.sin_port));
rc = nwMiniUlpTpduSend(thiz, udpBuf, bytesRead, thiz->localPort[fd]);
}
else
{
NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno));
}
}
/*---------------------------------------------------------------------------
* Public Functions
*--------------------------------------------------------------------------*/
NwGtpv1uRcT
nwMiniUlpInit(NwMiniUlpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack)
{
NwGtpv1uRcT rc;
thiz->hGtpv1uStack = hGtpv1uStack;
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwMiniUlpDestroy(NwMiniUlpEntityT* thiz)
{
NW_ASSERT(thiz);
memset(thiz, 0, sizeof(NwMiniUlpEntityT));
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwMiniUlpCreateConn(NwMiniUlpEntityT* thiz, char* localIpStr, NwU16T localport, char* peerIpStr)
{
NwGtpv1uRcT rc;
int sd;
struct sockaddr_in addr;
NwGtpv1uUlpApiT ulpReq;
strcpy(thiz->peerIpStr, peerIpStr);
/*
* Create local tunnel endpoint
*/
NW_LOG(NW_LOG_LEVEL_NOTI, "Creating tunnel endpoint with teid %d", localport);
ulpReq.apiType = NW_GTPV1U_ULP_API_CREATE_TUNNEL_ENDPOINT;
ulpReq.apiInfo.createTunnelEndPointInfo.teid = localport;
ulpReq.apiInfo.createTunnelEndPointInfo.hUlpSession = (NwGtpv1uUlpSessionHandleT)thiz;
rc = nwGtpv1uProcessUlpReq(thiz->hGtpv1uStack, &ulpReq);
NW_ASSERT( rc == NW_GTPV1U_OK );
thiz->hGtpv1uConn = ulpReq.apiInfo.createTunnelEndPointInfo.hStackSession;
/*
* Create local udp listening endpoint
*/
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(localport);
addr.sin_addr.s_addr = inet_addr(localIpStr);
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);
}
event_set(&(thiz->ev[sd]), sd, EV_READ|EV_PERSIST, nwMiniUlpDataIndicationCallbackData, thiz);
event_add(&(thiz->ev[sd]), NULL);
thiz->localPort[sd] = localport;
/*
* Create local udp for sendign data
*/
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd < 0)
{
NW_LOG(NW_LOG_LEVEL_ERRO, "%s", strerror(errno));
NW_ASSERT(0);
}
thiz->hSocket = sd;
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwMiniUlpDestroyConn(NwMiniUlpEntityT* thiz)
{
NwGtpv1uRcT rc;
NwGtpv1uUlpApiT ulpReq;
/*---------------------------------------------------------------------------
* Send Destroy Session Request to GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
ulpReq.apiType = NW_GTPV1U_ULP_API_DESTROY_TUNNEL_ENDPOINT;
ulpReq.apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle = thiz->hGtpv1uConn;
rc = nwGtpv1uProcessUlpReq(thiz->hGtpv1uStack, &ulpReq);
NW_ASSERT( rc == NW_GTPV1U_OK );
thiz->hGtpv1uConn = 0;
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwMiniUlpTpduSend(NwMiniUlpEntityT* thiz, NwU8T* tpduBuf, NwU32T tpduLen , NwU16T fromPort)
{
NwGtpv1uRcT rc;
NwGtpv1uUlpApiT ulpReq;
/*
* Send Message Request to GTPv1u Stack Instance
*/
ulpReq.apiType = NW_GTPV1U_ULP_API_SEND_TPDU;
ulpReq.apiInfo.sendtoInfo.teid = fromPort;
ulpReq.apiInfo.sendtoInfo.ipAddr = inet_addr(thiz->peerIpStr);
rc = nwGtpv1uGpduMsgNew( thiz->hGtpv1uStack,
fromPort,
NW_FALSE,
thiz->seqNum++,
tpduBuf,
tpduLen,
&(ulpReq.apiInfo.sendtoInfo.hMsg));
NW_ASSERT( rc == NW_GTPV1U_OK );
rc = nwGtpv1uProcessUlpReq(thiz->hGtpv1uStack, &ulpReq);
NW_ASSERT( rc == NW_GTPV1U_OK );
rc = nwGtpv1uMsgDelete(thiz->hGtpv1uStack, (ulpReq.apiInfo.sendtoInfo.hMsg));
NW_ASSERT( rc == NW_GTPV1U_OK );
return NW_GTPV1U_OK;
}
NwGtpv1uRcT
nwMiniUlpProcessStackReqCallback (NwGtpv1uUlpHandleT hUlp,
NwGtpv1uUlpApiT *pUlpApi)
{
NwMiniUlpEntityT* thiz;
NW_ASSERT(pUlpApi != NULL);
thiz = (NwMiniUlpEntityT*) hUlp;
switch(pUlpApi->apiType)
{
case NW_GTPV1U_ULP_API_RECV_TPDU:
{
struct sockaddr_in peerAddr;
NwS32T bytesSent;
NwU8T dataBuf[4096];
NwU32T dataSize;
NwU32T peerIpAddr = (inet_addr(thiz->peerIpStr));
NW_ASSERT( NW_GTPV1U_OK == nwGtpv1uMsgGetTpdu(pUlpApi->apiInfo.recvMsgInfo.hMsg, dataBuf, &dataSize) );
NW_LOG(NW_LOG_LEVEL_DEBG, "Received TPDU from gtpv1u stack %u!", pUlpApi->apiInfo.recvMsgInfo.teid);
peerAddr.sin_family = AF_INET;
peerAddr.sin_port = htons(pUlpApi->apiInfo.recvMsgInfo.teid);
peerAddr.sin_addr.s_addr = (peerIpAddr);
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);
}
else
{
NW_LOG(NW_LOG_LEVEL_DEBG, "Sent %u bytes to peer %u.%u.%u.%u", dataSize,
(peerIpAddr & 0x000000ff),
(peerIpAddr & 0x0000ff00) >> 8,
(peerIpAddr & 0x00ff0000) >> 16,
(peerIpAddr & 0xff000000) >> 24);
}
NW_ASSERT(nwGtpv1uMsgDelete(thiz->hGtpv1uStack, (pUlpApi->apiInfo.recvMsgInfo.hMsg)) == NW_GTPV1U_OK);
}
break;
default:
NW_LOG(NW_LOG_LEVEL_WARN, "Received undefined UlpApi (%d) from gtpv1u stack!",pUlpApi->apiType);
}
return NW_GTPV1U_OK;
}
#ifdef __cplusplus
}
#endif
@@ -1,65 +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 <stdio.h>
#include <assert.h>
#include "NwEvt.h"
#include "NwLog.h"
#ifndef __NW_MINI_ULP_H__
#define __NW_MINI_ULP_H__
typedef struct
{
int hSocket;
NwU16T seqNum;
NwU8T restartCounter;
NwU8T localIpStr[16];
NwU8T peerIpStr[16];
NwU32T localPort[1025];
NwEventT ev[1025];
NwGtpv1uStackHandleT hGtpv1uStack;
NwGtpv1uStackSessionHandleT hGtpv1uConn;
} NwMiniUlpEntityT;
#ifdef __cplusplus
extern "C" {
#endif
NwGtpv1uRcT
nwMiniUlpInit(NwMiniUlpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack);
NwGtpv1uRcT
nwMiniUlpDestroy(NwMiniUlpEntityT* thiz);
NwGtpv1uRcT
nwMiniUlpCreateConn(NwMiniUlpEntityT* thiz, char* localIpStr, NwU16T localPort, char* peerIpStr);
NwGtpv1uRcT
nwMiniUlpDestroyConn(NwMiniUlpEntityT* thiz);
NwGtpv1uRcT
nwMiniUlpSendMsg(NwMiniUlpEntityT* thiz);
NwGtpv1uRcT
nwMiniUlpTpduSend(NwMiniUlpEntityT* thiz, NwU8T* tpduBuf, NwU32T tpduLen , NwU16T fromPort);
NwGtpv1uRcT
nwMiniUlpProcessStackReqCallback (NwGtpv1uUlpHandleT hUlp,
NwGtpv1uUlpApiT *pUlpApi);
#ifdef __cplusplus
}
#endif
#endif
@@ -1,211 +0,0 @@
/*----------------------------------------------------------------------------*
* *
* n w - g t p v 2 u *
* G P R S T u n n e l i n g P r o t o c o l v 2 u 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-gtpv2 library.
*/
#include <stdio.h>
#include <assert.h>
#include "NwEvt.h"
#include "NwGtpv1u.h"
#include "NwMiniLogMgrEntity.h"
#include "NwMiniTmrMgrEntity.h"
#include "NwMiniUdpEntity.h"
#include "NwMiniUlpEntity.h"
#ifndef NW_ASSERT
#define NW_ASSERT assert
#endif
/*---------------------------------------------------------------------------
* T H E M A I N F U N C T I O N
*--------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
NwGtpv1uRcT rc;
char* logLevelStr;
NwU32T logLevel;
NwU32T num_of_connections;
NwGtpv1uStackHandleT hGtpv1uStack = 0;
NwMiniUlpEntityT ulpObj;
NwMiniUdpEntityT udpObj;
NwMiniLogMgrT logObj;
NwGtpv1uUlpEntityT ulp;
NwGtpv1uUdpEntityT udp;
NwGtpv1uTimerMgrEntityT tmrMgr;
NwGtpv1uLogMgrEntityT logMgr;
if(argc != 4)
{
printf("Usage: %s <num-of-connections> <local-ip> <peer-ip>\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(&logObj, logLevel);
/*---------------------------------------------------------------------------
* Create GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
rc = nwGtpv1uInitialize(&hGtpv1uStack);
if(rc != NW_GTPV1U_OK)
{
NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to create gtpv1u stack instance. Error '%u' occured", rc);
exit(1);
}
NW_LOG(NW_LOG_LEVEL_INFO, "Gtpv1u Stack Handle '%X' Creation Successful!", hGtpv1uStack);
/*---------------------------------------------------------------------------
* Set up Ulp Entity
*--------------------------------------------------------------------------*/
rc = nwMiniUlpInit(&ulpObj, hGtpv1uStack);
NW_ASSERT( rc == NW_GTPV1U_OK );
ulp.hUlp = (NwGtpv1uUlpHandleT) &ulpObj;
ulp.ulpReqCallback = nwMiniUlpProcessStackReqCallback;
rc = nwGtpv1uSetUlpEntity(hGtpv1uStack, &ulp);
NW_ASSERT( rc == NW_GTPV1U_OK );
/*---------------------------------------------------------------------------
* Set up Udp Entity
*--------------------------------------------------------------------------*/
rc = nwMiniUdpInit(&udpObj, hGtpv1uStack, (argv[2]));
NW_ASSERT( rc == NW_GTPV1U_OK );
udp.hUdp = (NwGtpv1uUdpHandleT) &udpObj;
udp.udpDataReqCallback = nwMiniUdpDataReq;
rc = nwGtpv1uSetUdpEntity(hGtpv1uStack, &udp);
NW_ASSERT( rc == NW_GTPV1U_OK );
/*---------------------------------------------------------------------------
* Set up Log Entity
*--------------------------------------------------------------------------*/
tmrMgr.tmrMgrHandle = 0;
tmrMgr.tmrStartCallback = nwTimerStart;
tmrMgr.tmrStopCallback = nwTimerStop;
rc = nwGtpv1uSetTimerMgrEntity(hGtpv1uStack, &tmrMgr);
NW_ASSERT( rc == NW_GTPV1U_OK );
/*---------------------------------------------------------------------------
* Set up Log Entity
*--------------------------------------------------------------------------*/
logMgr.logMgrHandle = (NwGtpv1uLogMgrHandleT) &logObj;
logMgr.logReqCallback = nwMiniLogMgrLogRequest;
rc = nwGtpv1uSetLogMgrEntity(hGtpv1uStack, &logMgr);
NW_ASSERT( rc == NW_GTPV1U_OK );
/*---------------------------------------------------------------------------
* Set GTPv1u log level
*--------------------------------------------------------------------------*/
rc = nwGtpv1uSetLogLevel(hGtpv1uStack, logLevel);
/*---------------------------------------------------------------------------
* Send Create Session Request to GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
num_of_connections = atoi(argv[1]);
while ( num_of_connections-- )
{
//rc = nwMiniUlpCreateConn(&ulpObj, argv[2], 1234 + num_of_connections, argv[3]);
rc = nwMiniUlpSendEchoRequestToPeer(&ulpObj, inet_addr(argv[3]));
NW_ASSERT( rc == NW_GTPV1U_OK );
}
/*---------------------------------------------------------------------------
* Event loop
*--------------------------------------------------------------------------*/
NW_EVT_LOOP();
NW_LOG(NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!");
/*---------------------------------------------------------------------------
* Send Destroy Session Request to GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
rc = nwMiniUlpDestroyConn(&ulpObj);
NW_ASSERT( rc == NW_GTPV1U_OK );
/*---------------------------------------------------------------------------
* Destroy GTPv1u Stack Instance
*--------------------------------------------------------------------------*/
rc = nwGtpv1uFinalize(hGtpv1uStack);
if(rc != NW_GTPV1U_OK)
{
NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to finalize gtpv1u stack instance. Error '%u' occured", rc);
}
else
{
NW_LOG(NW_LOG_LEVEL_INFO, "Gtpv1u Stack Handle '%X' Finalize Successful!", hGtpv1uStack);
}
return rc;
}
-365
View File
@@ -1,365 +0,0 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008, 2009 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 commands `./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.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' 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 bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /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.
@@ -1,16 +0,0 @@
AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/UTILS
noinst_LTLIBRARIES = libitti.la
libitti_la_LDFLAGS = -all-static
libitti_la_SOURCES = \
gtpv1_u_messages_def.h gtpv1_u_messages_types.h \
timer_messages_def.h timer_messages_types.h \
s1ap_messages_def.h s1ap_messages_types.h \
s6a_messages_def.h s6a_messages_types.h \
sgw_lite_def.h sgw_lite_messages_types.h \
sctp_messages_def.h sctp_messages_types.h \
udp_message_def.h udp_messages_types.h \
intertask_interface.c intertask_interface.h \
intertask_interface_dump.c intertask_interface_dump.h
@@ -1,565 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = INTERTASK_INTERFACE
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libitti_la_LIBADD =
am_libitti_la_OBJECTS = intertask_interface.lo \
intertask_interface_dump.lo
libitti_la_OBJECTS = $(am_libitti_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libitti_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libitti_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libitti_la_SOURCES)
DIST_SOURCES = $(libitti_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/UTILS
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_LTLIBRARIES = libitti.la
libitti_la_LDFLAGS = -all-static
libitti_la_SOURCES = \
gtpv1_u_messages_def.h gtpv1_u_messages_types.h \
timer_messages_def.h timer_messages_types.h \
s1ap_messages_def.h s1ap_messages_types.h \
s6a_messages_def.h s6a_messages_types.h \
sgw_lite_def.h sgw_lite_messages_types.h \
sctp_messages_def.h sctp_messages_types.h \
udp_message_def.h udp_messages_types.h \
intertask_interface.c intertask_interface.h \
intertask_interface_dump.c intertask_interface_dump.h
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu INTERTASK_INTERFACE/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu INTERTASK_INTERFACE/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libitti.la: $(libitti_la_OBJECTS) $(libitti_la_DEPENDENCIES) $(EXTRA_libitti_la_DEPENDENCIES)
$(AM_V_CCLD)$(libitti_la_LINK) $(libitti_la_OBJECTS) $(libitti_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intertask_interface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intertask_interface_dump.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,2 +0,0 @@
MESSAGE_DEF(GTPV1U_DATA_REQ, TASK_PRIORITY_MED, Gtpv1uDataReq gtpv1uDataReq)
MESSAGE_DEF(S1U_CREATE_TUNNEL, TASK_PRIORITY_MED_LEAST, S1UCreateTunnel s1uCreateTunnel)
@@ -1,15 +0,0 @@
#ifndef GTPV1_U_MESSAGES_TYPES_H_
#define GTPV1_U_MESSAGES_TYPES_H_
typedef struct {
uint8_t *buffer;
uint32_t buffer_length;
uint16_t port;
uint32_t peer_addr;
} Gtpv1uDataReq;
typedef struct {
} S1UCreateTunnel;
#endif /* GTPV1_U_MESSAGES_TYPES_H_ */
@@ -1,241 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <assert.h>
#include "queue.h"
// Locally define macro to enable task id to string table
#define INTERTASK_C
#include "intertask_interface.h"
#include "intertask_interface_dump.h"
static int itti_debug = 0;
#define ITTI_DEBUG(x, args...) do { if (itti_debug) fprintf(stdout, "[ITTI][D]"x, ##args); } \
while(0)
#define ITTI_ERROR(x, args...) do { fprintf(stdout, "[ITTI][E]"x, ##args); } \
while(0)
/* This list acts as a FIFO of messages received by tasks (RRC, NAS, ...) */
struct message_list_s {
STAILQ_ENTRY(message_list_s) next_element;
MessageDef *msg; ///< Pointer to the message
uint32_t message_number; ///< Unique message number
uint32_t message_priority; ///< Message priority
};
/* Message queues: declare a queue for each task */
static STAILQ_HEAD(message_queue_head, message_list_s) message_queue[TASK_MAX];
/* Number of messages in the queue */
static uint32_t message_in_queue[TASK_MAX];
/* Mutex for the message queue */
static pthread_mutex_t message_queue_mutex[TASK_MAX];
/* Conditinal Var for message queue and task synchro */
static pthread_cond_t mssage_queue_cond_var[TASK_MAX];
/* Current message number. Incremented every call to send_msg_to_task */
static uint32_t message_number = 0;
/* Map message priority to message id */
const struct message_priority_s messages_priorities[MESSAGES_ID_MAX] = {
#define MESSAGE_DEF(iD, pRIO, sTRUCT) { iD, pRIO },
#include "gtpv1_u_messages_def.h"
#include "sctp_messages_def.h"
#include "s1ap_messages_def.h"
#include "s6a_messages_def.h"
#include "timer_messages_def.h"
#include "udp_messages_def.h"
#undef MESSAGE_DEF
};
static inline uint32_t get_message_priority(MessagesIds message_id) {
uint32_t i;
for (i = 0; i < MESSAGES_ID_MAX; i++) {
if ((messages_priorities[i]).id == message_id)
return ((messages_priorities[i]).priority);
}
return 0;
}
int send_broadcast_message(MessageDef *message_p) {
uint32_t i;
int ret;
for (i = TASK_FIRST; i < TASK_MAX; i++) {
ret = send_msg_to_task(i, message_p);
if (ret < 0) {
ITTI_ERROR("Failed to send broadcast message to task (%u:%s)\n",
i, tasks_string[i]);
}
}
return ret;
}
inline MessageDef *alloc_new_message(
TaskId origin_task_id,
TaskId destination_task_id,
MessagesIds message_id) {
MessageDef *temp = NULL;
if ((origin_task_id >= TASK_MAX) || (destination_task_id >= TASK_MAX) ||
(message_id >= MESSAGES_ID_MAX))
return NULL;
temp = (MessageDef *)malloc(sizeof(MessageDef));
if (temp == NULL)
return temp;
temp->messageId = message_id;
temp->originTaskId = origin_task_id;
temp->destinationTaskId = destination_task_id;
return temp;
}
int send_msg_to_task(TaskId task_id, MessageDef *message)
{
struct message_list_s *new;
uint32_t priority;
assert(message != NULL);
assert(task_id < TASK_MAX);
priority = get_message_priority(message->messageId);
// Lock the mutex to get exclusive access to the list
pthread_mutex_lock(&message_queue_mutex[task_id]);
// Allocate new list element
new = (struct message_list_s *)malloc(sizeof(struct message_list_s));
//Increment message number
message_number++;
// Fill in members
new->msg = message;
new->message_number = message_number;
new->message_priority = priority;
if (STAILQ_EMPTY(&message_queue[task_id])) {
STAILQ_INSERT_HEAD(&message_queue[task_id], new, next_element);
} else {
struct message_list_s *insert_after = NULL;
struct message_list_s *temp;
STAILQ_FOREACH(temp, &message_queue[task_id], next_element) {
struct message_list_s *next;
next = STAILQ_NEXT(temp, next_element);
/* Increment message priority to create a sort of
* priority based scheduler */
if (temp->message_priority < TASK_PRIORITY_MAX)
temp->message_priority++;
if (next && next->message_priority < priority) {
insert_after = temp;
}
}
if (insert_after == NULL) {
STAILQ_INSERT_TAIL(&message_queue[task_id], new, next_element);
} else {
STAILQ_INSERT_AFTER(&message_queue[task_id], insert_after, new, next_element);
}
}
// Update the number of messages in the queue
message_in_queue[task_id]++;
if (message_in_queue[task_id] == 1) {
// Emit a signal to wake up target task thread
pthread_cond_signal(&mssage_queue_cond_var[task_id]);
}
// Release the mutex
pthread_mutex_unlock(&message_queue_mutex[task_id]);
ITTI_DEBUG("Message %d with priority %d succesfully sent to task_id (%u:%s)\n",
message_number, priority, task_id, tasks_string[task_id]);
return 0;
}
void receive_msg(TaskId task_id, MessageDef **received_msg)
{
assert(task_id < TASK_MAX);
assert(received_msg != NULL);
// Lock the mutex to get exclusive access to the list
pthread_mutex_lock(&message_queue_mutex[task_id]);
if (message_in_queue[task_id] == 0) {
ITTI_DEBUG("Message in queue[(%u:%s)] == 0, waiting\n",
task_id, tasks_string[task_id]);
// Wait while list == 0
pthread_cond_wait(&mssage_queue_cond_var[task_id], &message_queue_mutex[task_id]);
ITTI_DEBUG("Receiver thread queue[(%u:%s)] got new message notification\n",
task_id, tasks_string[task_id]);
}
if (!STAILQ_EMPTY(&message_queue[task_id])) {
struct message_list_s *temp = STAILQ_FIRST(&message_queue[task_id]);
// Update received_msg reference
*received_msg = temp->msg;
/* Remove message from queue */
STAILQ_REMOVE_HEAD(&message_queue[task_id], next_element);
free(temp);
message_in_queue[task_id]--;
}
// Release the mutex
pthread_mutex_unlock(&message_queue_mutex[task_id]);
}
void intertask_interface_init(const mme_config_t *mme_config)
{
int i;
/* Initializing each queue and related stuff */
for (i = 0; i < TASK_MAX; i++) {
STAILQ_INIT(&message_queue[i]);
message_in_queue[i] = 0;
// Initialize mutexes
pthread_mutex_init(&message_queue_mutex[i], NULL);
// Initialize Cond vars
pthread_cond_init(&mssage_queue_cond_var[i], NULL);
}
// itti_init();
}
@@ -1,187 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
/** @defgroup _intertask_interface_impl_ Intertask Interface Mechanisms
* Implementation
* @ingroup _ref_implementation_
* @{
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "mme_config.h"
#include "gtpv1_u_messages_types.h"
#include "sctp_messages_types.h"
#include "s1ap_messages_types.h"
#include "s6a_messages_types.h"
#include "sgw_lite_messages_types.h"
#include "timer_messages_types.h"
#include "udp_messages_types.h"
#ifndef INTERTASK_INTERFACE_H_
#define INTERTASK_INTERFACE_H_
enum task_priorities {
TASK_PRIORITY_MAX = 100,
TASK_PRIORITY_MAX_LEAST = 85,
TASK_PRIORITY_MED_PLUS = 70,
TASK_PRIORITY_MED = 55,
TASK_PRIORITY_MED_LEAST = 40,
TASK_PRIORITY_MIN_PLUS = 25,
TASK_PRIORITY_MIN = 10,
};
// #define MESSAGE_ID(x) x,
// #define MESSAGE_DEF(x) x
/* This enum defines messages ids. Each one is unique. */
typedef enum {
#define MESSAGE_DEF(iD, pRIO, sTRUCT) iD,
#include "gtpv1_u_messages_def.h"
#include "sctp_messages_def.h"
#include "s1ap_messages_def.h"
#include "s6a_messages_def.h"
#include "sgw_lite_def.h"
#include "timer_messages_def.h"
#include "udp_messages_def.h"
#undef MESSAGE_DEF
MESSAGES_ID_MAX,
MESSAGES_ID_END = MESSAGES_ID_MAX,
} MessagesIds;
struct message_priority_s {
uint32_t id;
uint32_t priority;
};
//! Tasks id of each task
typedef enum {
TASK_FIRST = 0,
/// GTPV1-U task
TASK_GTPV1_U = TASK_FIRST,
/// S1AP task
TASK_S1AP,
/// S6a task
TASK_S6A,
/// SCTP task
TASK_SCTP,
/// Serving Gateway Lite task
TASK_SGW_LITE,
/// TIMERS task
TASK_TIMER,
/// UDP task
TASK_UDP,
TASK_MAX,
TASK_END = TASK_MAX,
} TaskId;
#if defined(INTERTASK_C)
/* Map every task id to printable string.
*/
const char *tasks_string[] = {
"gtpv1-u",
"s1ap",
"s6a",
"sctp",
"sgw-lite",
"timer",
"udp",
};
#endif
/** @struct MessageDef
* @brief Message structure for inter thread communication.
*/
typedef struct MessageDef_s {
uint32_t messageId; /**< Unique message id as referenced in enum MessagesIds */
uint32_t originTaskId; /**< ID of the sender task */
uint32_t destinationTaskId; /**< ID of the destination task */
union {
#define MESSAGE_DEF(iD, pRIO, sTRUCT) sTRUCT;
#include "gtpv1_u_messages_def.h"
#include "sctp_messages_def.h"
#include "s1ap_messages_def.h"
#include "s6a_messages_def.h"
#include "sgw_lite_def.h"
#include "timer_messages_def.h"
#include "udp_messages_def.h"
#undef MESSAGE_DEF
} msg; /**< Union of payloads as defined in x_messages_def.h headers */
} MessageDef;
/** \brief Send a broadcast message to every task
\param message Pointer to the message to send
@returns < 0 on failure, 0 otherwise
**/
int send_broadcast_message(MessageDef *message_p);
/** \brief Send a message to a task (could be itself)
\param task_id Task ID
\param message Pointer to the message to send
@returns -1 on failure, 0 otherwise
**/
int send_msg_to_task(TaskId task_id, MessageDef *message);
/** \brief Retrieves a messsage in queue.
* If the queue is empty, the thread is blocked till a new message arrives.
\param task_id Task ID of the receiving task
\param received_msg Pointer to the allocated message
**/
void receive_msg(TaskId task_id, MessageDef **received_msg);
/** \brief Init function for the intertask interface. Init queues, Mutexes and Cond vars.
* If the queue is empty, the thread is blocked till a new message arrives.
**/
void intertask_interface_init(const mme_config_t *mme_config);
/** \brief Alloc and memset(0) a new itti message.
\param origin_task_id Task ID of the sending task
\param destination_task_id Task ID of the target task
\param message_id Message ID
@returns NULL in case of failure or newly allocated mesage ref
**/
inline MessageDef *alloc_new_message(
TaskId origin_task_id,
TaskId destination_task_id,
MessagesIds message_id);
#endif /* INTERTASK_INTERFACE_H_ */
/* @} */
@@ -1,86 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <sys/socket.h> /* socket definitions */
#include <sys/types.h> /* socket types */
#include <arpa/inet.h> /* inet (3) funtions */
#include <pthread.h>
#include "intertask_interface.h"
#include "intertask_interface_dump.h"
#include "queue.h"
struct itti_queue_s {
struct itti_queue_s *next;
char *data;
uint32_t length;
};
struct itti_queue_ref {
pthread_mutex_t queue_mutex;
struct itti_queue_s *itti_queue_head;
struct itti_queue_s *itti_queue_tail;
uint32_t queue_size;
};
struct itti_queue_ref itti_queue = { PTHREAD_MUTEX_INITIALIZER, NULL, NULL, 0 };
int itti_accept_socket = -1;
pthread_t itti_thread;
int itti_queue_message(MessageDef *message_p) {
return 0;
}
static void * itti_create_socket(void *arg_p) {
int itti_conn_socket;
struct sockaddr_in servaddr; /* socket address structure */
if ((itti_conn_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("Socket");
return NULL;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(ITTI_PORT);
if (bind(itti_conn_socket, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {
perror("bind");
return NULL;
}
if (listen(itti_conn_socket, 5) < 0 ) {
perror("listen");
return NULL;
}
/* Wait for a connection */
if ((itti_accept_socket = accept(itti_conn_socket, NULL, NULL)) < 0) {
perror("accept");
return NULL;
}
while(1) {
pthread_mutex_lock(&itti_queue.queue_mutex);
if (itti_queue.queue_size > 0) {
/* There is some messages to send */
assert(itti_queue.itti_queue_tail != NULL);
}
pthread_mutex_unlock(&itti_queue.queue_mutex);
sleep(1);
}
return NULL;
}
void itti_init(void) {
if (pthread_create(&itti_thread, NULL, &itti_create_socket, NULL) < 0) {
perror("pthread_create");
}
}
@@ -1,8 +0,0 @@
#ifndef INTERTASK_INTERFACE_DUMP_H_
#define INTERTASK_INTERFACE_DUMP_H_
int itti_queue_message(MessageDef *message);
void itti_init(void);
#endif /* INTERTASK_INTERFACE_DUMP_H_ */
@@ -1,5 +0,0 @@
//WARNING: Do not include this header directly. Use intertask_interface.h instead.
MESSAGE_DEF(S1AP_SCTP_NEW_MESSAGE_IND, TASK_PRIORITY_MED, S1apSctpNewMessageInd s1apSctpNewMessageInd)
MESSAGE_DEF(S1AP_SCTP_ASSOCIATION_CLOSED, TASK_PRIORITY_MAX, S1apSctpAsscociationClosed s1apSctpAssociationClosed)
MESSAGE_DEF(S1AP_NAS_NEW_MESSAGE_IND, TASK_PRIORITY_MED, S1apNASNewMessageInd s1apNASNewMessageInd)
@@ -1,23 +0,0 @@
#ifndef S1AP_MESSAGES_TYPES_H_
#define S1AP_MESSAGES_TYPES_H_
typedef struct {
uint8_t *buffer; ///< SCTP buffer
uint32_t bufLen; ///< SCTP buffer length
int32_t assocId; ///< SCTP physical association ID
uint8_t stream; ///< Stream number on which data had been received
uint16_t instreams; ///< Number of input streams for the SCTP connection between peers
uint16_t outstreams; ///< Number of output streams for the SCTP connection between peers
} S1apSctpNewMessageInd;
typedef struct {
uint32_t assocId; ///< SCTP Association ID of the closed connection
} S1apSctpAsscociationClosed;
typedef struct {
uint8_t *nas_buffer; ///< NAS buffer
uint32_t nas_length; ///< NAS buffer length
uint32_t mme_ue_s1ap_id; ///< Unique MME UE s1ap id
} S1apNASNewMessageInd;
#endif /* S1AP_MESSAGES_TYPES_H_ */
@@ -1 +0,0 @@
//WARNING: Do not include this header directly. Use intertask_interface.h instead.
@@ -1,4 +0,0 @@
#ifndef S6A_MESSAGES_TYPES_H_
#define S6A_MESSAGES_TYPES_H_
#endif /* S6A_MESSAGES_TYPES_H_ */
@@ -1,5 +0,0 @@
//WARNING: Do not include this header directly. Use intertask_interface.h instead.
MESSAGE_DEF(SCTP_S1AP_INIT, TASK_PRIORITY_MED, SctpS1APInit sctpS1APInit)
MESSAGE_DEF(SCTP_NEW_DATA_REQ, TASK_PRIORITY_MED, SctpNewDataReq sctpNewDataReq)
MESSAGE_DEF(SCTP_CLOSE_ASSOCIATION, TASK_PRIORITY_MAX, SctpCloseAssociation sctpCloseAssociation)
@@ -1,21 +0,0 @@
#ifndef SCTP_MESSAGES_TYPES_H_
#define SCTP_MESSAGES_TYPES_H_
typedef struct {
uint8_t *buffer;
uint32_t bufLen;
uint32_t assocId;
uint16_t stream;
} SctpNewDataReq;
typedef struct {
uint16_t port;
char *address;
uint32_t ppid;
} SctpS1APInit;
typedef struct {
uint32_t assocId;
} SctpCloseAssociation;
#endif /* SCTP_MESSAGES_TYPES_H_ */
@@ -1,5 +0,0 @@
MESSAGE_DEF(SGW_CREATE_SESSION_REQUEST, TASK_PRIORITY_MED, SgwCreateSessionRequest sgwCreateSessionRequest)
MESSAGE_DEF(SGW_CREATE_SESSION_RESPONSE, TASK_PRIORITY_MED, SgwCreateSessionResponse sgwCreateSessionResponse)
MESSAGE_DEF(SGW_MODIFY_BEARER_REQUEST, TASK_PRIORITY_MED, SgwModifyBearerRequest sgwModifyBearerRequest)
MESSAGE_DEF(SGW_MODIFY_BEARER_RESPONSE, TASK_PRIORITY_MED, SgwModifyBearerResponse sgwModifyBearerResponse)
MESSAGE_DEF(SGW_S1U_ENDPOINT_CREATED, TASK_PRIORITY_MED, SgwS1UEndpointCreated sgwS1UEndpointCreated)
@@ -1,76 +0,0 @@
#include "../SGW-LITE/sgw_lite_ie_defs.h"
#ifndef SGW_LITE_MESSAGES_TYPES_H_
#define SGW_LITE_MESSAGES_TYPES_H_
typedef struct {
Teid_t teid; ///< Tunnel Endpoint Identifier
Imsi_t imsi;
Msisdn_t msisdn;
Mei_t mei;
Uli_t uli;
ServingNetwork_t serving_network;
RatType_t rat_type;
FTeid_t sender_fteid_for_cp; ///< Sender F-TEID for control plane
FTeid_t pgw_address_for_cp; ///< PGW S5/S8 address for control plane or PMIP
APN_t apn; ///< Access Point Name
SelectionMode_t selection_mode; ///< Selection Mode
PDNType_t pdn_type; ///< PDN Type
PAA_t paa; ///< PDN Address Allocation
/* Shall include APN Restriction but not used in our case */
AMBR_t ambr; ///< Aggregate Maximum Bit Rate
/* TODO: add Protocol Configuration otions */
FQ_CSID_t mme_fq_csid;
UETimeZone_t ue_time_zone;
UCI_t uci; ///< User CSG Information
struct {
unsigned eps_bearer_id:4; ///< EPS Bearer ID
BearerQOS_t bearer_level_qos;
} bearer_to_create; ///< Bearer Contexts to be created
} SgwCreateSessionRequest;
typedef struct {
Teid_t teid; ///< Tunnel Endpoint Identifier
PAA_t paa; ///< PDN Address Allocation
APNRestriction_t apn_restriction;
struct {
unsigned eps_bearer_id:4; ///< EPS Bearer ID
SGWCause_t cause;
FTeid_t s1u_sgw_fteid; ///< Sender F-TEID for control plane
} bearer_context_created;
FQ_CSID_t pgw_fq_csid;
FQ_CSID_t sgw_fq_csid;
} SgwCreateSessionResponse;
typedef struct {
Teid_t teid; ///< Tunnel Endpoint Identifier
/* Delay Value in integer multiples of 50 millisecs, or zero */
DelayValue_t delay_dl_packet_notif_req;
struct {
unsigned eps_bearer_id:4; ///< EPS Bearer ID
FTeid_t s1_eNB_fteid; ///< S1 eNodeB F-TEID
} bearer_context_to_modify;
FQ_CSID_t mme_fq_csid;
} SgwModifyBearerRequest;
typedef struct {
Teid_t teid; ///< Tunnel Endpoint Identifier
} SgwModifyBearerResponse;
typedef struct {
uint8_t status; ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0)
uint32_t teid;
} SgwS1UEndpointCreated;
typedef struct {
Teid_t teid; ///< Tunnel Endpoint Identifier
EBI_t lbi; ///< Linked EPS Bearer ID
FTeid_t sender_fteid_for_cp; ///< Sender F-TEID for control plane
} SgwDeleteSessionRequest;
typedef struct {
} SgwDeleteBearerRequest;
#endif
@@ -1,3 +0,0 @@
MESSAGE_DEF(TIMER_NEW_REQUEST, TASK_PRIORITY_MIN_PLUS, TimerNewRequest timerNewRequest)
MESSAGE_DEF(TIMER_REMOVE, TASK_PRIORITY_MIN_PLUS, TimerRemove timerRemove)
MESSAGE_DEF(TIMER_HAS_EXPIRED, TASK_PRIORITY_MED_PLUS, TimerHasExpired timerHasExpired)
@@ -1,18 +0,0 @@
#ifndef TIMER_MESSAGES_TYPES_H_
#define TIMER_MESSAGES_TYPES_H_
typedef struct {
uint32_t expiry_sec;
uint32_t expiry_usec;
uint32_t timer_id;
} TimerNewRequest;
typedef struct {
long timer_id;
}TimerHasExpired;
typedef struct {
uint32_t timer_id;
} TimerRemove;
#endif /* TIMER_MESSAGES_TYPES_H_ */
@@ -1,2 +0,0 @@
MESSAGE_DEF(UDP_INIT, TASK_PRIORITY_MED, UdpInit udpInit)
MESSAGE_DEF(UDP_DATA_REQ, TASK_PRIORITY_MED, UdpDataReq udpDataReq)
@@ -1,16 +0,0 @@
#ifndef UDP_MESSAGES_TYPES_H_
#define UDP_MESSAGES_TYPES_H_
typedef struct {
uint32_t port;
char *address;
} UdpInit;
typedef struct {
uint8_t *buffer;
uint32_t buffer_length;
uint32_t peer_address;
uint32_t peer_port;
} UdpDataReq;
#endif /* UDP_MESSAGES_TYPES_H_ */
-12
View File
@@ -1,12 +0,0 @@
SUBDIRS = \
GTPV1-U \
INTERTASK_INTERFACE \
SCTP \
S1AP \
S6A \
SGW-LITE \
UTILS \
UDP \
TEST \
OAISIM_MME \
DOCS
-823
View File
@@ -1,823 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
compile config.guess config.sub depcomp install-sh ltmain.sh \
missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
cscope distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
if test -d "$(distdir)"; then \
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
DIST_TARGETS = dist-gzip
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = \
GTPV1-U \
INTERTASK_INTERFACE \
SCTP \
S1AP \
S6A \
SGW-LITE \
UTILS \
UDP \
TEST \
OAISIM_MME \
DOCS
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh: Makefile
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
config.h: stamp-h1
@if test ! -f $@; then rm -f stamp-h1; else :; fi
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
cscopelist-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscope: cscope.files
test ! -s cscope.files \
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
clean-cscope:
-rm -f cscope.files
cscope.files: clean-cscope cscopelist-recursive cscopelist
cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__post_remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__post_remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__post_remove_distdir)
dist dist-all:
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
$(am__post_remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__post_remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@test -n '$(distuninstallcheck_dir)' || { \
echo 'ERROR: trying to run $@ with an empty' \
'$$(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
$(am__cd) '$(distuninstallcheck_dir)' || { \
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile config.h
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
cscopelist-recursive ctags-recursive install-am install-strip \
tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-cscope \
clean-generic clean-libtool cscope cscopelist \
cscopelist-recursive ctags ctags-recursive dist dist-all \
dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \
dist-zip distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
-1
View File
@@ -1 +0,0 @@
@@ -1,24 +0,0 @@
AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/GTPV1-U \
-I$(top_srcdir)/SCTP \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_builddir)/S1AP/MESSAGES \
-I$(top_srcdir)/S1AP \
-I$(top_srcdir)/S6A \
-I$(top_srcdir)/SGW-LITE \
-I$(top_srcdir)/UDP \
-I$(top_srcdir)/UTILS \
-I$(top_srcdir)/UTILS/TIMER
oaisim_mme_LDADD = \
$(top_builddir)/GTPV1-U/libgtpv1u.la \
$(top_builddir)/INTERTASK_INTERFACE/libitti.la \
$(top_builddir)/S1AP/libs1ap.la \
$(top_builddir)/S6A/libs6a.la \
$(top_builddir)/SGW-LITE/libsgw_lite.la \
$(top_builddir)/SCTP/libsctpserver.la \
$(top_builddir)/UTILS/TIMER/libtimer.la \
$(top_builddir)/UTILS/libutils.la \
$(top_builddir)/UDP/libudpserver.la
bin_PROGRAMS = oaisim_mme
-607
View File
@@ -1,607 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
@ENABLE_USE_HSS_TRUE@am__append_1 = -I$(top_srcdir)/S6A
@ENABLE_USE_HSS_TRUE@am__append_2 = $(top_builddir)/S6A/libs6a.la
bin_PROGRAMS = oaisim_mme$(EXEEXT)
subdir = OAISIM_MME
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
oaisim_mme_SOURCES = oaisim_mme.c
oaisim_mme_OBJECTS = oaisim_mme.$(OBJEXT)
oaisim_mme_DEPENDENCIES = $(top_builddir)/GTPV1-U/libgtpv1u.la \
$(top_builddir)/INTERTASK_INTERFACE/libitti.la \
$(top_builddir)/S1AP/libs1ap.la \
$(top_builddir)/SGW-LITE/libsgw_lite.la \
$(top_builddir)/SCTP/libsctpserver.la \
$(top_builddir)/UTILS/TIMER/libtimer.la \
$(top_builddir)/UTILS/libutils.la \
$(top_builddir)/UDP/libudpserver.la $(am__append_2)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = oaisim_mme.c
DIST_SOURCES = oaisim_mme.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @ADD_CFLAGS@ -I$(top_srcdir)/GTPV1-U -I$(top_srcdir)/SCTP \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_builddir)/S1AP/MESSAGES -I$(top_srcdir)/S1AP \
-I$(top_srcdir)/SGW-LITE -I$(top_srcdir)/UDP \
-I$(top_srcdir)/UTILS -I$(top_srcdir)/UTILS/TIMER \
$(am__append_1)
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
oaisim_mme_LDADD = $(top_builddir)/GTPV1-U/libgtpv1u.la \
$(top_builddir)/INTERTASK_INTERFACE/libitti.la \
$(top_builddir)/S1AP/libs1ap.la \
$(top_builddir)/SGW-LITE/libsgw_lite.la \
$(top_builddir)/SCTP/libsctpserver.la \
$(top_builddir)/UTILS/TIMER/libtimer.la \
$(top_builddir)/UTILS/libutils.la \
$(top_builddir)/UDP/libudpserver.la $(am__append_2)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu OAISIM_MME/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu OAISIM_MME/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
oaisim_mme$(EXEEXT): $(oaisim_mme_OBJECTS) $(oaisim_mme_DEPENDENCIES) $(EXTRA_oaisim_mme_DEPENDENCIES)
@rm -f oaisim_mme$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(oaisim_mme_OBJECTS) $(oaisim_mme_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oaisim_mme.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool cscopelist ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,82 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include "mme_config.h"
#include "gtpv1_u.h"
#include "intertask_interface.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"
#if defined(ENABLE_USE_HSS)
# include <freeDiameter/freeDiameter-host.h>
# include <freeDiameter/libfdcore.h>
# include "s6a_defs.h"
#endif
int main(int argc, char *argv[])
{
mme_config_t mme_config;
config_parse_opt_line(argc, argv, &mme_config);
fprintf(stdout, "Starting %s\n", PACKAGE_STRING);
/* Calling each layer init function */
log_init(&mme_config);
intertask_interface_init(&mme_config);
sctp_init(&mme_config);
udp_init(&mme_config);
s1ap_mme_init(&mme_config);
gtpv1_u_init(&mme_config);
timer_init(&mme_config);
#if defined(ENABLE_USE_HSS)
s6a_init(&mme_config);
#endif
sgw_lite_init(&mme_config);
while(1) {
sleep(1);
}
return 0;
}
-101
View File
@@ -1,101 +0,0 @@
===============================================================================
***************************** OAISIM_MME v0.1 *********************************
===============================================================================
MME + P-GW + S-GW implementation of 3GPP standard.
|-----| |------|
| MME | ----- | eNBs |
|-----| |------|
Controle plane:
eNB MME
|----------------------------|
| MME Application layer |
|----------------------------|
|------------|
| NAS |
|------------|
|------------| |------------| |------------| |------------|
| RRC | - | S1AP layer | ------ | S1AP layer | | Diameter |
|------------| |------------| |------------| |------------|
|------------| |----------------------------|
| 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 (under development)
- 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) link: http://lionet.info/soft/asn1c-0.9.21.tar.gz
- freediameter 1.1.5 patched (apply patch in DIAMETER/) with gnutls 3.1.0
link: http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz
Compilations steps for use with oaisim 4G emulation environment:
./autogen.sh
mkdir objs && cd objs
../configure [options]
make
Compilations steps for oaisim_mme use alone:
./autogen.sh
./configure [options]
make
Current options supported for configure:
--disable-r9: disable R9 S1AP messages (R9 enabled by default)
code build switch: UPDATE_RELEASE_9
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
Bugs:
report any bug to openair_admin@eurecom.fr
MME SCTP port for S1AP messages is 36412
-------- 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 Makefile and Makefile.in, they are re-generated by
autoconf/automake.
@@ -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
@@ -1,418 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = S1AP/MESSAGES/ASN1
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
BUILT_SOURCES = ieregen.stamp
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu S1AP/MESSAGES/ASN1/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu S1AP/MESSAGES/ASN1/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
cscope cscopelist:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile
installdirs:
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: all check install install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
clean-local distclean distclean-generic distclean-libtool \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am
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
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,201 +0,0 @@
-- **************************************************************
--
-- Common definitions
--
-- **************************************************************
S1AP-CommonDataTypes {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Criticality ::= ENUMERATED { reject, ignore, notify }
Presence ::= ENUMERATED { optional, conditional, mandatory }
PrivateIE-ID ::= CHOICE {
local INTEGER (0..65535),
global OBJECT IDENTIFIER
}
--ProcedureCode ::= INTEGER (0..255)
ProcedureCode ::= INTEGER {
id-HandoverPreparation(0),
id-HandoverResourceAllocation(1),
id-HandoverNotification(2),
id-PathSwitchRequest(3),
id-HandoverCancel(4),
id-E-RABSetup(5),
id-E-RABModify(6),
id-E-RABRelease(7),
id-E-RABReleaseIndication(8),
id-InitialContextSetup(9),
id-Paging(10),
id-downlinkNASTransport(11),
id-initialUEMessage(12),
id-uplinkNASTransport(13),
id-Reset(14),
id-ErrorIndication(15),
id-NASNonDeliveryIndication(16),
id-S1Setup(17),
id-UEContextReleaseRequest(18),
id-DownlinkS1cdma2000tunneling(19),
id-UplinkS1cdma2000tunneling(20),
id-UEContextModification(21),
id-UECapabilityInfoIndication(22),
id-UEContextRelease(23),
id-eNBStatusTransfer(24),
id-MMEStatusTransfer(25),
id-DeactivateTrace(26),
id-TraceStart(27),
id-TraceFailureIndication(28),
id-ENBConfigurationUpdate(29),
id-MMEConfigurationUpdate(30),
id-LocationReportingControl(31),
id-LocationReportingFailureIndication(32),
id-LocationReport(33),
id-OverloadStart(34),
id-OverloadStop(35),
id-WriteReplaceWarning(36),
id-eNBDirectInformationTransfer(37),
id-MMEDirectInformationTransfer(38),
id-PrivateMessage(39),
id-eNBConfigurationTransfer(40),
id-MMEConfigurationTransfer(41),
id-CellTrafficTrace(42)
} (0..255)
ProtocolExtensionID ::= INTEGER (0..65535)
ProtocolIE-ID ::= INTEGER {
id-MME-UE-S1AP-ID(0),
id-HandoverType(1),
id-Cause(2),
id-SourceID(3),
id-TargetID (4),
id-eNB-UE-S1AP-ID(8),
id-E-RABSubjecttoDataForwardingList(12),
id-E-RABtoReleaseListHOCmd(13),
id-E-RABDataForwardingItem(14),
id-E-RABReleaseItemBearerRelComp(15),
id-E-RABToBeSetupListBearerSUReq(16),
id-E-RABToBeSetupItemBearerSUReq(17),
id-E-RABAdmittedList(18),
id-E-RABFailedToSetupListHOReqAck(19),
id-E-RABAdmittedItem(20),
id-E-RABFailedtoSetupItemHOReqAck(21),
id-E-RABToBeSwitchedDLList(22),
id-E-RABToBeSwitchedDLItem(23),
id-E-RABToBeSetupListCtxtSUReq(24),
id-TraceActivation(25),
id-NAS-PDU(26),
id-E-RABToBeSetupItemHOReq(27),
id-E-RABSetupListBearerSURes(28),
id-E-RABFailedToSetupListBearerSURes(29),
id-E-RABToBeModifiedListBearerModReq(30),
id-E-RABModifyListBearerModRes(31),
id-E-RABFailedToModifyList(32),
id-E-RABToBeReleasedList(33),
id-E-RABFailedToReleaseList(34),
id-E-RABItem(35),
id-E-RABToBeModifiedItemBearerModReq(36),
id-E-RABModifyItemBearerModRes(37),
id-E-RABReleaseItem(38),
id-E-RABSetupItemBearerSURes(39),
id-SecurityContext(40),
id-HandoverRestrictionList(41),
id-UEPagingID(43),
id-pagingDRX(44),
id-TAIList(46),
id-TAIItem(47),
id-E-RABFailedToSetupListCtxtSURes(48),
id-E-RABReleaseItemHOCmd(49),
id-E-RABSetupItemCtxtSURes(50),
id-E-RABSetupListCtxtSURes(51),
id-E-RABToBeSetupItemCtxtSUReq(52),
id-E-RABToBeSetupListHOReq(53),
id-GERANtoLTEHOInformationRes(55),
id-UTRANtoLTEHOInformationRes(57),
id-CriticalityDiagnostics(58),
id-Global-ENB-ID(59),
id-eNBname(60),
id-MMEname(61),
id-ServedPLMNs(63),
id-SupportedTAs(64),
id-TimeToWait(65),
id-uEaggregateMaximumBitrate(66),
id-TAI(67),
id-E-RABReleaseListBearerRelComp(69),
id-cdma2000PDU(70),
id-cdma2000RATType(71),
id-cdma2000SectorID(72),
id-SecurityKey(73),
id-UERadioCapability(74),
id-GUMMEI-ID(75),
id-E-RABInformationListItem(78),
id-Direct-Forwarding-Path-Availability(79),
id-UEIdentityIndexValue(80),
id-cdma2000HOStatus(83),
id-cdma2000HORequiredIndication(84),
id-E-UTRAN-Trace-ID(86),
id-RelativeMMECapacity(87),
id-SourceMME-UE-S1AP-ID(88),
id-Bearers-SubjectToStatusTransfer-Item(89),
id-eNB-StatusTransfer-TransparentContainer(90),
id-UE-associatedLogicalS1-ConnectionItem(91),
id-ResetType(92),
id-UE-associatedLogicalS1-ConnectionListResAck(93),
id-E-RABToBeSwitchedULItem(94),
id-E-RABToBeSwitchedULList(95),
id-S-TMSI(96),
id-cdma2000OneXRAND(97),
id-RequestType(98),
id-UE-S1AP-IDs(99),
id-EUTRAN-CGI(100),
id-OverloadResponse(101),
id-cdma2000OneXSRVCCInfo(102),
id-E-RABFailedToBeReleasedList(103),
id-Source-ToTarget-TransparentContainer(104),
id-ServedGUMMEIs(105),
id-SubscriberProfileIDforRFP(106),
id-UESecurityCapabilities(107),
id-CSFallbackIndicator(108),
id-CNDomain(109),
id-E-RABReleasedList(110),
id-MessageIdentifier(111),
id-SerialNumber(112),
id-WarningAreaList(113),
id-RepetitionPeriod(114),
id-NumberofBroadcastRequest(115),
id-WarningType(116),
id-WarningSecurityInfo(117),
id-DataCodingScheme(118),
id-WarningMessageContents(119),
id-BroadcastCompletedAreaList(120),
id-Inter-SystemInformationTransferTypeEDT(121),
id-Inter-SystemInformationTransferTypeMDT(122),
id-Target-ToSource-TransparentContainer(123),
id-SRVCCOperationPossible(124),
id-SRVCCHOIndication(125),
id-NAS-DownlinkCount(126),
id-CSG-Id(127),
id-CSG-IdList(128),
id-SONConfigurationTransferECT(129),
id-SONConfigurationTransferMCT(130),
id-TraceCollectionEntityIPAddress(131),
id-MSClassmark2(132),
id-MSClassmark3(133),
id-RRC-Establishment-Cause(134),
id-NASSecurityParametersfromE-UTRAN(135),
id-NASSecurityParameterstoE-UTRAN(136),
id-DefaultPagingDRX(137),
id-Source-ToTarget-TransparentContainer-Secondary(138),
id-Target-ToSource-TransparentContainer-Secondary(139)
} (0..65535)
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome }
END
@@ -1,249 +0,0 @@
-- **************************************************************
--
-- Constant definitions
--
-- **************************************************************
S1AP-Constants {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
ProcedureCode,
ProtocolIE-ID
FROM S1AP-CommonDataTypes;
-- **************************************************************
--
-- Elementary Procedures
--
-- **************************************************************
id-HandoverPreparation ProcedureCode ::= 0
id-HandoverResourceAllocation ProcedureCode ::= 1
id-HandoverNotification ProcedureCode ::= 2
id-PathSwitchRequest ProcedureCode ::= 3
id-HandoverCancel ProcedureCode ::= 4
id-E-RABSetup ProcedureCode ::= 5
id-E-RABModify ProcedureCode ::= 6
id-E-RABRelease ProcedureCode ::= 7
id-E-RABReleaseIndication ProcedureCode ::= 8
id-InitialContextSetup ProcedureCode ::= 9
id-Paging ProcedureCode ::= 10
id-downlinkNASTransport ProcedureCode ::= 11
id-initialUEMessage ProcedureCode ::= 12
id-uplinkNASTransport ProcedureCode ::= 13
id-Reset ProcedureCode ::= 14
id-ErrorIndication ProcedureCode ::= 15
id-NASNonDeliveryIndication ProcedureCode ::= 16
id-S1Setup ProcedureCode ::= 17
id-UEContextReleaseRequest ProcedureCode ::= 18
id-DownlinkS1cdma2000tunneling ProcedureCode ::= 19
id-UplinkS1cdma2000tunneling ProcedureCode ::= 20
id-UEContextModification ProcedureCode ::= 21
id-UECapabilityInfoIndication ProcedureCode ::= 22
id-UEContextRelease ProcedureCode ::= 23
id-eNBStatusTransfer ProcedureCode ::= 24
id-MMEStatusTransfer ProcedureCode ::= 25
id-DeactivateTrace ProcedureCode ::= 26
id-TraceStart ProcedureCode ::= 27
id-TraceFailureIndication ProcedureCode ::= 28
id-ENBConfigurationUpdate ProcedureCode ::= 29
id-MMEConfigurationUpdate ProcedureCode ::= 30
id-LocationReportingControl ProcedureCode ::= 31
id-LocationReportingFailureIndication ProcedureCode ::= 32
id-LocationReport ProcedureCode ::= 33
id-OverloadStart ProcedureCode ::= 34
id-OverloadStop ProcedureCode ::= 35
id-WriteReplaceWarning ProcedureCode ::= 36
id-eNBDirectInformationTransfer ProcedureCode ::= 37
id-MMEDirectInformationTransfer ProcedureCode ::= 38
id-PrivateMessage ProcedureCode ::= 39
id-eNBConfigurationTransfer ProcedureCode ::= 40
id-MMEConfigurationTransfer ProcedureCode ::= 41
id-CellTrafficTrace ProcedureCode ::= 42
-- **************************************************************
--
-- Extension constants
--
-- **************************************************************
maxPrivateIEs INTEGER ::= 65535
maxProtocolExtensions INTEGER ::= 65535
maxProtocolIEs INTEGER ::= 65535
-- **************************************************************
--
-- Lists
--
-- **************************************************************
maxNrOfCSGs INTEGER ::= 256
maxNrOfE-RABs INTEGER ::= 256
maxnoofTAIs INTEGER ::= 256
maxnoofTACs INTEGER ::= 256
maxNrOfErrors INTEGER ::= 256
maxnoofBPLMNs INTEGER ::= 6
maxnoofPLMNsPerMME INTEGER ::= 32
maxnoofEPLMNs INTEGER ::= 15
maxnoofEPLMNsPlusOne INTEGER ::= 16
maxnoofForbLACs INTEGER ::= 4096
maxnoofForbTACs INTEGER ::= 4096
maxNrOfIndividualS1ConnectionsToReset INTEGER ::= 256
maxnoofCells INTEGER ::= 16
maxnoofTAIforWarning INTEGER ::= 65535
maxnoofCellID INTEGER ::= 65535
maxnoofEmergencyAreaID INTEGER ::= 65535
maxnoofCellinTAI INTEGER ::= 65535
maxnoofCellinEAI INTEGER ::= 65535
maxnoofeNBX2TLAs INTEGER ::= 2
maxnoofRATs INTEGER ::= 8
maxnoofGroupIDs INTEGER ::= 65535
maxnoofMMECs INTEGER ::= 256
-- **************************************************************
--
-- IEs
--
-- **************************************************************
id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0
id-HandoverType ProtocolIE-ID ::= 1
id-Cause ProtocolIE-ID ::= 2
id-SourceID ProtocolIE-ID ::= 3
id-TargetID ProtocolIE-ID ::= 4
id-eNB-UE-S1AP-ID ProtocolIE-ID ::= 8
id-E-RABSubjecttoDataForwardingList ProtocolIE-ID ::= 12
id-E-RABtoReleaseListHOCmd ProtocolIE-ID ::= 13
id-E-RABDataForwardingItem ProtocolIE-ID ::= 14
id-E-RABReleaseItemBearerRelComp ProtocolIE-ID ::= 15
id-E-RABToBeSetupListBearerSUReq ProtocolIE-ID ::= 16
id-E-RABToBeSetupItemBearerSUReq ProtocolIE-ID ::= 17
id-E-RABAdmittedList ProtocolIE-ID ::= 18
id-E-RABFailedToSetupListHOReqAck ProtocolIE-ID ::= 19
id-E-RABAdmittedItem ProtocolIE-ID ::= 20
id-E-RABFailedtoSetupItemHOReqAck ProtocolIE-ID ::= 21
id-E-RABToBeSwitchedDLList ProtocolIE-ID ::= 22
id-E-RABToBeSwitchedDLItem ProtocolIE-ID ::= 23
id-E-RABToBeSetupListCtxtSUReq ProtocolIE-ID ::= 24
id-TraceActivation ProtocolIE-ID ::= 25
id-NAS-PDU ProtocolIE-ID ::= 26
id-E-RABToBeSetupItemHOReq ProtocolIE-ID ::= 27
id-E-RABSetupListBearerSURes ProtocolIE-ID ::= 28
id-E-RABFailedToSetupListBearerSURes ProtocolIE-ID ::= 29
id-E-RABToBeModifiedListBearerModReq ProtocolIE-ID ::= 30
id-E-RABModifyListBearerModRes ProtocolIE-ID ::= 31
id-E-RABFailedToModifyList ProtocolIE-ID ::= 32
id-E-RABToBeReleasedList ProtocolIE-ID ::= 33
id-E-RABFailedToReleaseList ProtocolIE-ID ::= 34
id-E-RABItem ProtocolIE-ID ::= 35
id-E-RABToBeModifiedItemBearerModReq ProtocolIE-ID ::= 36
id-E-RABModifyItemBearerModRes ProtocolIE-ID ::= 37
id-E-RABReleaseItem ProtocolIE-ID ::= 38
id-E-RABSetupItemBearerSURes ProtocolIE-ID ::= 39
id-SecurityContext ProtocolIE-ID ::= 40
id-HandoverRestrictionList ProtocolIE-ID ::= 41
id-UEPagingID ProtocolIE-ID ::= 43
id-pagingDRX ProtocolIE-ID ::= 44
id-TAIList ProtocolIE-ID ::= 46
id-TAIItem ProtocolIE-ID ::= 47
id-E-RABFailedToSetupListCtxtSURes ProtocolIE-ID ::= 48
id-E-RABReleaseItemHOCmd ProtocolIE-ID ::= 49
id-E-RABSetupItemCtxtSURes ProtocolIE-ID ::= 50
id-E-RABSetupListCtxtSURes ProtocolIE-ID ::= 51
id-E-RABToBeSetupItemCtxtSUReq ProtocolIE-ID ::= 52
id-E-RABToBeSetupListHOReq ProtocolIE-ID ::= 53
id-GERANtoLTEHOInformationRes ProtocolIE-ID ::= 55
id-UTRANtoLTEHOInformationRes ProtocolIE-ID ::= 57
id-CriticalityDiagnostics ProtocolIE-ID ::= 58
id-Global-ENB-ID ProtocolIE-ID ::= 59
id-eNBname ProtocolIE-ID ::= 60
id-MMEname ProtocolIE-ID ::= 61
id-ServedPLMNs ProtocolIE-ID ::= 63
id-SupportedTAs ProtocolIE-ID ::= 64
id-TimeToWait ProtocolIE-ID ::= 65
id-uEaggregateMaximumBitrate ProtocolIE-ID ::= 66
id-TAI ProtocolIE-ID ::= 67
id-E-RABReleaseListBearerRelComp ProtocolIE-ID ::= 69
id-cdma2000PDU ProtocolIE-ID ::= 70
id-cdma2000RATType ProtocolIE-ID ::= 71
id-cdma2000SectorID ProtocolIE-ID ::= 72
id-SecurityKey ProtocolIE-ID ::= 73
id-UERadioCapability ProtocolIE-ID ::= 74
id-GUMMEI-ID ProtocolIE-ID ::= 75
id-E-RABInformationListItem ProtocolIE-ID ::= 78
id-Direct-Forwarding-Path-Availability ProtocolIE-ID ::= 79
id-UEIdentityIndexValue ProtocolIE-ID ::= 80
id-cdma2000HOStatus ProtocolIE-ID ::= 83
id-cdma2000HORequiredIndication ProtocolIE-ID ::= 84
id-E-UTRAN-Trace-ID ProtocolIE-ID ::= 86
id-RelativeMMECapacity ProtocolIE-ID ::= 87
id-SourceMME-UE-S1AP-ID ProtocolIE-ID ::= 88
id-Bearers-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 89
id-eNB-StatusTransfer-TransparentContainer ProtocolIE-ID ::= 90
id-UE-associatedLogicalS1-ConnectionItem ProtocolIE-ID ::= 91
id-ResetType ProtocolIE-ID ::= 92
id-UE-associatedLogicalS1-ConnectionListResAck ProtocolIE-ID ::= 93
id-E-RABToBeSwitchedULItem ProtocolIE-ID ::= 94
id-E-RABToBeSwitchedULList ProtocolIE-ID ::= 95
id-S-TMSI ProtocolIE-ID ::= 96
id-cdma2000OneXRAND ProtocolIE-ID ::= 97
id-RequestType ProtocolIE-ID ::= 98
id-UE-S1AP-IDs ProtocolIE-ID ::= 99
id-EUTRAN-CGI ProtocolIE-ID ::= 100
id-OverloadResponse ProtocolIE-ID ::= 101
id-cdma2000OneXSRVCCInfo ProtocolIE-ID ::= 102
id-E-RABFailedToBeReleasedList ProtocolIE-ID ::= 103
id-Source-ToTarget-TransparentContainer ProtocolIE-ID ::= 104
id-ServedGUMMEIs ProtocolIE-ID ::= 105
id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 106
id-UESecurityCapabilities ProtocolIE-ID ::= 107
id-CSFallbackIndicator ProtocolIE-ID ::= 108
id-CNDomain ProtocolIE-ID ::= 109
id-E-RABReleasedList ProtocolIE-ID ::= 110
id-MessageIdentifier ProtocolIE-ID ::= 111
id-SerialNumber ProtocolIE-ID ::= 112
id-WarningAreaList ProtocolIE-ID ::= 113
id-RepetitionPeriod ProtocolIE-ID ::= 114
id-NumberofBroadcastRequest ProtocolIE-ID ::= 115
id-WarningType ProtocolIE-ID ::= 116
id-WarningSecurityInfo ProtocolIE-ID ::= 117
id-DataCodingScheme ProtocolIE-ID ::= 118
id-WarningMessageContents ProtocolIE-ID ::= 119
id-BroadcastCompletedAreaList ProtocolIE-ID ::= 120
id-Inter-SystemInformationTransferTypeEDT ProtocolIE-ID ::= 121
id-Inter-SystemInformationTransferTypeMDT ProtocolIE-ID ::= 122
id-Target-ToSource-TransparentContainer ProtocolIE-ID ::= 123
id-SRVCCOperationPossible ProtocolIE-ID ::= 124
id-SRVCCHOIndication ProtocolIE-ID ::= 125
id-NAS-DownlinkCount ProtocolIE-ID ::= 126
id-CSG-Id ProtocolIE-ID ::= 127
id-CSG-IdList ProtocolIE-ID ::= 128
id-SONConfigurationTransferECT ProtocolIE-ID ::= 129
id-SONConfigurationTransferMCT ProtocolIE-ID ::= 130
id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 131
id-MSClassmark2 ProtocolIE-ID ::= 132
id-MSClassmark3 ProtocolIE-ID ::= 133
id-RRC-Establishment-Cause ProtocolIE-ID ::= 134
id-NASSecurityParametersfromE-UTRAN ProtocolIE-ID ::= 135
id-NASSecurityParameterstoE-UTRAN ProtocolIE-ID ::= 136
id-DefaultPagingDRX ProtocolIE-ID ::= 137
id-Source-ToTarget-TransparentContainer-Secondary ProtocolIE-ID ::= 138
id-Target-ToSource-TransparentContainer-Secondary ProtocolIE-ID ::= 139
END
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,663 +0,0 @@
S1AP-PDU {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1)
}
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
UEAggregateMaximumBitrate,
Cause,
Cdma2000HORequiredIndication,
Cdma2000HOStatus,
Cdma2000OneXSRVCCInfo,
Cdma2000OneXRAND,
Cdma2000PDU,
Cdma2000RATType,
Cdma2000SectorID,
CNDomain,
CriticalityDiagnostics,
CSFallbackIndicator,
CSG-Id,
CSG-IdList,
Direct-Forwarding-Path-Availability,
Global-ENB-ID,
EUTRAN-CGI,
ENBname,
ENB-StatusTransfer-TransparentContainer,
ENB-UE-S1AP-ID,
GTP-TEID,
GUMMEI,
HandoverRestrictionList,
HandoverType,
MMEname,
MME-UE-S1AP-ID,
MSClassmark2,
MSClassmark3,
NAS-PDU,
NASSecurityParametersfromE-UTRAN,
NASSecurityParameterstoE-UTRAN,
OverloadResponse,
PagingDRX,
PLMNidentity,
RIMTransfer,
RelativeMMECapacity,
RequestType,
E-RAB-ID,
E-RABLevelQoSParameters,
E-RABList,
SecurityKey,
SecurityContext,
ServedGUMMEIs,
SONConfigurationTransfer,
Source-ToTarget-TransparentContainer,
SourceBSS-ToTargetBSS-TransparentContainer,
SourceeNB-ToTargeteNB-TransparentContainer,
SourceRNC-ToTargetRNC-TransparentContainer,
SubscriberProfileIDforRFP,
SRVCCOperationPossible,
SRVCCHOIndication,
SupportedTAs,
TAI,
Target-ToSource-TransparentContainer,
TargetBSS-ToSourceBSS-TransparentContainer,
TargeteNB-ToSourceeNB-TransparentContainer,
TargetID,
TargetRNC-ToSourceRNC-TransparentContainer,
TimeToWait,
TraceActivation,
E-UTRAN-Trace-ID,
TransportLayerAddress,
UEIdentityIndexValue,
UEPagingID,
UERadioCapability,
UE-S1AP-IDs,
UE-associatedLogicalS1-ConnectionItem,
UESecurityCapabilities,
S-TMSI,
MessageIdentifier,
SerialNumber,
WarningAreaList,
RepetitionPeriod,
NumberofBroadcastRequest,
WarningType,
WarningSecurityInfo,
DataCodingScheme,
WarningMessageContents,
BroadcastCompletedAreaList,
RRC-Establishment-Cause
FROM S1AP-IEs
ProcedureCode,
Criticality,
ProtocolIE-ID
FROM S1AP-CommonDataTypes
id-uEaggregateMaximumBitrate,
id-Cause,
id-cdma2000HORequiredIndication,
id-cdma2000HOStatus,
id-cdma2000OneXSRVCCInfo,
id-cdma2000OneXRAND,
id-cdma2000PDU,
id-cdma2000RATType,
id-cdma2000SectorID,
id-CNDomain,
id-CriticalityDiagnostics,
id-CSFallbackIndicator,
id-CSG-Id,
id-CSG-IdList,
id-DefaultPagingDRX,
id-Direct-Forwarding-Path-Availability,
id-Global-ENB-ID,
id-EUTRAN-CGI,
id-eNBname,
id-eNB-StatusTransfer-TransparentContainer,
id-eNB-UE-S1AP-ID,
id-GERANtoLTEHOInformationRes,
id-GUMMEI-ID,
id-HandoverRestrictionList,
id-HandoverType,
id-InitialContextSetup,
id-Inter-SystemInformationTransferTypeEDT,
id-Inter-SystemInformationTransferTypeMDT,
id-NAS-DownlinkCount,
id-MMEname,
id-MME-UE-S1AP-ID,
id-MSClassmark2,
id-MSClassmark3,
id-NAS-PDU,
id-NASSecurityParametersfromE-UTRAN,
id-NASSecurityParameterstoE-UTRAN,
id-OverloadResponse,
id-pagingDRX,
id-RelativeMMECapacity,
id-RequestType,
id-E-RABAdmittedItem,
id-E-RABAdmittedList,
id-E-RABDataForwardingItem,
id-E-RABFailedToModifyList,
id-E-RABFailedToReleaseList,
id-E-RABFailedtoSetupItemHOReqAck,
id-E-RABFailedToSetupListBearerSURes,
id-E-RABFailedToSetupListCtxtSURes,
id-E-RABFailedToSetupListHOReqAck,
id-E-RABFailedToBeReleasedList,
id-E-RABModify,
id-E-RABModifyItemBearerModRes,
id-E-RABModifyListBearerModRes,
id-E-RABRelease,
id-E-RABReleaseItemBearerRelComp,
id-E-RABReleaseItemHOCmd,
id-E-RABReleaseListBearerRelComp,
id-E-RABReleaseIndication,
id-E-RABSetup,
id-E-RABSetupItemBearerSURes,
id-E-RABSetupItemCtxtSURes,
id-E-RABSetupListBearerSURes,
id-E-RABSetupListCtxtSURes,
id-E-RABSubjecttoDataForwardingList,
id-E-RABToBeModifiedItemBearerModReq,
id-E-RABToBeModifiedListBearerModReq,
id-E-RABToBeReleasedList,
id-E-RABReleasedList,
id-E-RABToBeSetupItemBearerSUReq,
id-E-RABToBeSetupItemCtxtSUReq,
id-E-RABToBeSetupItemHOReq,
id-E-RABToBeSetupListBearerSUReq,
id-E-RABToBeSetupListCtxtSUReq,
id-E-RABToBeSetupListHOReq,
id-E-RABToBeSwitchedDLItem,
id-E-RABToBeSwitchedDLList,
id-E-RABToBeSwitchedULList,
id-E-RABToBeSwitchedULItem,
id-E-RABtoReleaseListHOCmd,
id-SecurityKey,
id-SecurityContext,
id-ServedGUMMEIs,
id-SONConfigurationTransferECT,
id-SONConfigurationTransferMCT,
id-Source-ToTarget-TransparentContainer,
id-Source-ToTarget-TransparentContainer-Secondary,
id-SourceMME-UE-S1AP-ID,
id-SRVCCOperationPossible,
id-SRVCCHOIndication,
id-SubscriberProfileIDforRFP,
id-SupportedTAs,
id-S-TMSI,
id-TAI,
id-TAIItem,
id-TAIList,
id-Target-ToSource-TransparentContainer,
id-Target-ToSource-TransparentContainer-Secondary,
id-TargetID,
id-TimeToWait,
id-TraceActivation,
id-E-UTRAN-Trace-ID,
id-UEIdentityIndexValue,
id-UEPagingID,
id-UERadioCapability,
id-UTRANtoLTEHOInformationRes,
id-UE-associatedLogicalS1-ConnectionListResAck,
id-UE-associatedLogicalS1-ConnectionItem,
id-UESecurityCapabilities,
id-UE-S1AP-IDs,
id-ResetType,
id-MessageIdentifier,
id-SerialNumber,
id-WarningAreaList,
id-RepetitionPeriod,
id-NumberofBroadcastRequest,
id-WarningType,
id-WarningSecurityInfo,
id-DataCodingScheme,
id-WarningMessageContents,
id-BroadcastCompletedAreaList,
id-RRC-Establishment-Cause,
id-TraceCollectionEntityIPAddress,
maxnoofTAIs,
maxNrOfErrors,
maxNrOfE-RABs,
maxNrOfIndividualS1ConnectionsToReset,
maxnoofEmergencyAreaID,
maxnoofCellID,
maxnoofTAIforWarning,
maxnoofCellinTAI,
maxnoofCellinEAI,
id-CellTrafficTrace,
id-DeactivateTrace,
id-downlinkNASTransport,
id-DownlinkS1cdma2000tunneling,
id-eNBStatusTransfer,
id-ErrorIndication,
id-HandoverCancel,
id-HandoverNotification,
id-HandoverPreparation,
id-HandoverResourceAllocation,
id-InitialContextSetup,
id-initialUEMessage,
id-ENBConfigurationUpdate,
id-LocationReportingControl,
id-LocationReportingFailureIndication,
id-LocationReport,
id-eNBDirectInformationTransfer,
id-MMEConfigurationUpdate,
id-MMEDirectInformationTransfer,
id-MMEStatusTransfer,
id-NASNonDeliveryIndication,
id-OverloadStart,
id-OverloadStop,
id-Paging,
id-PathSwitchRequest,
id-PrivateMessage,
id-Reset,
id-S1Setup,
id-E-RABModify,
id-E-RABRelease,
id-E-RABReleaseIndication,
id-E-RABSetup,
id-TraceFailureIndication,
id-TraceStart,
id-UECapabilityInfoIndication,
id-UEContextModification,
id-UEContextRelease,
id-UEContextReleaseRequest,
id-uplinkNASTransport,
id-UplinkS1cdma2000tunneling,
id-WriteReplaceWarning,
id-eNBConfigurationTransfer,
id-MMEConfigurationTransfer,
maxProtocolIEs
FROM S1AP-Constants;
-- **************************************************************
--
-- S1 SETUP ELEMENTARY PROCEDURE
--
-- **************************************************************
S1AP-ELEMENTARY-PROCEDURE ::= CLASS {
&InitiatingMessage ,
&SuccessfulOutcome OPTIONAL,
&UnsuccessfulOutcome OPTIONAL,
&procedureCode ProcedureCode UNIQUE,
&criticality Criticality DEFAULT ignore
}
WITH SYNTAX {
INITIATING MESSAGE &InitiatingMessage
[SUCCESSFUL OUTCOME &SuccessfulOutcome]
[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
PROCEDURE CODE &procedureCode
[CRITICALITY &criticality]
}
S1AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome,
...
}
InitiatingMessage ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
SuccessfulOutcome ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
UnsuccessfulOutcome ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
HandoverRequired ::= SEQUENCE {
handoverRequired-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCommand ::= SEQUENCE {
handoverCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverPreparationFailure ::= SEQUENCE {
handoverPreparationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverRequest ::= SEQUENCE {
handoverRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverRequestAcknowledge ::= SEQUENCE {
handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverFailure ::= SEQUENCE {
handoverFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverNotify ::= SEQUENCE {
handoverNotify-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequest ::= SEQUENCE {
pathSwitchRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequestAcknowledge ::= SEQUENCE {
pathSwitchRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequestFailure ::= SEQUENCE {
pathSwitchRequestFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABSetupRequest ::= SEQUENCE {
e-RABSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABSetupResponse ::= SEQUENCE {
e-RABSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABModifyRequest ::= SEQUENCE {
e-RABModifyRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABModifyResponse ::= SEQUENCE {
e-RABModifyResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseIndication ::= SEQUENCE {
e-RABReleaseIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseCommand ::= SEQUENCE {
e-RABReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseResponse ::= SEQUENCE {
e-RABReleaseResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupRequest ::= SEQUENCE {
initialContextSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupResponse ::= SEQUENCE {
initialContextSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupFailure ::= SEQUENCE {
initialContextSetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseRequest ::= SEQUENCE {
ueContextReleaseRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
Paging ::= SEQUENCE {
paging-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkNASTransport ::= SEQUENCE {
downlinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialUEMessage ::= SEQUENCE {
initialUEMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkNASTransport ::= SEQUENCE {
uplinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
NASNonDeliveryIndication ::= SEQUENCE {
nasNonDeliveryIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCancel ::= SEQUENCE {
handoverCancel-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCancelAcknowledge ::= SEQUENCE {
handoverCancelAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
Reset ::= SEQUENCE {
reset-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ResetAcknowledge ::= SEQUENCE {
resetAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupResponse ::= SEQUENCE {
s1SetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupRequest ::= SEQUENCE {
s1SetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupFailure ::= SEQUENCE
{
s1SetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ErrorIndication ::= SEQUENCE {
errorIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdate ::= SEQUENCE {
eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdateAcknowledge ::= SEQUENCE {
eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdateFailure ::= SEQUENCE {
eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdate ::= SEQUENCE {
mmeConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdateAcknowledge ::= SEQUENCE {
mmeConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdateFailure ::= SEQUENCE {
mmeConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkS1cdma2000tunneling ::= SEQUENCE {
downlinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkS1cdma2000tunneling ::= SEQUENCE {
uplinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationRequest ::= SEQUENCE {
ueContextModificationRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationResponse ::= SEQUENCE {
ueContextModificationResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationFailure ::= SEQUENCE {
ueContextModificationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UECapabilityInfoIndication ::= SEQUENCE {
ueCapabilityInfoIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseCommand ::= SEQUENCE {
ueContextReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseComplete ::= SEQUENCE {
ueContextReleaseComplete-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBStatusTransfer ::= SEQUENCE {
eNBStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEStatusTransfer ::= SEQUENCE {
mmeStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DeactivateTrace ::= SEQUENCE {
deactivateTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
TraceStart ::= SEQUENCE {
traceStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
TraceFailureIndication ::= SEQUENCE {
traceFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
CellTrafficTrace ::= SEQUENCE {
cellTrafficTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReportingControl ::= SEQUENCE {
locationReportingControl-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReportingFailureIndication ::= SEQUENCE {
locationReportingFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReport ::= SEQUENCE {
locationReport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
OverloadStart ::= SEQUENCE {
overloadStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
OverloadStop ::= SEQUENCE {
overloadStop-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
WriteReplaceWarningRequest ::= SEQUENCE {
writeReplaceWarningRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
WriteReplaceWarningResponse ::= SEQUENCE {
writeReplaceWarningResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBDirectInformationTransfer ::= SEQUENCE {
eNBDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEDirectInformationTransfer ::= SEQUENCE {
mmeDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationTransfer ::= SEQUENCE {
eNBConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationTransfer ::= SEQUENCE {
mmeConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PrivateMessage ::= SEQUENCE {
privateMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
IE ::= SEQUENCE {
id ProtocolIE-ID,
criticality Criticality,
value ANY
}
END
@@ -1,217 +0,0 @@
-- **************************************************************
--
-- Common definitions
--
-- **************************************************************
S1AP-CommonDataTypes {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Criticality ::= ENUMERATED { reject, ignore, notify }
Presence ::= ENUMERATED { optional, conditional, mandatory }
PrivateIE-ID ::= CHOICE {
local INTEGER (0..65535),
global OBJECT IDENTIFIER
}
ProcedureCode ::= INTEGER {
id-HandoverPreparation(0),
id-HandoverResourceAllocation(1),
id-HandoverNotification(2),
id-PathSwitchRequest(3),
id-HandoverCancel(4),
id-E-RABSetup(5),
id-E-RABModify(6),
id-E-RABRelease(7),
id-E-RABReleaseIndication(8),
id-InitialContextSetup(9),
id-Paging(10),
id-downlinkNASTransport(11),
id-initialUEMessage(12),
id-uplinkNASTransport(13),
id-Reset(14),
id-ErrorIndication(15),
id-NASNonDeliveryIndication(16),
id-S1Setup(17),
id-UEContextReleaseRequest(18),
id-DownlinkS1cdma2000tunneling(19),
id-UplinkS1cdma2000tunneling(20),
id-UEContextModification(21),
id-UECapabilityInfoIndication(22),
id-UEContextRelease(23),
id-eNBStatusTransfer(24),
id-MMEStatusTransfer(25),
id-DeactivateTrace(26),
id-TraceStart(27),
id-TraceFailureIndication(28),
id-ENBConfigurationUpdate(29),
id-MMEConfigurationUpdate(30),
id-LocationReportingControl(31),
id-LocationReportingFailureIndication(32),
id-LocationReport(33),
id-OverloadStart(34),
id-OverloadStop(35),
id-WriteReplaceWarning(36),
id-eNBDirectInformationTransfer(37),
id-MMEDirectInformationTransfer(38),
id-PrivateMessage(39),
id-eNBConfigurationTransfer(40),
id-MMEConfigurationTransfer(41),
id-CellTrafficTrace(42),
id-Kill(43),
id-downlinkUEAssociatedLPPaTransport(44),
id-uplinkUEAssociatedLPPaTransport(45),
id-downlinkNonUEAssociatedLPPaTransport(46),
id-uplinkNonUEAssociatedLPPaTransport(47)
} (0..255)
ProtocolExtensionID ::= INTEGER (0..65535)
ProtocolIE-ID ::= INTEGER {
id-MME-UE-S1AP-ID(0),
id-HandoverType(1),
id-Cause(2),
id-SourceID(3),
id-TargetID (4),
id-eNB-UE-S1AP-ID(8),
id-E-RABSubjecttoDataForwardingList(12),
id-E-RABtoReleaseListHOCmd(13),
id-E-RABDataForwardingItem(14),
id-E-RABReleaseItemBearerRelComp(15),
id-E-RABToBeSetupListBearerSUReq(16),
id-E-RABToBeSetupItemBearerSUReq(17),
id-E-RABAdmittedList(18),
id-E-RABFailedToSetupListHOReqAck(19),
id-E-RABAdmittedItem(20),
id-E-RABFailedtoSetupItemHOReqAck(21),
id-E-RABToBeSwitchedDLList(22),
id-E-RABToBeSwitchedDLItem(23),
id-E-RABToBeSetupListCtxtSUReq(24),
id-TraceActivation(25),
id-NAS-PDU(26),
id-E-RABToBeSetupItemHOReq(27),
id-E-RABSetupListBearerSURes(28),
id-E-RABFailedToSetupListBearerSURes(29),
id-E-RABToBeModifiedListBearerModReq(30),
id-E-RABModifyListBearerModRes(31),
id-E-RABFailedToModifyList(32),
id-E-RABToBeReleasedList(33),
id-E-RABFailedToReleaseList(34),
id-E-RABItem(35),
id-E-RABToBeModifiedItemBearerModReq(36),
id-E-RABModifyItemBearerModRes(37),
id-E-RABReleaseItem(38),
id-E-RABSetupItemBearerSURes(39),
id-SecurityContext(40),
id-HandoverRestrictionList(41),
id-UEPagingID(43),
id-pagingDRX(44),
id-TAIList(46),
id-TAIItem(47),
id-E-RABFailedToSetupListCtxtSURes(48),
id-E-RABReleaseItemHOCmd(49),
id-E-RABSetupItemCtxtSURes(50),
id-E-RABSetupListCtxtSURes(51),
id-E-RABToBeSetupItemCtxtSUReq(52),
id-E-RABToBeSetupListHOReq(53),
id-GERANtoLTEHOInformationRes(55),
id-UTRANtoLTEHOInformationRes(57),
id-CriticalityDiagnostics(58),
id-Global-ENB-ID(59),
id-eNBname(60),
id-MMEname(61),
id-ServedPLMNs(63),
id-SupportedTAs(64),
id-TimeToWait(65),
id-uEaggregateMaximumBitrate(66),
id-TAI(67),
id-E-RABReleaseListBearerRelComp(69),
id-cdma2000PDU(70),
id-cdma2000RATType(71),
id-cdma2000SectorID(72),
id-SecurityKey(73),
id-UERadioCapability(74),
id-GUMMEI-ID(75),
id-E-RABInformationListItem(78),
id-Direct-Forwarding-Path-Availability(79),
id-UEIdentityIndexValue(80),
id-cdma2000HOStatus(83),
id-cdma2000HORequiredIndication(84),
id-E-UTRAN-Trace-ID(86),
id-RelativeMMECapacity(87),
id-SourceMME-UE-S1AP-ID(88),
id-Bearers-SubjectToStatusTransfer-Item(89),
id-eNB-StatusTransfer-TransparentContainer(90),
id-UE-associatedLogicalS1-ConnectionItem(91),
id-ResetType(92),
id-UE-associatedLogicalS1-ConnectionListResAck(93),
id-E-RABToBeSwitchedULItem(94),
id-E-RABToBeSwitchedULList(95),
id-S-TMSI(96),
id-cdma2000OneXRAND(97),
id-RequestType(98),
id-UE-S1AP-IDs(99),
id-EUTRAN-CGI(100),
id-OverloadResponse(101),
id-cdma2000OneXSRVCCInfo(102),
id-E-RABFailedToBeReleasedList(103),
id-Source-ToTarget-TransparentContainer(104),
id-ServedGUMMEIs(105),
id-SubscriberProfileIDforRFP(106),
id-UESecurityCapabilities(107),
id-CSFallbackIndicator(108),
id-CNDomain(109),
id-E-RABReleasedList(110),
id-MessageIdentifier(111),
id-SerialNumber(112),
id-WarningAreaList(113),
id-RepetitionPeriod(114),
id-NumberofBroadcastRequest(115),
id-WarningType(116),
id-WarningSecurityInfo(117),
id-DataCodingScheme(118),
id-WarningMessageContents(119),
id-BroadcastCompletedAreaList(120),
id-Inter-SystemInformationTransferTypeEDT(121),
id-Inter-SystemInformationTransferTypeMDT(122),
id-Target-ToSource-TransparentContainer(123),
id-SRVCCOperationPossible(124),
id-SRVCCHOIndication(125),
id-NAS-DownlinkCount(126),
id-CSG-Id(127),
id-CSG-IdList(128),
id-SONConfigurationTransferECT(129),
id-SONConfigurationTransferMCT(130),
id-TraceCollectionEntityIPAddress(131),
id-MSClassmark2(132),
id-MSClassmark3(133),
id-RRC-Establishment-Cause(134),
id-NASSecurityParametersfromE-UTRAN(135),
id-NASSecurityParameterstoE-UTRAN(136),
id-DefaultPagingDRX(137),
id-Source-ToTarget-TransparentContainer-Secondary(138),
id-Target-ToSource-TransparentContainer-Secondary(139),
id-EUTRANRoundTripDelayEstimationInfo(140),
id-BroadcastCancelledAreaList(141),
id-ConcurrentWarningMessageIndicator(142),
id-Data-Forwarding-Not-Possible(143),
id-ExtendedRepetitionPeriod(144),
id-CellAccessMode(145),
id-CSGMembershipStatus(146),
id-LPPa-PDU(147),
id-Routing-ID(148),
id-Time-Synchronization-Info(149),
id-PS-ServiceNotAvailable(150),
id-RegisteredLAI(159)
} (0..65535)
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome }
END
@@ -1,265 +0,0 @@
-- **************************************************************
--
-- Constant definitions
--
-- **************************************************************
S1AP-Constants {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
ProcedureCode,
ProtocolIE-ID
FROM S1AP-CommonDataTypes;
-- **************************************************************
--
-- Elementary Procedures
--
-- **************************************************************
id-HandoverPreparation ProcedureCode ::= 0
id-HandoverResourceAllocation ProcedureCode ::= 1
id-HandoverNotification ProcedureCode ::= 2
id-PathSwitchRequest ProcedureCode ::= 3
id-HandoverCancel ProcedureCode ::= 4
id-E-RABSetup ProcedureCode ::= 5
id-E-RABModify ProcedureCode ::= 6
id-E-RABRelease ProcedureCode ::= 7
id-E-RABReleaseIndication ProcedureCode ::= 8
id-InitialContextSetup ProcedureCode ::= 9
id-Paging ProcedureCode ::= 10
id-downlinkNASTransport ProcedureCode ::= 11
id-initialUEMessage ProcedureCode ::= 12
id-uplinkNASTransport ProcedureCode ::= 13
id-Reset ProcedureCode::= 14
id-ErrorIndication ProcedureCode ::= 15
id-NASNonDeliveryIndication ProcedureCode ::= 16
id-S1Setup ProcedureCode ::= 17
id-UEContextReleaseRequest ProcedureCode ::= 18
id-DownlinkS1cdma2000tunneling ProcedureCode ::= 19
id-UplinkS1cdma2000tunneling ProcedureCode ::= 20
id-UEContextModification ProcedureCode ::= 21
id-UECapabilityInfoIndication ProcedureCode ::= 22
id-UEContextRelease ProcedureCode ::= 23
id-eNBStatusTransfer ProcedureCode ::= 24
id-MMEStatusTransfer ProcedureCode ::= 25
id-DeactivateTrace ProcedureCode ::= 26
id-TraceStart ProcedureCode ::= 27
id-TraceFailureIndication ProcedureCode ::= 28
id-ENBConfigurationUpdate ProcedureCode ::= 29
id-MMEConfigurationUpdate ProcedureCode ::= 30
id-LocationReportingControl ProcedureCode ::= 31
id-LocationReportingFailureIndication ProcedureCode ::= 32
id-LocationReport ProcedureCode ::= 33
id-OverloadStart ProcedureCode ::= 34
id-OverloadStop ProcedureCode ::= 35
id-WriteReplaceWarning ProcedureCode ::= 36
id-eNBDirectInformationTransfer ProcedureCode ::= 37
id-MMEDirectInformationTransfer ProcedureCode ::= 38
id-PrivateMessage ProcedureCode ::= 39
id-eNBConfigurationTransfer ProcedureCode ::= 40
id-MMEConfigurationTransfer ProcedureCode ::= 41
id-CellTrafficTrace ProcedureCode ::= 42
id-Kill ProcedureCode ::= 43
id-downlinkUEAssociatedLPPaTransport ProcedureCode ::= 44
id-uplinkUEAssociatedLPPaTransport ProcedureCode ::= 45
id-downlinkNonUEAssociatedLPPaTransport ProcedureCode ::= 46
id-uplinkNonUEAssociatedLPPaTransport ProcedureCode ::= 47
-- **************************************************************
--
-- Extension constants
--
-- **************************************************************
maxPrivateIEs INTEGER ::= 65535
maxProtocolExtensions INTEGER ::= 65535
maxProtocolIEs INTEGER ::= 65535
-- **************************************************************
--
-- Lists
--
-- **************************************************************
maxNrOfCSGs INTEGER ::= 256
maxNrOfE-RABs INTEGER ::= 256
maxnoofTAIs INTEGER ::= 256
maxnoofTACs INTEGER ::= 256
maxNrOfErrors INTEGER ::= 256
maxnoofBPLMNs INTEGER ::= 6
maxnoofPLMNsPerMME INTEGER ::= 32
maxnoofEPLMNs INTEGER ::= 15
maxnoofEPLMNsPlusOne INTEGER ::= 16
maxnoofForbLACs INTEGER ::= 4096
maxnoofForbTACs INTEGER ::= 4096
maxNrOfIndividualS1ConnectionsToReset INTEGER ::= 256
maxnoofCells INTEGER ::= 16
maxnoofTAIforWarning INTEGER ::= 65535
maxnoofCellID INTEGER ::= 65535
maxnoofEmergencyAreaID INTEGER ::= 65535
maxnoofCellinTAI INTEGER ::= 65535
maxnoofCellinEAI INTEGER ::= 65535
maxnoofeNBX2TLAs INTEGER ::= 2
maxnoofRATs INTEGER ::= 8
maxnoofGroupIDs INTEGER ::= 65535
maxnoofMMECs INTEGER ::= 256
-- **************************************************************
--
-- IEs
--
-- **************************************************************
id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0
id-HandoverType ProtocolIE-ID ::= 1
id-Cause ProtocolIE-ID ::= 2
id-SourceID ProtocolIE-ID ::= 3
id-TargetID ProtocolIE-ID ::= 4
id-eNB-UE-S1AP-ID ProtocolIE-ID ::= 8
id-E-RABSubjecttoDataForwardingList ProtocolIE-ID ::= 12
id-E-RABtoReleaseListHOCmd ProtocolIE-ID ::= 13
id-E-RABDataForwardingItem ProtocolIE-ID ::= 14
id-E-RABReleaseItemBearerRelComp ProtocolIE-ID ::= 15
id-E-RABToBeSetupListBearerSUReq ProtocolIE-ID ::= 16
id-E-RABToBeSetupItemBearerSUReq ProtocolIE-ID ::= 17
id-E-RABAdmittedList ProtocolIE-ID ::= 18
id-E-RABFailedToSetupListHOReqAck ProtocolIE-ID ::= 19
id-E-RABAdmittedItem ProtocolIE-ID ::= 20
id-E-RABFailedtoSetupItemHOReqAck ProtocolIE-ID ::= 21
id-E-RABToBeSwitchedDLList ProtocolIE-ID ::= 22
id-E-RABToBeSwitchedDLItem ProtocolIE-ID ::= 23
id-E-RABToBeSetupListCtxtSUReq ProtocolIE-ID ::= 24
id-TraceActivation ProtocolIE-ID ::= 25
id-NAS-PDU ProtocolIE-ID ::= 26
id-E-RABToBeSetupItemHOReq ProtocolIE-ID ::= 27
id-E-RABSetupListBearerSURes ProtocolIE-ID ::= 28
id-E-RABFailedToSetupListBearerSURes ProtocolIE-ID ::= 29
id-E-RABToBeModifiedListBearerModReq ProtocolIE-ID ::= 30
id-E-RABModifyListBearerModRes ProtocolIE-ID ::= 31
id-E-RABFailedToModifyList ProtocolIE-ID ::= 32
id-E-RABToBeReleasedList ProtocolIE-ID ::= 33
id-E-RABFailedToReleaseList ProtocolIE-ID ::= 34
id-E-RABItem ProtocolIE-ID ::= 35
id-E-RABToBeModifiedItemBearerModReq ProtocolIE-ID ::= 36
id-E-RABModifyItemBearerModRes ProtocolIE-ID ::= 37
id-E-RABReleaseItem ProtocolIE-ID ::= 38
id-E-RABSetupItemBearerSURes ProtocolIE-ID ::= 39
id-SecurityContext ProtocolIE-ID ::= 40
id-HandoverRestrictionList ProtocolIE-ID ::= 41
id-UEPagingID ProtocolIE-ID ::= 43
id-pagingDRX ProtocolIE-ID ::= 44
id-TAIList ProtocolIE-ID ::= 46
id-TAIItem ProtocolIE-ID ::= 47
id-E-RABFailedToSetupListCtxtSURes ProtocolIE-ID ::= 48
id-E-RABReleaseItemHOCmd ProtocolIE-ID ::= 49
id-E-RABSetupItemCtxtSURes ProtocolIE-ID ::= 50
id-E-RABSetupListCtxtSURes ProtocolIE-ID ::= 51
id-E-RABToBeSetupItemCtxtSUReq ProtocolIE-ID ::= 52
id-E-RABToBeSetupListHOReq ProtocolIE-ID ::= 53
id-GERANtoLTEHOInformationRes ProtocolIE-ID ::= 55
id-UTRANtoLTEHOInformationRes ProtocolIE-ID ::= 57
id-CriticalityDiagnostics ProtocolIE-ID ::= 58
id-Global-ENB-ID ProtocolIE-ID ::= 59
id-eNBname ProtocolIE-ID ::= 60
id-MMEname ProtocolIE-ID ::= 61
id-ServedPLMNs ProtocolIE-ID ::= 63
id-SupportedTAs ProtocolIE-ID ::= 64
id-TimeToWait ProtocolIE-ID ::= 65
id-uEaggregateMaximumBitrate ProtocolIE-ID ::= 66
id-TAI ProtocolIE-ID ::= 67
id-E-RABReleaseListBearerRelComp ProtocolIE-ID ::= 69
id-cdma2000PDU ProtocolIE-ID ::= 70
id-cdma2000RATType ProtocolIE-ID ::= 71
id-cdma2000SectorID ProtocolIE-ID ::= 72
id-SecurityKey ProtocolIE-ID ::= 73
id-UERadioCapability ProtocolIE-ID ::= 74
id-GUMMEI-ID ProtocolIE-ID ::= 75
id-E-RABInformationListItem ProtocolIE-ID ::= 78
id-Direct-Forwarding-Path-Availability ProtocolIE-ID ::= 79
id-UEIdentityIndexValue ProtocolIE-ID ::= 80
id-cdma2000HOStatus ProtocolIE-ID ::= 83
id-cdma2000HORequiredIndication ProtocolIE-ID ::= 84
id-E-UTRAN-Trace-ID ProtocolIE-ID ::= 86
id-RelativeMMECapacity ProtocolIE-ID ::= 87
id-SourceMME-UE-S1AP-ID ProtocolIE-ID ::= 88
id-Bearers-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 89
id-eNB-StatusTransfer-TransparentContainer ProtocolIE-ID ::= 90
id-UE-associatedLogicalS1-ConnectionItem ProtocolIE-ID ::= 91
id-ResetType ProtocolIE-ID ::= 92
id-UE-associatedLogicalS1-ConnectionListResAck ProtocolIE-ID ::= 93
id-E-RABToBeSwitchedULItem ProtocolIE-ID ::= 94
id-E-RABToBeSwitchedULList ProtocolIE-ID ::= 95
id-S-TMSI ProtocolIE-ID ::= 96
id-cdma2000OneXRAND ProtocolIE-ID ::= 97
id-RequestType ProtocolIE-ID ::= 98
id-UE-S1AP-IDs ProtocolIE-ID ::= 99
id-EUTRAN-CGI ProtocolIE-ID ::= 100
id-OverloadResponse ProtocolIE-ID ::= 101
id-cdma2000OneXSRVCCInfo ProtocolIE-ID ::= 102
id-E-RABFailedToBeReleasedList ProtocolIE-ID ::= 103
id-Source-ToTarget-TransparentContainer ProtocolIE-ID ::= 104
id-ServedGUMMEIs ProtocolIE-ID ::= 105
id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 106
id-UESecurityCapabilities ProtocolIE-ID ::= 107
id-CSFallbackIndicator ProtocolIE-ID ::= 108
id-CNDomain ProtocolIE-ID ::= 109
id-E-RABReleasedList ProtocolIE-ID ::= 110
id-MessageIdentifier ProtocolIE-ID ::= 111
id-SerialNumber ProtocolIE-ID ::= 112
id-WarningAreaList ProtocolIE-ID ::= 113
id-RepetitionPeriod ProtocolIE-ID ::= 114
id-NumberofBroadcastRequest ProtocolIE-ID ::= 115
id-WarningType ProtocolIE-ID ::= 116
id-WarningSecurityInfo ProtocolIE-ID ::= 117
id-DataCodingScheme ProtocolIE-ID ::= 118
id-WarningMessageContents ProtocolIE-ID ::= 119
id-BroadcastCompletedAreaList ProtocolIE-ID ::= 120
id-Inter-SystemInformationTransferTypeEDT ProtocolIE-ID ::= 121
id-Inter-SystemInformationTransferTypeMDT ProtocolIE-ID ::= 122
id-Target-ToSource-TransparentContainer ProtocolIE-ID ::= 123
id-SRVCCOperationPossible ProtocolIE-ID ::= 124
id-SRVCCHOIndication ProtocolIE-ID ::= 125
id-NAS-DownlinkCount ProtocolIE-ID ::= 126
id-CSG-Id ProtocolIE-ID ::= 127
id-CSG-IdList ProtocolIE-ID ::= 128
id-SONConfigurationTransferECT ProtocolIE-ID ::= 129
id-SONConfigurationTransferMCT ProtocolIE-ID ::= 130
id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 131
id-MSClassmark2 ProtocolIE-ID ::= 132
id-MSClassmark3 ProtocolIE-ID ::= 133
id-RRC-Establishment-Cause ProtocolIE-ID ::= 134
id-NASSecurityParametersfromE-UTRAN ProtocolIE-ID ::= 135
id-NASSecurityParameterstoE-UTRAN ProtocolIE-ID ::= 136
id-DefaultPagingDRX ProtocolIE-ID ::= 137
id-Source-ToTarget-TransparentContainer-Secondary ProtocolIE-ID ::= 138
id-Target-ToSource-TransparentContainer-Secondary ProtocolIE-ID ::= 139
id-EUTRANRoundTripDelayEstimationInfo ProtocolIE-ID ::= 140
id-BroadcastCancelledAreaList ProtocolIE-ID ::= 141
id-ConcurrentWarningMessageIndicator ProtocolIE-ID ::= 142
id-Data-Forwarding-Not-Possible ProtocolIE-ID ::= 143
id-ExtendedRepetitionPeriod ProtocolIE-ID ::= 144
id-CellAccessMode ProtocolIE-ID ::= 145
id-CSGMembershipStatus ProtocolIE-ID ::= 146
id-LPPa-PDU ProtocolIE-ID ::= 147
id-Routing-ID ProtocolIE-ID ::= 148
id-Time-Synchronization-Info ProtocolIE-ID ::= 149
id-PS-ServiceNotAvailable ProtocolIE-ID ::= 150
id-RegisteredLAI ProtocolIE-ID ::= 159
END
@@ -1,197 +0,0 @@
-- **************************************************************
--
-- Container definitions
--
-- **************************************************************
S1AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
Criticality,
Presence,
PrivateIE-ID,
ProtocolExtensionID,
ProtocolIE-ID
FROM S1AP-CommonDataTypes
maxPrivateIEs,
maxProtocolExtensions,
maxProtocolIEs
FROM S1AP-Constants;
-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************
S1AP-PROTOCOL-IES ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************
S1AP-PROTOCOL-IES-PAIR ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&firstCriticality Criticality,
&FirstValue,
&secondCriticality Criticality,
&SecondValue,
&presence Presence
}
WITH SYNTAX {
ID &id
FIRST CRITICALITY &firstCriticality
FIRST TYPE &FirstValue
SECOND CRITICALITY &secondCriticality
SECOND TYPE &SecondValue
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Protocol Extensions
--
-- **************************************************************
S1AP-PROTOCOL-EXTENSION ::= CLASS {
&id ProtocolExtensionID UNIQUE,
&criticality Criticality,
&Extension,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
EXTENSION &Extension
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Private IEs
--
-- **************************************************************
S1AP-PRIVATE-IES ::= CLASS {
&id PrivateIE-ID,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Container for Protocol IEs
--
-- **************************************************************
ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-IES.&id ({IEsSetParam}),
criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}),
value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id})
}
-- **************************************************************
--
-- Container for Protocol IE Pairs
--
-- **************************************************************
ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-FieldPair {{IEsSetParam}}
ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}),
firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}),
firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}),
secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}),
secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id})
}
-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************
ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-SingleContainer {{IEsSetParam}}
ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-ContainerPair {{IEsSetParam}}
-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************
ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
}
-- **************************************************************
--
-- Container for Private IEs
--
-- **************************************************************
PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::=
SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
PrivateIE-Field {{IEsSetParam}}
PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
id S1AP-PRIVATE-IES.&id ({IEsSetParam}),
criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}),
value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id})
}
END
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,591 +0,0 @@
-- **************************************************************
--
-- Elementary Procedure definitions
--
-- **************************************************************
S1AP-PDU-Descriptions {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Descriptions (0)}
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
Criticality,
ProcedureCode
FROM S1AP-CommonDataTypes
CellTrafficTrace,
DeactivateTrace,
DownlinkUEAssociatedLPPaTransport,
DownlinkNASTransport,
DownlinkNonUEAssociatedLPPaTransport,
DownlinkS1cdma2000tunneling,
ENBDirectInformationTransfer,
ENBStatusTransfer,
ENBConfigurationUpdate,
ENBConfigurationUpdateAcknowledge,
ENBConfigurationUpdateFailure,
ErrorIndication,
HandoverCancel,
HandoverCancelAcknowledge,
HandoverCommand,
HandoverFailure,
HandoverNotify,
HandoverPreparationFailure,
HandoverRequest,
HandoverRequestAcknowledge,
HandoverRequired,
InitialContextSetupFailure,
InitialContextSetupRequest,
InitialContextSetupResponse,
InitialUEMessage,
KillRequest,
KillResponse,
LocationReportingControl,
LocationReportingFailureIndication,
LocationReport,
MMEConfigurationUpdate,
MMEConfigurationUpdateAcknowledge,
MMEConfigurationUpdateFailure,
MMEDirectInformationTransfer,
MMEStatusTransfer,
NASNonDeliveryIndication,
OverloadStart,
OverloadStop,
Paging,
PathSwitchRequest,
PathSwitchRequestAcknowledge,
PathSwitchRequestFailure,
PrivateMessage,
Reset,
ResetAcknowledge,
S1SetupFailure,
S1SetupRequest,
S1SetupResponse,
E-RABModifyRequest,
E-RABModifyResponse,
E-RABReleaseCommand,
E-RABReleaseResponse,
E-RABReleaseIndication,
E-RABSetupRequest,
E-RABSetupResponse,
TraceFailureIndication,
TraceStart,
UECapabilityInfoIndication,
UEContextModificationFailure,
UEContextModificationRequest,
UEContextModificationResponse,
UEContextReleaseCommand,
UEContextReleaseComplete,
UEContextReleaseRequest,
UplinkUEAssociatedLPPaTransport,
UplinkNASTransport,
UplinkNonUEAssociatedLPPaTransport,
UplinkS1cdma2000tunneling,
WriteReplaceWarningRequest,
WriteReplaceWarningResponse,
ENBConfigurationTransfer,
MMEConfigurationTransfer
FROM S1AP-PDU-Contents
id-CellTrafficTrace,
id-DeactivateTrace,
id-downlinkUEAssociatedLPPaTransport,
id-downlinkNASTransport,
id-downlinkNonUEAssociatedLPPaTransport,
id-DownlinkS1cdma2000tunneling,
id-eNBStatusTransfer,
id-ErrorIndication,
id-HandoverCancel,
id-HandoverNotification,
id-HandoverPreparation,
id-HandoverResourceAllocation,
id-InitialContextSetup,
id-initialUEMessage,
id-ENBConfigurationUpdate,
id-Kill,
id-LocationReportingControl,
id-LocationReportingFailureIndication,
id-LocationReport,
id-eNBDirectInformationTransfer,
id-MMEConfigurationUpdate,
id-MMEDirectInformationTransfer,
id-MMEStatusTransfer,
id-NASNonDeliveryIndication,
id-OverloadStart,
id-OverloadStop,
id-Paging,
id-PathSwitchRequest,
id-PrivateMessage,
id-Reset,
id-S1Setup,
id-E-RABModify,
id-E-RABRelease,
id-E-RABReleaseIndication,
id-E-RABSetup,
id-TraceFailureIndication,
id-TraceStart,
id-UECapabilityInfoIndication,
id-UEContextModification,
id-UEContextRelease,
id-UEContextReleaseRequest,
id-uplinkUEAssociatedLPPaTransport,
id-uplinkNASTransport,
id-uplinkNonUEAssociatedLPPaTransport,
id-UplinkS1cdma2000tunneling,
id-WriteReplaceWarning,
id-eNBConfigurationTransfer,
id-MMEConfigurationTransfer
FROM S1AP-Constants;
-- **************************************************************
--
-- Interface Elementary Procedure Class
--
-- **************************************************************
S1AP-ELEMENTARY-PROCEDURE ::= CLASS {
&InitiatingMessage ,
&SuccessfulOutcome OPTIONAL,
&UnsuccessfulOutcome OPTIONAL,
&procedureCode ProcedureCode UNIQUE,
&criticality Criticality DEFAULT ignore
}
WITH SYNTAX {
INITIATING MESSAGE &InitiatingMessage
[SUCCESSFUL OUTCOME &SuccessfulOutcome]
[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
PROCEDURE CODE &procedureCode
[CRITICALITY &criticality]
}
-- **************************************************************
--
-- Interface PDU Definition
--
-- **************************************************************
S1AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome,
...
}
InitiatingMessage ::= SEQUENCE {
procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}),
criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value S1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
SuccessfulOutcome ::= SEQUENCE {
procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}),
criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value S1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
UnsuccessfulOutcome ::= SEQUENCE {
procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}),
criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value S1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
-- **************************************************************
--
-- Interface Elementary Procedure List
--
-- **************************************************************
S1AP-ELEMENTARY-PROCEDURES S1AP-ELEMENTARY-PROCEDURE ::= {
S1AP-ELEMENTARY-PROCEDURES-CLASS-1 |
S1AP-ELEMENTARY-PROCEDURES-CLASS-2,
...
}
S1AP-ELEMENTARY-PROCEDURES-CLASS-1 S1AP-ELEMENTARY-PROCEDURE ::= {
handoverPreparation |
handoverResourceAllocation |
pathSwitchRequest |
e-RABSetup |
e-RABModify |
e-RABRelease |
initialContextSetup |
handoverCancel |
kill |
reset |
s1Setup |
uEContextModification |
uEContextRelease |
eNBConfigurationUpdate |
mMEConfigurationUpdate |
writeReplaceWarning ,
...
}
S1AP-ELEMENTARY-PROCEDURES-CLASS-2 S1AP-ELEMENTARY-PROCEDURE ::= {
handoverNotification |
e-RABReleaseIndication |
paging |
downlinkNASTransport |
initialUEMessage |
uplinkNASTransport |
errorIndication |
nASNonDeliveryIndication |
uEContextReleaseRequest |
downlinkS1cdma2000tunneling |
uplinkS1cdma2000tunneling |
uECapabilityInfoIndication |
eNBStatusTransfer |
mMEStatusTransfer |
deactivateTrace |
traceStart |
traceFailureIndication |
cellTrafficTrace |
locationReportingControl |
locationReportingFailureIndication |
locationReport |
overloadStart |
overloadStop |
eNBDirectInformationTransfer |
mMEDirectInformationTransfer |
eNBConfigurationTransfer |
mMEConfigurationTransfer |
privateMessage ,
...,
downlinkUEAssociatedLPPaTransport |
uplinkUEAssociatedLPPaTransport |
downlinkNonUEAssociatedLPPaTransport |
uplinkNonUEAssociatedLPPaTransport
}
-- **************************************************************
--
-- Interface Elementary Procedures
--
-- **************************************************************
handoverPreparation S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE HandoverRequired
SUCCESSFUL OUTCOME HandoverCommand
UNSUCCESSFUL OUTCOME HandoverPreparationFailure
PROCEDURE CODE id-HandoverPreparation
CRITICALITY reject
}
handoverResourceAllocation S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE HandoverRequest
SUCCESSFUL OUTCOME HandoverRequestAcknowledge
UNSUCCESSFUL OUTCOME HandoverFailure
PROCEDURE CODE id-HandoverResourceAllocation
CRITICALITY reject
}
handoverNotification S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE HandoverNotify
PROCEDURE CODE id-HandoverNotification
CRITICALITY ignore
}
pathSwitchRequest S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE PathSwitchRequest
SUCCESSFUL OUTCOME PathSwitchRequestAcknowledge
UNSUCCESSFUL OUTCOME PathSwitchRequestFailure
PROCEDURE CODE id-PathSwitchRequest
CRITICALITY reject
}
e-RABSetup S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE E-RABSetupRequest
SUCCESSFUL OUTCOME E-RABSetupResponse
PROCEDURE CODE id-E-RABSetup
CRITICALITY reject
}
e-RABModify S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE E-RABModifyRequest
SUCCESSFUL OUTCOME E-RABModifyResponse
PROCEDURE CODE id-E-RABModify
CRITICALITY reject
}
e-RABRelease S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE E-RABReleaseCommand
SUCCESSFUL OUTCOME E-RABReleaseResponse
PROCEDURE CODE id-E-RABRelease
CRITICALITY reject
}
e-RABReleaseIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE E-RABReleaseIndication
PROCEDURE CODE id-E-RABReleaseIndication
CRITICALITY ignore
}
initialContextSetup S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE InitialContextSetupRequest
SUCCESSFUL OUTCOME InitialContextSetupResponse
UNSUCCESSFUL OUTCOME InitialContextSetupFailure
PROCEDURE CODE id-InitialContextSetup
CRITICALITY reject
}
uEContextReleaseRequest S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UEContextReleaseRequest
PROCEDURE CODE id-UEContextReleaseRequest
CRITICALITY ignore
}
paging S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE Paging
PROCEDURE CODE id-Paging
CRITICALITY ignore
}
downlinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DownlinkNASTransport
PROCEDURE CODE id-downlinkNASTransport
CRITICALITY ignore
}
initialUEMessage S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE InitialUEMessage
PROCEDURE CODE id-initialUEMessage
CRITICALITY ignore
}
uplinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UplinkNASTransport
PROCEDURE CODE id-uplinkNASTransport
CRITICALITY ignore
}
nASNonDeliveryIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE NASNonDeliveryIndication
PROCEDURE CODE id-NASNonDeliveryIndication
CRITICALITY ignore
}
handoverCancel S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE HandoverCancel
SUCCESSFUL OUTCOME HandoverCancelAcknowledge
PROCEDURE CODE id-HandoverCancel
CRITICALITY reject
}
reset S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE Reset
SUCCESSFUL OUTCOME ResetAcknowledge
PROCEDURE CODE id-Reset
CRITICALITY reject
}
errorIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ErrorIndication
PROCEDURE CODE id-ErrorIndication
CRITICALITY ignore
}
s1Setup S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE S1SetupRequest
SUCCESSFUL OUTCOME S1SetupResponse
UNSUCCESSFUL OUTCOME S1SetupFailure
PROCEDURE CODE id-S1Setup
CRITICALITY reject
}
eNBConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ENBConfigurationUpdate
SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure
PROCEDURE CODE id-ENBConfigurationUpdate
CRITICALITY reject
}
mMEConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MMEConfigurationUpdate
SUCCESSFUL OUTCOME MMEConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME MMEConfigurationUpdateFailure
PROCEDURE CODE id-MMEConfigurationUpdate
CRITICALITY reject
}
downlinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DownlinkS1cdma2000tunneling
PROCEDURE CODE id-DownlinkS1cdma2000tunneling
CRITICALITY ignore
}
uplinkS1cdma2000tunneling S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UplinkS1cdma2000tunneling
PROCEDURE CODE id-UplinkS1cdma2000tunneling
CRITICALITY ignore
}
uEContextModification S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UEContextModificationRequest
SUCCESSFUL OUTCOME UEContextModificationResponse
UNSUCCESSFUL OUTCOME UEContextModificationFailure
PROCEDURE CODE id-UEContextModification
CRITICALITY reject
}
uECapabilityInfoIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UECapabilityInfoIndication
PROCEDURE CODE id-UECapabilityInfoIndication
CRITICALITY ignore
}
uEContextRelease S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UEContextReleaseCommand
SUCCESSFUL OUTCOME UEContextReleaseComplete
PROCEDURE CODE id-UEContextRelease
CRITICALITY reject
}
eNBStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ENBStatusTransfer
PROCEDURE CODE id-eNBStatusTransfer
CRITICALITY ignore
}
mMEStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MMEStatusTransfer
PROCEDURE CODE id-MMEStatusTransfer
CRITICALITY ignore
}
deactivateTrace S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DeactivateTrace
PROCEDURE CODE id-DeactivateTrace
CRITICALITY ignore
}
traceStart S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE TraceStart
PROCEDURE CODE id-TraceStart
CRITICALITY ignore
}
traceFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE TraceFailureIndication
PROCEDURE CODE id-TraceFailureIndication
CRITICALITY ignore
}
cellTrafficTrace S1AP-ELEMENTARY-PROCEDURE ::={
INITIATING MESSAGE CellTrafficTrace
PROCEDURE CODE id-CellTrafficTrace
CRITICALITY ignore
}
locationReportingControl S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE LocationReportingControl
PROCEDURE CODE id-LocationReportingControl
CRITICALITY ignore
}
locationReportingFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE LocationReportingFailureIndication
PROCEDURE CODE id-LocationReportingFailureIndication
CRITICALITY ignore
}
locationReport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE LocationReport
PROCEDURE CODE id-LocationReport
CRITICALITY ignore
}
overloadStart S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE OverloadStart
PROCEDURE CODE id-OverloadStart
CRITICALITY ignore
}
overloadStop S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE OverloadStop
PROCEDURE CODE id-OverloadStop
CRITICALITY reject
}
writeReplaceWarning S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE WriteReplaceWarningRequest
SUCCESSFUL OUTCOME WriteReplaceWarningResponse
PROCEDURE CODE id-WriteReplaceWarning
CRITICALITY reject
}
eNBDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ENBDirectInformationTransfer
PROCEDURE CODE id-eNBDirectInformationTransfer
CRITICALITY ignore
}
mMEDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MMEDirectInformationTransfer
PROCEDURE CODE id-MMEDirectInformationTransfer
CRITICALITY ignore
}
eNBConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ENBConfigurationTransfer
PROCEDURE CODE id-eNBConfigurationTransfer
CRITICALITY ignore
}
mMEConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE MMEConfigurationTransfer
PROCEDURE CODE id-MMEConfigurationTransfer
CRITICALITY ignore
}
privateMessage S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE PrivateMessage
PROCEDURE CODE id-PrivateMessage
CRITICALITY ignore
}
kill S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE KillRequest
SUCCESSFUL OUTCOME KillResponse
PROCEDURE CODE id-Kill
CRITICALITY reject
}
downlinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DownlinkUEAssociatedLPPaTransport
PROCEDURE CODE id-downlinkUEAssociatedLPPaTransport
CRITICALITY ignore
}
uplinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UplinkUEAssociatedLPPaTransport
PROCEDURE CODE id-uplinkUEAssociatedLPPaTransport
CRITICALITY ignore
}
downlinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DownlinkNonUEAssociatedLPPaTransport
PROCEDURE CODE id-downlinkNonUEAssociatedLPPaTransport
CRITICALITY ignore
}
uplinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE UplinkNonUEAssociatedLPPaTransport
PROCEDURE CODE id-uplinkNonUEAssociatedLPPaTransport
CRITICALITY ignore
}
END
@@ -1,413 +0,0 @@
S1AP-PDU {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
eps-Access (21) modules (3) s1ap (1) version1 (1)
}
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
Criticality,
ProcedureCode,
ProtocolIE-ID
FROM S1AP-CommonDataTypes
maxProtocolIEs
FROM S1AP-Constants;
S1AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome,
...
}
InitiatingMessage ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
SuccessfulOutcome ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
UnsuccessfulOutcome ::= SEQUENCE {
procedureCode ProcedureCode,
criticality Criticality,
value ANY
}
HandoverRequired ::= SEQUENCE {
handoverRequired-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCommand ::= SEQUENCE {
handoverCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverPreparationFailure ::= SEQUENCE {
handoverPreparationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverRequest ::= SEQUENCE {
handoverRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverRequestAcknowledge ::= SEQUENCE {
handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverFailure ::= SEQUENCE {
handoverFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverNotify ::= SEQUENCE {
handoverNotify-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequest ::= SEQUENCE {
pathSwitchRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequestAcknowledge ::= SEQUENCE {
pathSwitchRequestAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PathSwitchRequestFailure ::= SEQUENCE {
pathSwitchRequestFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABSetupRequest ::= SEQUENCE {
e-RABSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABSetupResponse ::= SEQUENCE {
e-RABSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABModifyRequest ::= SEQUENCE {
e-RABModifyRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABModifyResponse ::= SEQUENCE {
e-RABModifyResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseIndication ::= SEQUENCE {
e-RABReleaseIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseCommand ::= SEQUENCE {
e-RABReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
E-RABReleaseResponse ::= SEQUENCE {
e-RABReleaseResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupRequest ::= SEQUENCE {
initialContextSetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupResponse ::= SEQUENCE {
initialContextSetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialContextSetupFailure ::= SEQUENCE {
initialContextSetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseRequest ::= SEQUENCE {
ueContextReleaseRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
Paging ::= SEQUENCE {
paging-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkNASTransport ::= SEQUENCE {
downlinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
InitialUEMessage ::= SEQUENCE {
initialUEMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkNASTransport ::= SEQUENCE {
uplinkNASTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
NASNonDeliveryIndication ::= SEQUENCE {
nasNonDeliveryIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCancel ::= SEQUENCE {
handoverCancel-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
HandoverCancelAcknowledge ::= SEQUENCE {
handoverCancelAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
Reset ::= SEQUENCE {
reset-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ResetAcknowledge ::= SEQUENCE {
resetAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupResponse ::= SEQUENCE {
s1SetupResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupRequest ::= SEQUENCE {
s1SetupRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
S1SetupFailure ::= SEQUENCE
{
s1SetupFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ErrorIndication ::= SEQUENCE {
errorIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdate ::= SEQUENCE {
eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdateAcknowledge ::= SEQUENCE {
eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationUpdateFailure ::= SEQUENCE {
eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdate ::= SEQUENCE {
mmeConfigurationUpdate-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdateAcknowledge ::= SEQUENCE {
mmeConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationUpdateFailure ::= SEQUENCE {
mmeConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkS1cdma2000tunneling ::= SEQUENCE {
downlinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkS1cdma2000tunneling ::= SEQUENCE {
uplinkS1cdma2000tunneling-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationRequest ::= SEQUENCE {
ueContextModificationRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationResponse ::= SEQUENCE {
ueContextModificationResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextModificationFailure ::= SEQUENCE {
ueContextModificationFailure-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UECapabilityInfoIndication ::= SEQUENCE {
ueCapabilityInfoIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseCommand ::= SEQUENCE {
ueContextReleaseCommand-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UEContextReleaseComplete ::= SEQUENCE {
ueContextReleaseComplete-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBStatusTransfer ::= SEQUENCE {
eNBStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEStatusTransfer ::= SEQUENCE {
mmeStatusTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DeactivateTrace ::= SEQUENCE {
deactivateTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
TraceStart ::= SEQUENCE {
traceStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
TraceFailureIndication ::= SEQUENCE {
traceFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
CellTrafficTrace ::= SEQUENCE {
cellTrafficTrace-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReportingControl ::= SEQUENCE {
locationReportingControl-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReportingFailureIndication ::= SEQUENCE {
locationReportingFailureIndication-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
LocationReport ::= SEQUENCE {
locationReport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
OverloadStart ::= SEQUENCE {
overloadStart-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
OverloadStop ::= SEQUENCE {
overloadStop-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
WriteReplaceWarningRequest ::= SEQUENCE {
writeReplaceWarningRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
WriteReplaceWarningResponse ::= SEQUENCE {
writeReplaceWarningResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBDirectInformationTransfer ::= SEQUENCE {
eNBDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEDirectInformationTransfer ::= SEQUENCE {
mmeDirectInformationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
ENBConfigurationTransfer ::= SEQUENCE {
eNBConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
MMEConfigurationTransfer ::= SEQUENCE {
mmeConfigurationTransfer-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
PrivateMessage ::= SEQUENCE {
privateMessage-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
KillRequest ::= SEQUENCE {
killRequest-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
KillResponse ::= SEQUENCE {
killResponse-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkUEAssociatedLPPaTransport ::= SEQUENCE {
downlinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkUEAssociatedLPPaTransport ::= SEQUENCE {
uplinkUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE {
downlinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE {
uplinkNonUEAssociatedLPPaTransport-ies SEQUENCE (SIZE (0..maxProtocolIEs)) OF IE,
...
}
IE ::= SEQUENCE {
id ProtocolIE-ID,
criticality Criticality,
value ANY
}
END
@@ -1,15 +0,0 @@
ASN1 message from S1AP TS 36.413-8a0
To successfully parse messages, the asn1c util should be patched with the patch provided (asn1cpatch.p0).
To do so:
1) Get the last revision of asn1c: svn co https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk asn1c
2) Go to asn1c directory
3) patch -p0 asn1cpatch.p0
4) ./configure
5) make
6) make install
Aligned PER support is now included when parsing and generating asn1 code.
To generate S1AP ASN1 descriptions:
Files are automatically generated when changes are made on ASN1 files via Make build system.
File diff suppressed because it is too large Load Diff
@@ -1,513 +0,0 @@
import re, os, sys, string
import datetime
import getopt
import getpass
version = "0.5"
lines = ""
iesDefs = {}
ieofielist = {}
outdir = './'
filenames = []
verbosity = 0
prefix = ""
FAIL = '\033[91m'
WARN = '\033[93m'
ENDC = '\033[0m'
fileprefix = ""
def printFail(string):
sys.stderr.write(FAIL + string + ENDC + "\n")
def printWarning(string):
print WARN + string + ENDC
def printDebug(string):
if verbosity > 0:
print string
def outputHeaderToFile(f, filename):
now = datetime.datetime.now()
f.write("""/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
""")
f.write("/*******************************************************************************\n")
f.write(" * This file had been created by asn1tostruct.py script v%s\n" % (version))
f.write(" * Please do not modify this file but regenerate it via script.\n")
f.write(" * Created on: %s by %s\n * from %s\n" % (str(now), getpass.getuser(), filenames))
f.write(" ******************************************************************************/\n")
def lowerFirstCamelWord(word):
""" puts the first word in a CamelCase Word in lowercase.
I.e. CustomerID becomes customerID, XMLInfoTest becomes xmlInfoTest
"""
newstr = ''
swapped = word.swapcase()
idx = 0
# if it's all-caps, return an all-lowered version
lowered = word.lower()
if swapped == lowered:
return lowered
for c in swapped:
if c in string.lowercase:
newstr += c
idx += 1
else:
break
if idx < 2:
newstr += word[idx:]
else:
newstr = newstr[:-1]+ word[idx-1:]
return newstr
def usage():
print "Python parser for asn1 v%s" % (version)
print "Usage: python asn1tostruct.py [options]"
print "Available options:"
print "-d Enable script debug"
print "-f [file] Input file to parse"
print "-o [dir] Output files to given directory"
print "-h Print this help and return"
try:
opts, args = getopt.getopt(sys.argv[1:], "df:ho:", ["debug", "file", "help", "outdir"])
except getopt.GetoptError as err:
# print help information and exit:
usage()
sys.exit(2)
for o, a in opts:
if o in ("-f", "--file"):
filenames.append(a)
if o in ("-d", "--debug"):
verbosity = 1
if o in ("-o", "--outdir"):
outdir = a
if outdir.rfind('/') != len(outdir):
outdir += '/'
if o in ("-h", "--help"):
usage()
sys.exit(2)
for filename in filenames:
file = open(filename, 'r')
for line in file:
# Removing any comment
if line.find('--') >= 0:
line = line[:line.find('--')]
# Removing any carriage return
lines += re.sub('\r', '', line)
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+SEQUENCE\s+\(\s*SIZE\s*\(\s*\d+\s*\.\.\s*[0-9a-zA-Z-]+\s*\)\s*\)\s*OF\s+[a-zA-Z-]+\s*\{\s*\{\s*([0-9a-zA-Z-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+E-RAB-IE-ContainerList\s*\{\s*\{\s*([a-zA-Z0-9-]+)\s*\}\s*\}', lines, re.MULTILINE):
ieofielist[m[0]] = m[1]
for i in re.findall(r'([a-zA-Z0-9-]+)\s+([A-Z0-9-]+)\s*::=\s*\{\s+([\,\|\{\}\t\n\.{3}\ \-a-zA-Z0-9]+)\s+}\n', lines, re.MULTILINE):
ies = []
maxLength = 0
# TODO: handle extensions
if i[1].find('EXTENSION') >= 0:
continue
if fileprefix == "":
fileprefix = i[1][:i[1].find('-')].lower()
for j in re.findall(r'\s*\{\s*([a-zA-Z0-9-\ \t]+)\s*\}\s*[\|,]*', i[2], re.MULTILINE):
for k in re.findall(r'ID\s*([a-zA-Z0-9\-]+)\s*CRITICALITY\s*([a-zA-Z0-9\-]+)\s+[A-Z]+\s+([a-zA-Z0-9\-]+)\s*PRESENCE\s*([a-zA-Z0-9\-]+)', j, re.MULTILINE):
printDebug("Got new ie for message " + i[0] + ": " + str(k))
if len(k[2]) > maxLength:
maxLength = len(k[2])
ies.append(k)
if len(ies) > 0:
iesDefs[i[0]] = { "length": maxLength, "ies": ies}
else:
printWarning("Didn't find any information element for message: " + i[0])
if len(iesDefs) == 0:
printFail("No Information Element parsed, exiting")
sys.exit(0)
f = open(outdir + fileprefix + '_ies_defs.h', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n\n" % (fileprefix))
f.write("#ifndef %s_IES_DEFS_H_\n#define %s_IES_DEFS_H_\n\n" % (fileprefix.upper(), fileprefix.upper()))
for key in iesDefs:
if key not in ieofielist.values():
continue
for (i, j) in ieofielist.items():
if j == key:
break
f.write("typedef struct %sIEs_s {\n" % (re.sub('-', '_', i)))
f.write(" A_SEQUENCE_OF(struct %s_s) %s;\n" % (re.sub('IEs', '', re.sub('-', '_', ieofielist[i])), lowerFirstCamelWord(re.sub('IEs', '', re.sub('-', '_', ieofielist[i])))))
f.write("} %sIEs_t;\n\n" % (re.sub('-', '_', i)))
for key in iesDefs:
keyupperunderscore = re.sub('-', '_', key.upper())
keylowerunderscore = re.sub('-', '_', key.lower())
shift = 0
if len(iesDefs[key]["ies"]) == 0:
continue
# Presence mask
for ie in iesDefs[key]["ies"]:
ieupperunderscore = re.sub('-', '_', ie[2].upper())
if ie[3] == "optional" or ie[3] == "conditional":
f.write("#define {0:<{pad}} {1}\n".format("%s_%s_PRESENT" % (keyupperunderscore, ieupperunderscore), "(1 << %d)" % shift,
pad=iesDefs[key]["length"] + len(keyupperunderscore) + 9))
shift += 1
if (shift > 0):
f.write("\n")
f.write("typedef struct %s_s {\n" % (re.sub('-', '_', key)))
if (shift > 0):
f.write(" {0:<{pad}} {1};\n".format("uint16_t", "presenceMask", pad=iesDefs[key]["length"] + 2))
for ie in iesDefs[key]["ies"]:
ieunderscore = re.sub('-', '_', ie[2])
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
if ie[2] in ieofielist:
f.write(" %sIEs_t %s;" % (re.sub('-', '_', ie[2]), ienameunderscore))
else:
f.write(" {0:<{pad}} {1};".format("%s_t" % ieunderscore, ienameunderscore, pad=iesDefs[key]["length"] + 2))
if ie[3] == "optional":
f.write(" ///< Optional field")
elif ie[3] == "conditional":
f.write(" ///< Conditional field")
f.write("\n")
f.write("} %s_t;\n\n" % (re.sub('-', '_', key)))
f.write("typedef struct %s_message_s {\n" % (fileprefix))
f.write(" uint8_t procedureCode;\n")
f.write(" uint8_t criticality;\n")
f.write(" uint8_t direction;\n")
f.write(" union {\n")
messageList = iesDefs.keys()
messageList.sort()
for message in messageList:
if message in ieofielist.values():
continue
if len(iesDefs[message]["ies"]) == 0:
continue
f.write(" %s_t %s;\n" % (re.sub('-', '_', message), lowerFirstCamelWord(re.sub('-', '_', message))))
f.write(" } msg;\n")
f.write("} %s_message;\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
keylowerunderscore = re.sub('-', '_', key.lower())
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
if len(iesDefs[key]["ies"]) != 0:
f.write(" * \\param %s Pointer to ASN1 structure in which data will be stored\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, keylowerunderscore))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p);\n\n")
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
for key in iesDefs:
if key not in ieofielist.values():
continue
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
f.write("/** \\brief Encode function for %s ies.\n" % (key))
f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower))
f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" **/\n")
f.write("int %s_encode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower))
f.write(" %sIEs_t *%sIEs);\n\n" % (asn1cStruct, firstlower))
f.write("/** \\brief Decode function for %s ies.\n" % (key))
f.write(" * \\param any_p Pointer to the ANY value to decode.\n")
f.write(" * \\param callback Callback function called when any_p is successfully decoded.\n")
f.write(" **/\n")
f.write("int %s_decode_%s(\n" % (fileprefix, firstlower.lower()))
f.write(" %sIEs_t *%sIEs,\n" % (asn1cStruct, firstlower))
f.write(" %s_t *%s);\n\n" % (asn1cStruct, lowerFirstCamelWord(asn1cStruct)))
f.write("#endif /* %s_IES_DEFS_H_ */\n\n" % (fileprefix.upper()))
#Generate Decode functions
f = open(outdir + fileprefix + '_decoder.c', 'w')
outputHeaderToFile(f, filename)
f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
ielistname = re.sub('UE', 'ue', asn1cStruct)
ielistnamefirstlower = ielistname[:1].lower() + ielistname[1:]
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstlower)
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
if len(iesDefs[key]["ies"]) != 0:
f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" ANY_t *any_p) {\n\n")
f.write(" %s_t %s;\n %s_t *%s_p = &%s;\n" % (asn1cStruct, asn1cStructfirstlower, asn1cStruct, asn1cStructfirstlower, asn1cStructfirstlower))
f.write(" int i, decoded = 0;\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" int tempDecoded = 0;\n")
f.write(" assert(any_p != NULL);\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" %s_DEBUG(\"Decoding message %s (%%s:%%d)\\n\", __FILE__, __LINE__);\n\n" % (fileprefix.upper(), re.sub('-', '_', keyName)))
f.write(" ANY_to_type_aper(any_p, &asn_DEF_%s, (void**)&%s_p);\n\n" % (asn1cStruct, asn1cStructfirstlower))
f.write(" for (i = 0; i < %s_p->%slist.count; i++) {\n" % (asn1cStructfirstlower, iesaccess))
f.write(" IE_t *ie_p;\n")
f.write(" ie_p = %s_p->%slist.array[i];\n" % (asn1cStructfirstlower, iesaccess))
f.write(" switch(ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
ienameunderscorefirstlower = lowerFirstCamelWord(ienameunderscore)
ietypesubst = re.sub('-', '', ie[2])
ietypeunderscore = re.sub('-', '_', ie[2])
ieupperunderscore = re.sub('-', '_', ie[2]).upper()
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" case ProtocolIE_ID_%s:\n" % (re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t %s;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" %s_t *%s_p = &%s;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst), lowerFirstCamelWord(ietypesubst)))
if ie[3] != "mandatory":
f.write(" %s->presenceMask |= %s_%s_PRESENT;\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" if (tempDecoded < 0) {\n")
f.write(" %s_DEBUG(\"Decoding of IE %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
if ie[2] in ieofielist.keys():
f.write(" if (%s_decode_%s(&%s->%s, %s_p) < 0)\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" %s_DEBUG(\"Decoding of encapsulated IE %s failed\\n\");\n" % (fileprefix.upper(), lowerFirstCamelWord(ietypesubst)))
else:
f.write(" memcpy(&%s->%s, %s_p, sizeof(%s_t));\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst), ietypeunderscore))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_DEBUG(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
for key in iesDefs:
if key not in ieofielist.values():
continue
keyname = re.sub('IEs', '', re.sub('Item', 'List', key))
f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', keyname).lower()))
f.write(" %sIEs_t *%sIEs,\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" int i, decoded = 0;\n")
f.write(" int tempDecoded = 0;\n\n")
f.write(" for (i = 0; i < %s->list.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" IE_t *ie_p = %s->list.array[i];\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname))))
f.write(" switch (ie_p->id) {\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('id-', '', ie[0])
ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename))
f.write(" case ProtocolIE_ID_%s:\n" % (re.sub('-', '_', ie[0])))
f.write(" {\n")
f.write(" %s_t *%s_p;\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" if (tempDecoded < 0) {\n")
f.write(" %s_DEBUG(\"Decoding of IE %s for message %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore, re.sub('-', '_', keyname)))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" ASN_SEQUENCE_ADD(&%sIEs->%s, %s_p);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)),
re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), lowerFirstCamelWord(re.sub('-', '', ie[2]))))
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_DEBUG(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" }\n")
f.write(" return decoded;\n")
f.write("}\n\n")
#Generate IES Encode functions
f = open(outdir + fileprefix + '_encoder.c', 'w')
outputHeaderToFile(f,filename)
f.write("#include \"%s_common.h\"\n" % (fileprefix))
f.write("#include \"%s_ies_defs.h\"\n\n" % (fileprefix))
for key in iesDefs:
if key in ieofielist.values():
continue
structName = re.sub('ies', '', key)
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:]
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
iesaccess = ""
if key not in ieofielist.values():
iesaccess = "%s_ies." % (firstwordlower)
keyName = re.sub('-', '_', key)
keyupperunderscore = keyName.upper()
# No IE to encode...
if len(iesDefs[key]["ies"]) == 0:
continue
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower())))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key))))
f.write(" IE_t *ie;\n\n")
for ie in iesDefs[key]["ies"]:
iename = re.sub('-', '_', re.sub('id-', '', ie[0]))
ienameunderscore = re.sub('-', '_', iename)
ienamefirstwordlower = lowerFirstCamelWord(iename)
ieupperunderscore = re.sub('-', '_', ie[2]).upper()
ietypeunderscore = re.sub('-', '_', ie[2])
if ie[3] != "mandatory":
if ie[3] == "optional":
f.write(" /* Optional field */\n")
elif ie[3] == "conditional":
f.write(" /* Conditional field */\n")
f.write(" if ((%s->presenceMask & %s_%s_PRESENT)\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore))
f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore))
f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0])))
f.write(" Criticality_%s,\n" % (ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess))
f.write(" }\n\n")
else:
if ie[2] in ieofielist.keys():
f.write(" %s_t %s;\n\n" % (ietypeunderscore, ienamefirstwordlower))
f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore))
f.write("\n")
f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0])))
f.write(" Criticality_%s,\n" % (ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
if ie[2] in ieofielist.keys():
f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower))
else:
f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n\n" % (firstwordlower, iesaccess))
f.write(" return 0;\n")
f.write("}\n\n")
for (key, value) in iesDefs.items():
if key not in ieofielist.values():
continue
ie = value["ies"][0]
ietypeunderscore = re.sub('-', '_', ie[2])
asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key)))
asn1cStruct = re.sub('Item', 'List', asn1cStruct)
firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct)))
for (i, j) in ieofielist.items():
if j == key:
break
f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', i).lower()))
f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower))
f.write(" %sIEs_t *%sIEs) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i))))
f.write(" int i;\n")
f.write(" IE_t *ie;\n\n")
f.write(" for (i = 0; i < %sIEs->%s.count; i++) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0])))
f.write(" Criticality_%s,\n" % (ie[1]))
f.write(" &asn_DEF_%s,\n" % (ietypeunderscore))
f.write(" %sIEs->%s.array[i])) == NULL) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key)))))
f.write(" return -1;\n")
f.write(" }\n")
f.write(" ASN_SEQUENCE_ADD(&%s->list, ie);\n" % (firstwordlower))
f.write(" }\n")
f.write(" return 0;\n")
f.write("}\n\n")
@@ -1,753 +0,0 @@
SUBDIRS= ASN1/ .
ASN_MODULEdir=.
libs1apmessagesdir=.
ASN_MODULE_SOURCES= \
Criticality.c \
Presence.c \
PrivateIE-ID.c \
ProcedureCode.c \
ProtocolExtensionID.c \
ProtocolIE-ID.c \
TriggeringMessage.c \
IE-Extensions.c \
AllocationAndRetentionPriority.c \
Bearers-SubjectToStatusTransfer-List.c \
Bearers-SubjectToStatusTransfer-Item.c \
BitRate.c \
BPLMNs.c \
BroadcastCompletedAreaList.c \
Cause.c \
CauseMisc.c \
CauseProtocol.c \
CauseRadioNetwork.c \
CauseTransport.c \
CauseNas.c \
CellIdentity.c \
CellID-Broadcast.c \
CellID-Broadcast-Item.c \
Cdma2000PDU.c \
Cdma2000RATType.c \
Cdma2000SectorID.c \
Cdma2000HOStatus.c \
Cdma2000HORequiredIndication.c \
Cdma2000OneXSRVCCInfo.c \
Cdma2000OneXMEID.c \
Cdma2000OneXMSI.c \
Cdma2000OneXPilot.c \
Cdma2000OneXRAND.c \
Cell-Size.c \
CellType.c \
CGI.c \
CI.c \
CNDomain.c \
CSFallbackIndicator.c \
CSG-Id.c \
CSG-IdList.c \
CSG-IdList-Item.c \
COUNTvalue.c \
CriticalityDiagnostics.c \
CriticalityDiagnostics-IE-List.c \
CriticalityDiagnostics-IE-Item.c \
DataCodingScheme.c \
DL-Forwarding.c \
Direct-Forwarding-Path-Availability.c \
E-RABToBeModifiedListBearerModReq.c \
E-RABToBeModifiedItemBearerModReq.c \
E-RABReleaseListBearerRelComp.c \
E-RABReleaseItemBearerRelComp.c \
E-RABDataForwardingList.c \
E-RABDataForwardingItem.c \
E-RABToBeSetupListCtxtSUReq.c \
E-RABToBeSetupItemCtxtSUReq.c \
E-RABSetupListBearerSURes.c \
E-RABSetupItemBearerSURes.c \
E-RABFailedtoSetupListHOReqAck.c \
E-RABFailedToSetupItemHOReqAck.c \
E-RABToBeSetupListBearerSUReq.c \
E-RABToBeSetupItemBearerSUReq.c \
E-RABAdmittedList.c \
E-RABAdmittedItem.c \
E-RABToBeSwitchedDLList.c \
E-RABToBeSwitchedDLItem.c \
E-RABToBeSwitchedULList.c \
E-RABToBeSwitchedULItem.c \
E-RABModifyListBearerModRes.c \
E-RABModifyItemBearerModRes.c \
E-RABSetupListCtxtSURes.c \
E-RABSetupItemCtxtSURes.c \
E-RABToBeSetupListHOReq.c \
E-RABToBeSetupItemHOReq.c \
ECGIList.c \
EmergencyAreaIDList.c \
EmergencyAreaID.c \
EmergencyAreaID-Broadcast.c \
EmergencyAreaID-Broadcast-Item.c \
CompletedCellinEAI.c \
CompletedCellinEAI-Item.c \
ENB-ID.c \
GERAN-Cell-ID.c \
Global-ENB-ID.c \
ENB-StatusTransfer-TransparentContainer.c \
ENB-UE-S1AP-ID.c \
ENBname.c \
ENBX2TLAs.c \
EncryptionAlgorithms.c \
EPLMNs.c \
EventType.c \
E-RAB-ID.c \
E-RABInformationList.c \
E-RABInformationListItem.c \
E-RABList.c \
E-RABItem.c \
E-RABLevelQoSParameters.c \
EUTRAN-CGI.c \
ExtendedRNC-ID.c \
ForbiddenInterRATs.c \
ForbiddenTAs.c \
ForbiddenTAs-Item.c \
ForbiddenTACs.c \
ForbiddenLAs.c \
ForbiddenLAs-Item.c \
ForbiddenLACs.c \
GBR-QosInformation.c \
GTP-TEID.c \
GUMMEI.c \
HandoverRestrictionList.c \
HandoverType.c \
HFN.c \
HandoverNotify.c \
Inter-SystemInformationTransferType.c \
IMSI.c \
IntegrityProtectionAlgorithms.c \
InterfacesToTrace.c \
LAC.c \
LAI.c \
LastVisitedCell-Item.c \
LastVisitedEUTRANCellInformation.c \
LastVisitedUTRANCellInformation.c \
LastVisitedGERANCellInformation.c \
L3-Information.c \
MessageIdentifier.c \
MMEname.c \
MME-Group-ID.c \
MME-Code.c \
MME-UE-S1AP-ID.c \
M-TMSI.c \
MSClassmark2.c \
MSClassmark3.c \
NAS-PDU.c \
NASSecurityParametersfromE-UTRAN.c \
NASSecurityParameterstoE-UTRAN.c \
NumberofBroadcastRequest.c \
NumberOfBroadcasts.c \
OldBSS-ToNewBSS-Information.c \
OverloadAction.c \
OverloadResponse.c \
PagingDRX.c \
PDCP-SN.c \
PLMNidentity.c \
Pre-emptionCapability.c \
Pre-emptionVulnerability.c \
PriorityLevel.c \
QCI.c \
ReceiveStatusofULPDCPSDUs.c \
RelativeMMECapacity.c \
RAC.c \
RequestType.c \
ResetType.c \
ResetAll.c \
RIMTransfer.c \
RIMInformation.c \
RIMRoutingAddress.c \
ReportArea.c \
RepetitionPeriod.c \
RNC-ID.c \
RRC-Container.c \
RRC-Establishment-Cause.c \
SecurityKey.c \
SecurityContext.c \
SerialNumber.c \
SONInformation.c \
SONInformationRequest.c \
SONInformationReply.c \
SONConfigurationTransfer.c \
Source-ToTarget-TransparentContainer.c \
SourceBSS-ToTargetBSS-TransparentContainer.c \
SourceeNB-ID.c \
SRVCCOperationPossible.c \
SRVCCHOIndication.c \
SourceeNB-ToTargeteNB-TransparentContainer.c \
SourceRNC-ToTargetRNC-TransparentContainer.c \
ServedGUMMEIs.c \
ServedGUMMEIsItem.c \
ServedGroupIDs.c \
ServedMMECs.c \
ServedPLMNs.c \
SubscriberProfileIDforRFP.c \
SupportedTAs.c \
SupportedTAs-Item.c \
S-TMSI.c \
TAC.c \
TAIListforWarning.c \
TAIList.c \
TAIItem.c \
TAI.c \
TAI-Broadcast.c \
TAI-Broadcast-Item.c \
CompletedCellinTAI.c \
CompletedCellinTAI-Item.c \
TBCD-STRING.c \
TargetID.c \
TargeteNB-ID.c \
TargetRNC-ID.c \
TargeteNB-ToSourceeNB-TransparentContainer.c \
Target-ToSource-TransparentContainer.c \
TargetRNC-ToSourceRNC-TransparentContainer.c \
TargetBSS-ToSourceBSS-TransparentContainer.c \
TimeToWait.c \
Time-UE-StayedInCell.c \
TransportLayerAddress.c \
TraceActivation.c \
TraceDepth.c \
E-UTRAN-Trace-ID.c \
TypeOfError.c \
UEAggregateMaximumBitrate.c \
UE-S1AP-IDs.c \
UE-S1AP-ID-pair.c \
UE-associatedLogicalS1-ConnectionListRes.c \
UE-associatedLogicalS1-ConnectionListResAck.c \
UE-associatedLogicalS1-ConnectionItem.c \
UEIdentityIndexValue.c \
UE-HistoryInformation.c \
UEPagingID.c \
UERadioCapability.c \
UESecurityCapabilities.c \
WarningAreaList.c \
WarningType.c \
WarningSecurityInfo.c \
WarningMessageContents.c \
X2TNLConfigurationInfo.c \
S1AP-PDU.c \
InitiatingMessage.c \
SuccessfulOutcome.c \
UnsuccessfulOutcome.c \
HandoverRequired.c \
HandoverCommand.c \
HandoverPreparationFailure.c \
HandoverRequest.c \
HandoverRequestAcknowledge.c \
HandoverFailure.c \
HandoverNotify.c \
PathSwitchRequest.c \
PathSwitchRequestAcknowledge.c \
PathSwitchRequestFailure.c \
E-RABSetupRequest.c \
E-RABSetupResponse.c \
E-RABModifyRequest.c \
E-RABModifyResponse.c \
E-RABReleaseIndication.c \
E-RABReleaseCommand.c \
E-RABReleaseResponse.c \
InitialContextSetupRequest.c \
InitialContextSetupResponse.c \
InitialContextSetupFailure.c \
UEContextReleaseRequest.c \
Paging.c \
DownlinkNASTransport.c \
InitialUEMessage.c \
UplinkNASTransport.c \
NASNonDeliveryIndication.c \
HandoverCancel.c \
HandoverCancelAcknowledge.c \
Reset.c \
ResetAcknowledge.c \
S1SetupResponse.c \
S1SetupRequest.c \
S1SetupFailure.c \
ErrorIndication.c \
ENBConfigurationUpdate.c \
ENBConfigurationUpdateAcknowledge.c \
ENBConfigurationUpdateFailure.c \
MMEConfigurationUpdate.c \
MMEConfigurationUpdateAcknowledge.c \
MMEConfigurationUpdateFailure.c \
DownlinkS1cdma2000tunneling.c \
UplinkS1cdma2000tunneling.c \
UEContextModificationRequest.c \
UEContextModificationResponse.c \
UEContextModificationFailure.c \
UECapabilityInfoIndication.c \
UEContextReleaseCommand.c \
UEContextReleaseComplete.c \
ENBStatusTransfer.c \
MMEStatusTransfer.c \
DeactivateTrace.c \
TraceStart.c \
TraceFailureIndication.c \
CellTrafficTrace.c \
LocationReportingControl.c \
LocationReportingFailureIndication.c \
LocationReport.c \
OverloadStart.c \
OverloadStop.c \
WriteReplaceWarningRequest.c \
WriteReplaceWarningResponse.c \
ENBDirectInformationTransfer.c \
MMEDirectInformationTransfer.c \
ENBConfigurationTransfer.c \
MMEConfigurationTransfer.c \
PrivateMessage.c \
IE.c \
IE-Extensions.c
ASN_MODULE_HEADERS= \
Criticality.h \
Presence.h \
PrivateIE-ID.h \
ProcedureCode.h \
ProtocolExtensionID.h \
ProtocolIE-ID.h \
TriggeringMessage.h \
AllocationAndRetentionPriority.h \
Bearers-SubjectToStatusTransfer-List.h \
Bearers-SubjectToStatusTransfer-Item.h \
BitRate.h \
BPLMNs.h \
BroadcastCompletedAreaList.h \
Cause.h \
CauseMisc.h \
CauseProtocol.h \
CauseRadioNetwork.h \
CauseTransport.h \
CauseNas.h \
CellIdentity.h \
CellID-Broadcast.h \
CellID-Broadcast-Item.h \
Cdma2000PDU.h \
Cdma2000RATType.h \
Cdma2000SectorID.h \
Cdma2000HOStatus.h \
Cdma2000HORequiredIndication.h \
Cdma2000OneXSRVCCInfo.h \
Cdma2000OneXMEID.h \
Cdma2000OneXMSI.h \
Cdma2000OneXPilot.h \
Cdma2000OneXRAND.h \
Cell-Size.h \
CellType.h \
CGI.h \
CI.h \
CNDomain.h \
CSFallbackIndicator.h \
CSG-Id.h \
CSG-IdList.h \
CSG-IdList-Item.h \
COUNTvalue.h \
CriticalityDiagnostics.h \
CriticalityDiagnostics-IE-List.h \
CriticalityDiagnostics-IE-Item.h \
DataCodingScheme.h \
DL-Forwarding.h \
Direct-Forwarding-Path-Availability.h \
E-RABToBeModifiedListBearerModReq.h \
E-RABToBeModifiedItemBearerModReq.h \
E-RABReleaseListBearerRelComp.h \
E-RABReleaseItemBearerRelComp.h \
E-RABDataForwardingList.h \
E-RABDataForwardingItem.h \
E-RABToBeSetupListCtxtSUReq.h \
E-RABToBeSetupItemCtxtSUReq.h \
E-RABSetupListBearerSURes.h \
E-RABSetupItemBearerSURes.h \
E-RABFailedtoSetupListHOReqAck.h \
E-RABFailedToSetupItemHOReqAck.h \
E-RABToBeSetupListBearerSUReq.h \
E-RABToBeSetupItemBearerSUReq.h \
E-RABAdmittedList.h \
E-RABAdmittedItem.h \
E-RABToBeSwitchedDLList.h \
E-RABToBeSwitchedDLItem.h \
E-RABToBeSwitchedULList.h \
E-RABToBeSwitchedULItem.h \
E-RABModifyListBearerModRes.h \
E-RABModifyItemBearerModRes.h \
E-RABSetupListCtxtSURes.h \
E-RABSetupItemCtxtSURes.h \
E-RABToBeSetupListHOReq.h \
E-RABToBeSetupItemHOReq.h \
ECGIList.h \
EmergencyAreaIDList.h \
EmergencyAreaID.h \
EmergencyAreaID-Broadcast.h \
EmergencyAreaID-Broadcast-Item.h \
CompletedCellinEAI.h \
CompletedCellinEAI-Item.h \
ENB-ID.h \
GERAN-Cell-ID.h \
Global-ENB-ID.h \
ENB-StatusTransfer-TransparentContainer.h \
ENB-UE-S1AP-ID.h \
ENBname.h \
ENBX2TLAs.h \
EncryptionAlgorithms.h \
EPLMNs.h \
EventType.h \
E-RAB-ID.h \
E-RABInformationList.h \
E-RABInformationListItem.h \
E-RABList.h \
E-RABItem.h \
E-RABLevelQoSParameters.h \
EUTRAN-CGI.h \
ExtendedRNC-ID.h \
ForbiddenInterRATs.h \
ForbiddenTAs.h \
ForbiddenTAs-Item.h \
ForbiddenTACs.h \
ForbiddenLAs.h \
ForbiddenLAs-Item.h \
ForbiddenLACs.h \
GBR-QosInformation.h \
GTP-TEID.h \
GUMMEI.h \
HandoverRestrictionList.h \
HandoverType.h \
HFN.h \
HandoverNotify.h \
Inter-SystemInformationTransferType.h \
IMSI.h \
IntegrityProtectionAlgorithms.h \
InterfacesToTrace.h \
LAC.h \
LAI.h \
LastVisitedCell-Item.h \
LastVisitedEUTRANCellInformation.h \
LastVisitedUTRANCellInformation.h \
LastVisitedGERANCellInformation.h \
L3-Information.h \
MessageIdentifier.h \
MMEname.h \
MME-Group-ID.h \
MME-Code.h \
MME-UE-S1AP-ID.h \
M-TMSI.h \
MSClassmark2.h \
MSClassmark3.h \
NAS-PDU.h \
NASSecurityParametersfromE-UTRAN.h \
NASSecurityParameterstoE-UTRAN.h \
NumberofBroadcastRequest.h \
NumberOfBroadcasts.h \
OldBSS-ToNewBSS-Information.h \
OverloadAction.h \
OverloadResponse.h \
PagingDRX.h \
PDCP-SN.h \
PLMNidentity.h \
Pre-emptionCapability.h \
Pre-emptionVulnerability.h \
PriorityLevel.h \
QCI.h \
ReceiveStatusofULPDCPSDUs.h \
RelativeMMECapacity.h \
RAC.h \
RequestType.h \
ResetType.h \
ResetAll.h \
RIMTransfer.h \
RIMInformation.h \
RIMRoutingAddress.h \
ReportArea.h \
RepetitionPeriod.h \
RNC-ID.h \
RRC-Container.h \
RRC-Establishment-Cause.h \
SecurityKey.h \
SecurityContext.h \
SerialNumber.h \
SONInformation.h \
SONInformationRequest.h \
SONInformationReply.h \
SONConfigurationTransfer.h \
Source-ToTarget-TransparentContainer.h \
SourceBSS-ToTargetBSS-TransparentContainer.h \
SourceeNB-ID.h \
SRVCCOperationPossible.h \
SRVCCHOIndication.h \
SourceeNB-ToTargeteNB-TransparentContainer.h \
SourceRNC-ToTargetRNC-TransparentContainer.h \
ServedGUMMEIs.h \
ServedGUMMEIsItem.h \
ServedGroupIDs.h \
ServedMMECs.h \
ServedPLMNs.h \
SubscriberProfileIDforRFP.h \
SupportedTAs.h \
SupportedTAs-Item.h \
S-TMSI.h \
TAC.h \
TAIListforWarning.h \
TAIList.h \
TAIItem.h \
TAI.h \
TAI-Broadcast.h \
TAI-Broadcast-Item.h \
CompletedCellinTAI.h \
CompletedCellinTAI-Item.h \
TBCD-STRING.h \
TargetID.h \
TargeteNB-ID.h \
TargetRNC-ID.h \
TargeteNB-ToSourceeNB-TransparentContainer.h \
Target-ToSource-TransparentContainer.h \
TargetRNC-ToSourceRNC-TransparentContainer.h \
TargetBSS-ToSourceBSS-TransparentContainer.h \
TimeToWait.h \
Time-UE-StayedInCell.h \
TransportLayerAddress.h \
TraceActivation.h \
TraceDepth.h \
E-UTRAN-Trace-ID.h \
TypeOfError.h \
UEAggregateMaximumBitrate.h \
UE-S1AP-IDs.h \
UE-S1AP-ID-pair.h \
UE-associatedLogicalS1-ConnectionListRes.h \
UE-associatedLogicalS1-ConnectionListResAck.h \
UE-associatedLogicalS1-ConnectionItem.h \
UEIdentityIndexValue.h \
UE-HistoryInformation.h \
UEPagingID.h \
UERadioCapability.h \
UESecurityCapabilities.h \
WarningAreaList.h \
WarningType.h \
WarningSecurityInfo.h \
WarningMessageContents.h \
X2TNLConfigurationInfo.h \
S1AP-PDU.h \
InitiatingMessage.h \
SuccessfulOutcome.h \
UnsuccessfulOutcome.h \
HandoverRequired.h \
HandoverCommand.h \
HandoverPreparationFailure.h \
HandoverRequest.h \
HandoverRequestAcknowledge.h \
HandoverFailure.h \
PathSwitchRequest.h \
PathSwitchRequestAcknowledge.h \
PathSwitchRequestFailure.h \
E-RABSetupRequest.h \
E-RABSetupResponse.h \
E-RABModifyRequest.h \
E-RABModifyResponse.h \
E-RABReleaseIndication.h \
E-RABReleaseCommand.h \
E-RABReleaseResponse.h \
InitialContextSetupRequest.h \
InitialContextSetupResponse.h \
InitialContextSetupFailure.h \
UEContextReleaseRequest.h \
Paging.h \
DownlinkNASTransport.h \
InitialUEMessage.h \
UplinkNASTransport.h \
NASNonDeliveryIndication.h \
HandoverCancel.h \
HandoverCancelAcknowledge.h \
Reset.h \
ResetAcknowledge.h \
S1SetupResponse.h \
S1SetupRequest.h \
S1SetupFailure.h \
ErrorIndication.h \
ENBConfigurationUpdate.h \
ENBConfigurationUpdateAcknowledge.h \
ENBConfigurationUpdateFailure.h \
MMEConfigurationUpdate.h \
MMEConfigurationUpdateAcknowledge.h \
MMEConfigurationUpdateFailure.h \
DownlinkS1cdma2000tunneling.h \
UplinkS1cdma2000tunneling.h \
UEContextModificationRequest.h \
UEContextModificationResponse.h \
UEContextModificationFailure.h \
UECapabilityInfoIndication.h \
UEContextReleaseCommand.h \
UEContextReleaseComplete.h \
ENBStatusTransfer.h \
MMEStatusTransfer.h \
DeactivateTrace.h \
TraceStart.h \
TraceFailureIndication.h \
CellTrafficTrace.h \
LocationReportingControl.h \
LocationReportingFailureIndication.h \
LocationReport.h \
OverloadStart.h \
OverloadStop.h \
WriteReplaceWarningRequest.h \
WriteReplaceWarningResponse.h \
ENBDirectInformationTransfer.h \
MMEDirectInformationTransfer.h \
ENBConfigurationTransfer.h \
MMEConfigurationTransfer.h \
PrivateMessage.h \
IE.h \
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 += \
KillResponse.c \
KillRequest.c \
Data-Forwarding-Not-Possible.c \
DownlinkUEAssociatedLPPaTransport.c \
UplinkUEAssociatedLPPaTransport.c \
DownlinkNonUEAssociatedLPPaTransport.c \
UplinkNonUEAssociatedLPPaTransport.c \
TAI-Cancelled.c \
TAI-Cancelled-Item.c \
StratumLevel.c \
SynchronizationStatus.c \
TimeSynchronizationInfo.c \
Routing-ID.c \
PS-ServiceNotAvailable.c \
LPPa-PDU.c \
ExtendedRepetitionPeriod.c \
EUTRANRoundTripDelayEstimationInfo.c \
EmergencyAreaID-Cancelled.c \
EmergencyAreaID-Cancelled-Item.c \
CSGMembershipStatus.c \
ConcurrentWarningMessageIndicator.c \
CellID-Cancelled.c \
CellID-Cancelled-Item.c \
CellAccessMode.c \
CancelledCellinEAI.c \
CancelledCellinEAI-Item.c \
CancelledCellinTAI.c \
CancelledCellinTAI-Item.c \
BroadcastCancelledAreaList.c
ASN_MODULE_HEADERS += \
BroadcastCancelledAreaList.h \
CancelledCellinEAI.h \
CancelledCellinEAI-Item.h \
CancelledCellinTAI.h \
CancelledCellinTAI-Item.h \
CellAccessMode.h \
CellID-Cancelled.h \
CellID-Cancelled-Item.h \
ConcurrentWarningMessageIndicator.h \
CSGMembershipStatus.h \
Data-Forwarding-Not-Possible.h \
EmergencyAreaID-Cancelled.h \
EmergencyAreaID-Cancelled-Item.h \
E-RABList.h \
EUTRANRoundTripDelayEstimationInfo.h \
ExtendedRepetitionPeriod.h \
LPPa-PDU.h \
PS-ServiceNotAvailable.h \
Routing-ID.h \
StratumLevel.h \
SynchronizationStatus.h \
TimeSynchronizationInfo.h \
TAI-Cancelled.h \
TAI-Cancelled-Item.h \
KillResponse.h \
KillRequest.h \
DownlinkUEAssociatedLPPaTransport.h \
UplinkUEAssociatedLPPaTransport.h \
DownlinkNonUEAssociatedLPPaTransport.h \
UplinkNonUEAssociatedLPPaTransport.h
endif
noinst_LTLIBRARIES = libs1apmessages.la
libs1apmessages_la_LDFLAGS = -all-static
BUILT_SOURCES = asn1regen.stamp
AM_CPPFLAGS = -DEMIT_ASN_DEBUG=1
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
echo Timestamp > $@
asn1c -gen-PER -fnative-types -fskeletons-copy $^
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)
File diff suppressed because it is too large Load Diff
@@ -1,738 +0,0 @@
S1AP_ASN_MODULE_SOURCES= \
Criticality.o \
Presence.o \
PrivateIE-ID.o \
ProcedureCode.o \
ProtocolExtensionID.o \
ProtocolIE-ID.o \
TriggeringMessage.o \
IE-Extensions.o \
AllocationAndRetentionPriority.o \
Bearers-SubjectToStatusTransfer-List.o \
Bearers-SubjectToStatusTransfer-Item.o \
BitRate.o \
BPLMNs.o \
BroadcastCompletedAreaList.o \
Cause.o \
CauseMisc.o \
CauseProtocol.o \
CauseRadioNetwork.o \
CauseTransport.o \
CauseNas.o \
CellIdentity.o \
CellID-Broadcast.o \
CellID-Broadcast-Item.o \
Cdma2000PDU.o \
Cdma2000RATType.o \
Cdma2000SectorID.o \
Cdma2000HOStatus.o \
Cdma2000HORequiredIndication.o \
Cdma2000OneXSRVCCInfo.o \
Cdma2000OneXMEID.o \
Cdma2000OneXMSI.o \
Cdma2000OneXPilot.o \
Cdma2000OneXRAND.o \
Cell-Size.o \
CellType.o \
CGI.o \
CI.o \
CNDomain.o \
CSFallbackIndicator.o \
CSG-Id.o \
CSG-IdList.o \
CSG-IdList-Item.o \
COUNTvalue.o \
CriticalityDiagnostics.o \
CriticalityDiagnostics-IE-List.o \
CriticalityDiagnostics-IE-Item.o \
DataCodingScheme.o \
DL-Forwarding.o \
Direct-Forwarding-Path-Availability.o \
E-RABToBeModifiedListBearerModReq.o \
E-RABToBeModifiedItemBearerModReq.o \
E-RABReleaseListBearerRelComp.o \
E-RABReleaseItemBearerRelComp.o \
E-RABDataForwardingList.o \
E-RABDataForwardingItem.o \
E-RABToBeSetupListCtxtSUReq.o \
E-RABToBeSetupItemCtxtSUReq.o \
E-RABSetupListBearerSURes.o \
E-RABSetupItemBearerSURes.o \
E-RABFailedtoSetupListHOReqAck.o \
E-RABFailedToSetupItemHOReqAck.o \
E-RABToBeSetupListBearerSUReq.o \
E-RABToBeSetupItemBearerSUReq.o \
E-RABAdmittedList.o \
E-RABAdmittedItem.o \
E-RABToBeSwitchedDLList.o \
E-RABToBeSwitchedDLItem.o \
E-RABToBeSwitchedULList.o \
E-RABToBeSwitchedULItem.o \
E-RABModifyListBearerModRes.o \
E-RABModifyItemBearerModRes.o \
E-RABSetupListCtxtSURes.o \
E-RABSetupItemCtxtSURes.o \
E-RABToBeSetupListHOReq.o \
E-RABToBeSetupItemHOReq.o \
ECGIList.o \
EmergencyAreaIDList.o \
EmergencyAreaID.o \
EmergencyAreaID-Broadcast.o \
EmergencyAreaID-Broadcast-Item.o \
CompletedCellinEAI.o \
CompletedCellinEAI-Item.o \
ENB-ID.o \
GERAN-Cell-ID.o \
Global-ENB-ID.o \
ENB-StatusTransfer-TransparentContainer.o \
ENB-UE-S1AP-ID.o \
ENBname.o \
ENBX2TLAs.o \
EncryptionAlgorithms.o \
EPLMNs.o \
EventType.o \
E-RAB-ID.o \
E-RABInformationList.o \
E-RABInformationListItem.o \
E-RABList.o \
E-RABItem.o \
E-RABLevelQoSParameters.o \
EUTRAN-CGI.o \
ExtendedRNC-ID.o \
ForbiddenInterRATs.o \
ForbiddenTAs.o \
ForbiddenTAs-Item.o \
ForbiddenTACs.o \
ForbiddenLAs.o \
ForbiddenLAs-Item.o \
ForbiddenLACs.o \
GBR-QosInformation.o \
GTP-TEID.o \
GUMMEI.o \
HandoverRestrictionList.o \
HandoverType.o \
HFN.o \
Inter-SystemInformationTransferType.o \
IMSI.o \
IntegrityProtectionAlgorithms.o \
InterfacesToTrace.o \
LAC.o \
LAI.o \
LastVisitedCell-Item.o \
LastVisitedEUTRANCellInformation.o \
LastVisitedUTRANCellInformation.o \
LastVisitedGERANCellInformation.o \
L3-Information.o \
MessageIdentifier.o \
MMEname.o \
MME-Group-ID.o \
MME-Code.o \
MME-UE-S1AP-ID.o \
M-TMSI.o \
MSClassmark2.o \
MSClassmark3.o \
NAS-PDU.o \
NASSecurityParametersfromE-UTRAN.o \
NASSecurityParameterstoE-UTRAN.o \
NumberofBroadcastRequest.o \
NumberOfBroadcasts.o \
OldBSS-ToNewBSS-Information.o \
OverloadAction.o \
OverloadResponse.o \
PagingDRX.o \
PDCP-SN.o \
PLMNidentity.o \
Pre-emptionCapability.o \
Pre-emptionVulnerability.o \
PriorityLevel.o \
QCI.o \
ReceiveStatusofULPDCPSDUs.o \
RelativeMMECapacity.o \
RAC.o \
RequestType.o \
ResetType.o \
ResetAll.o \
RIMTransfer.o \
RIMInformation.o \
RIMRoutingAddress.o \
ReportArea.o \
RepetitionPeriod.o \
RNC-ID.o \
RRC-Container.o \
RRC-Establishment-Cause.o \
SecurityKey.o \
SecurityContext.o \
SerialNumber.o \
SONInformation.o \
SONInformationRequest.o \
SONInformationReply.o \
SONConfigurationTransfer.o \
Source-ToTarget-TransparentContainer.o \
SourceBSS-ToTargetBSS-TransparentContainer.o \
SourceeNB-ID.o \
SRVCCOperationPossible.o \
SRVCCHOIndication.o \
SourceeNB-ToTargeteNB-TransparentContainer.o \
SourceRNC-ToTargetRNC-TransparentContainer.o \
ServedGUMMEIs.o \
ServedGUMMEIsItem.o \
ServedGroupIDs.o \
ServedMMECs.o \
ServedPLMNs.o \
SubscriberProfileIDforRFP.o \
SupportedTAs.o \
SupportedTAs-Item.o \
S-TMSI.o \
TAC.o \
TAIListforWarning.o \
TAIList.o \
TAIItem.o \
TAI.o \
TAI-Broadcast.o \
TAI-Broadcast-Item.o \
CompletedCellinTAI.o \
CompletedCellinTAI-Item.o \
TBCD-STRING.o \
TargetID.o \
TargeteNB-ID.o \
TargetRNC-ID.o \
TargeteNB-ToSourceeNB-TransparentContainer.o \
Target-ToSource-TransparentContainer.o \
TargetRNC-ToSourceRNC-TransparentContainer.o \
TargetBSS-ToSourceBSS-TransparentContainer.o \
TimeToWait.o \
Time-UE-StayedInCell.o \
TransportLayerAddress.o \
TraceActivation.o \
TraceDepth.o \
E-UTRAN-Trace-ID.o \
TypeOfError.o \
UEAggregateMaximumBitrate.o \
UE-S1AP-IDs.o \
UE-S1AP-ID-pair.o \
UE-associatedLogicalS1-ConnectionListRes.o \
UE-associatedLogicalS1-ConnectionListResAck.o \
UE-associatedLogicalS1-ConnectionItem.o \
UEIdentityIndexValue.o \
UE-HistoryInformation.o \
UEPagingID.o \
UERadioCapability.o \
UESecurityCapabilities.o \
WarningAreaList.o \
WarningType.o \
WarningSecurityInfo.o \
WarningMessageContents.o \
X2TNLConfigurationInfo.o \
S1AP-PDU.o \
InitiatingMessage.o \
SuccessfulOutcome.o \
UnsuccessfulOutcome.o \
HandoverRequired.o \
HandoverCommand.o \
HandoverPreparationFailure.o \
HandoverRequest.o \
HandoverRequestAcknowledge.o \
HandoverFailure.o \
HandoverNotify.o \
PathSwitchRequest.o \
PathSwitchRequestAcknowledge.o \
PathSwitchRequestFailure.o \
E-RABSetupRequest.o \
E-RABSetupResponse.o \
E-RABModifyRequest.o \
E-RABModifyResponse.o \
E-RABReleaseIndication.o \
E-RABReleaseCommand.o \
E-RABReleaseResponse.o \
InitialContextSetupRequest.o \
InitialContextSetupResponse.o \
InitialContextSetupFailure.o \
UEContextReleaseRequest.o \
Paging.o \
DownlinkNASTransport.o \
InitialUEMessage.o \
UplinkNASTransport.o \
NASNonDeliveryIndication.o \
HandoverCancel.o \
HandoverCancelAcknowledge.o \
Reset.o \
ResetAcknowledge.o \
S1SetupResponse.o \
S1SetupRequest.o \
S1SetupFailure.o \
ErrorIndication.o \
ENBConfigurationUpdate.o \
ENBConfigurationUpdateAcknowledge.o \
ENBConfigurationUpdateFailure.o \
MMEConfigurationUpdate.o \
MMEConfigurationUpdateAcknowledge.o \
MMEConfigurationUpdateFailure.o \
DownlinkS1cdma2000tunneling.o \
UplinkS1cdma2000tunneling.o \
UEContextModificationRequest.o \
UEContextModificationResponse.o \
UEContextModificationFailure.o \
UECapabilityInfoIndication.o \
UEContextReleaseCommand.o \
UEContextReleaseComplete.o \
ENBStatusTransfer.o \
MMEStatusTransfer.o \
DeactivateTrace.o \
TraceStart.o \
TraceFailureIndication.o \
CellTrafficTrace.o \
LocationReportingControl.o \
LocationReportingFailureIndication.o \
LocationReport.o \
OverloadStart.o \
OverloadStop.o \
WriteReplaceWarningRequest.o \
WriteReplaceWarningResponse.o \
ENBDirectInformationTransfer.o \
MMEDirectInformationTransfer.o \
ENBConfigurationTransfer.o \
MMEConfigurationTransfer.o \
PrivateMessage.o \
IE.o
S1AP_ASN_MODULE_HEADERS= \
Criticality.h \
Presence.h \
PrivateIE-ID.h \
ProcedureCode.h \
ProtocolExtensionID.h \
ProtocolIE-ID.h \
TriggeringMessage.h \
IE-Extensions.h \
AllocationAndRetentionPriority.h \
Bearers-SubjectToStatusTransfer-List.h \
Bearers-SubjectToStatusTransfer-Item.h \
BitRate.h \
BPLMNs.h \
BroadcastCompletedAreaList.h \
Cause.h \
CauseMisc.h \
CauseProtocol.h \
CauseRadioNetwork.h \
CauseTransport.h \
CauseNas.h \
CellIdentity.h \
CellID-Broadcast.h \
CellID-Broadcast-Item.h \
Cdma2000PDU.h \
Cdma2000RATType.h \
Cdma2000SectorID.h \
Cdma2000HOStatus.h \
Cdma2000HORequiredIndication.h \
Cdma2000OneXSRVCCInfo.h \
Cdma2000OneXMEID.h \
Cdma2000OneXMSI.h \
Cdma2000OneXPilot.h \
Cdma2000OneXRAND.h \
Cell-Size.h \
CellType.h \
CGI.h \
CI.h \
CNDomain.h \
CSFallbackIndicator.h \
CSG-Id.h \
CSG-IdList.h \
CSG-IdList-Item.h \
COUNTvalue.h \
CriticalityDiagnostics.h \
CriticalityDiagnostics-IE-List.h \
CriticalityDiagnostics-IE-Item.h \
DataCodingScheme.h \
DL-Forwarding.h \
Direct-Forwarding-Path-Availability.h \
E-RABToBeModifiedListBearerModReq.h \
E-RABToBeModifiedItemBearerModReqIEs.h \
E-RABToBeModifiedItemBearerModReq.h \
E-RABReleaseListBearerRelComp.h \
E-RABReleaseItemBearerRelCompIEs.h \
E-RABReleaseItemBearerRelComp.h \
E-RABSubjecttoDataForwardingList.h \
E-RABDataForwardingList.h \
E-RABDataForwardingItemIEs.h \
E-RABDataForwardingItem.h \
E-RABToBeSetupListCtxtSUReq.h \
E-RABToBeSetupItemCtxtSUReqIEs.h \
E-RABToBeSetupItemCtxtSUReq.h \
E-RABSetupListBearerSURes.h \
E-RABSetupItemBearerSUResIEs.h \
E-RABSetupItemBearerSURes.h \
E-RABFailedtoSetupListHOReqAck.h \
E-RABFailedtoSetupItemHOReqAckIEs.h \
E-RABFailedToSetupItemHOReqAck.h \
E-RABToBeSetupListBearerSUReq.h \
E-RABToBeSetupItemBearerSUReqIEs.h \
E-RABToBeSetupItemBearerSUReq.h \
E-RABAdmittedList.h \
E-RABAdmittedItemIEs.h \
E-RABAdmittedItem.h \
E-RABToBeSwitchedDLList.h \
E-RABToBeSwitchedDLListIEs.h \
E-RABToBeSwitchedDLItem.h \
E-RABToBeSwitchedULList.h \
E-RABToBeSwitchedULItemIEs.h \
E-RABToBeSwitchedULItem.h \
E-RABModifyListBearerModRes.h \
E-RABModifyItemBearerModResIEs.h \
E-RABModifyItemBearerModRes.h \
E-RABSetupListCtxtSURes.h \
E-RABSetupListCtxtSUResIEs.h \
E-RABSetupItemCtxtSURes.h \
E-RABToBeSetupListHOReq.h \
E-RABToBeSetupListHOReqIEs.h \
E-RABToBeSetupItemHOReq.h \
ECGIList.h \
EmergencyAreaIDList.h \
EmergencyAreaID.h \
EmergencyAreaID-Broadcast.h \
EmergencyAreaID-Broadcast-Item.h \
CompletedCellinEAI.h \
CompletedCellinEAI-Item.h \
ENB-ID.h \
GERAN-Cell-ID.h \
Global-ENB-ID.h \
ENB-StatusTransfer-TransparentContainer.h \
ENB-UE-S1AP-ID.h \
ENBname.h \
ENBX2TLAs.h \
EncryptionAlgorithms.h \
EPLMNs.h \
EventType.h \
E-RAB-ID.h \
E-RABInformationList.h \
E-RABInformationListItem.h \
E-RABList.h \
E-RABItem.h \
E-RABLevelQoSParameters.h \
EUTRAN-CGI.h \
ExtendedRNC-ID.h \
ForbiddenInterRATs.h \
ForbiddenTAs.h \
ForbiddenTAs-Item.h \
ForbiddenTACs.h \
ForbiddenLAs.h \
ForbiddenLAs-Item.h \
ForbiddenLACs.h \
GBR-QosInformation.h \
GTP-TEID.h \
GUMMEI.h \
HandoverRestrictionList.h \
HandoverType.h \
HFN.h \
HandoverNotify.h \
Inter-SystemInformationTransferType.h \
IMSI.h \
IntegrityProtectionAlgorithms.h \
InterfacesToTrace.h \
LAC.h \
LAI.h \
LastVisitedCell-Item.h \
LastVisitedEUTRANCellInformation.h \
LastVisitedUTRANCellInformation.h \
LastVisitedGERANCellInformation.h \
L3-Information.h \
MessageIdentifier.h \
MMEname.h \
MME-Group-ID.h \
MME-Code.h \
MME-UE-S1AP-ID.h \
M-TMSI.h \
MSClassmark2.h \
MSClassmark3.h \
NAS-PDU.h \
NASSecurityParametersfromE-UTRAN.h \
NASSecurityParameterstoE-UTRAN.h \
NumberofBroadcastRequest.h \
NumberOfBroadcasts.h \
OldBSS-ToNewBSS-Information.h \
OverloadAction.h \
OverloadResponse.h \
PagingDRX.h \
PDCP-SN.h \
PLMNidentity.h \
Pre-emptionCapability.h \
Pre-emptionVulnerability.h \
PriorityLevel.h \
QCI.h \
ReceiveStatusofULPDCPSDUs.h \
RelativeMMECapacity.h \
RAC.h \
RequestType.h \
ResetType.h \
ResetAll.h \
RIMTransfer.h \
RIMInformation.h \
RIMRoutingAddress.h \
ReportArea.h \
RepetitionPeriod.h \
RNC-ID.h \
RRC-Container.h \
RRC-Establishment-Cause.h \
SecurityKey.h \
SecurityContext.h \
SerialNumber.h \
SONInformation.h \
SONInformationRequest.h \
SONInformationReply.h \
SONConfigurationTransfer.h \
Source-ToTarget-TransparentContainer.h \
SourceBSS-ToTargetBSS-TransparentContainer.h \
SourceeNB-ID.h \
SRVCCOperationPossible.h \
SRVCCHOIndication.h \
SourceeNB-ToTargeteNB-TransparentContainer.h \
SourceRNC-ToTargetRNC-TransparentContainer.h \
ServedGUMMEIs.h \
ServedGUMMEIsItem.h \
ServedGroupIDs.h \
ServedMMECs.h \
ServedPLMNs.h \
SubscriberProfileIDforRFP.h \
SupportedTAs.h \
SupportedTAs-Item.h \
S-TMSI.h \
TAC.h \
TAIListforWarning.h \
TAIList.h \
TAIItem.h \
TAI.h \
TAI-Broadcast.h \
TAI-Broadcast-Item.h \
CompletedCellinTAI.h \
CompletedCellinTAI-Item.h \
TBCD-STRING.h \
TargetID.h \
TargeteNB-ID.h \
TargetRNC-ID.h \
TargeteNB-ToSourceeNB-TransparentContainer.h \
Target-ToSource-TransparentContainer.h \
TargetRNC-ToSourceRNC-TransparentContainer.h \
TargetBSS-ToSourceBSS-TransparentContainer.h \
TimeToWait.h \
Time-UE-StayedInCell.h \
TransportLayerAddress.h \
TraceActivation.h \
TraceDepth.h \
E-UTRAN-Trace-ID.h \
TypeOfError.h \
UEAggregateMaximumBitrate.h \
UE-S1AP-IDs.h \
UE-S1AP-ID-pair.h \
UE-associatedLogicalS1-ConnectionListRes.h \
UE-associatedLogicalS1-ConnectionListResAck.h \
UE-associatedLogicalS1-ConnectionItem.h \
UEIdentityIndexValue.h \
UE-HistoryInformation.h \
UEPagingID.h \
UERadioCapability.h \
UESecurityCapabilities.h \
WarningAreaList.h \
WarningType.h \
WarningSecurityInfo.h \
WarningMessageContents.h \
X2TNLConfigurationInfo.h \
S1AP-PDU.h \
InitiatingMessage.h \
SuccessfulOutcome.h \
UnsuccessfulOutcome.h \
HandoverRequired.h \
HandoverCommand.h \
HandoverPreparationFailure.h \
HandoverRequest.h \
HandoverRequestAcknowledge.h \
HandoverFailure.h \
HandoverNotify.h \
PathSwitchRequest.h \
PathSwitchRequestAcknowledge.h \
PathSwitchRequestFailure.h \
E-RABSetupRequest.h \
E-RABSetupResponse.h \
E-RABModifyRequest.h \
E-RABModifyResponse.h \
E-RABReleaseIndication.h \
E-RABReleaseCommand.h \
E-RABReleaseResponse.h \
InitialContextSetupRequest.h \
InitialContextSetupResponse.h \
InitialContextSetupFailure.h \
UEContextReleaseRequest.h \
Paging.h \
DownlinkNASTransport.h \
InitialUEMessage.h \
UplinkNASTransport.h \
NASNonDeliveryIndication.h \
HandoverCancel.h \
HandoverCancelAcknowledge.h \
Reset.h \
ResetAcknowledge.h \
S1SetupResponse.h \
S1SetupRequest.h \
S1SetupFailure.h \
ErrorIndication.h \
ENBConfigurationUpdate.h \
ENBConfigurationUpdateAcknowledge.h \
ENBConfigurationUpdateFailure.h \
MMEConfigurationUpdate.h \
MMEConfigurationUpdateAcknowledge.h \
MMEConfigurationUpdateFailure.h \
DownlinkS1cdma2000tunneling.h \
UplinkS1cdma2000tunneling.h \
UEContextModificationRequest.h \
UEContextModificationResponse.h \
UEContextModificationFailure.h \
UECapabilityInfoIndication.h \
UEContextReleaseCommand.h \
UEContextReleaseComplete.h \
ENBStatusTransfer.h \
MMEStatusTransfer.h \
DeactivateTrace.h \
TraceStart.h \
TraceFailureIndication.h \
CellTrafficTrace.h \
LocationReportingControl.h \
LocationReportingFailureIndication.h \
LocationReport.h \
OverloadStart.h \
OverloadStop.h \
WriteReplaceWarningRequest.h \
WriteReplaceWarningResponse.h \
ENBDirectInformationTransfer.h \
MMEDirectInformationTransfer.h \
ENBConfigurationTransfer.h \
MMEConfigurationTransfer.h \
PrivateMessage.h \
IE.h
ifdef UPDATE_RELEASE_9
S1AP_ASN_MODULE_SOURCES += \
KillResponse.o \
KillRequest.o \
Data-Forwarding-Not-Possible.o \
DownlinkUEAssociatedLPPaTransport.o \
UplinkUEAssociatedLPPaTransport.o \
DownlinkNonUEAssociatedLPPaTransport.o \
UplinkNonUEAssociatedLPPaTransport.o \
TAI-Cancelled.o \
TAI-Cancelled-Item.o \
StratumLevel.o \
SynchronizationStatus.o \
TimeSynchronizationInfo.o \
Routing-ID.o \
PS-ServiceNotAvailable.o \
LPPa-PDU.o \
ExtendedRepetitionPeriod.o \
EUTRANRoundTripDelayEstimationInfo.o \
EmergencyAreaID-Cancelled.o \
EmergencyAreaID-Cancelled-Item.o \
CSGMembershipStatus.o \
ConcurrentWarningMessageIndicator.o \
CellID-Cancelled.o \
CellID-Cancelled-Item.o \
CellAccessMode.o \
CancelledCellinEAI.o \
CancelledCellinEAI-Item.o \
CancelledCellinTAI.o \
CancelledCellinTAI-Item.o \
BroadcastCancelledAreaList.o
S1AP_ASN_MODULE_HEADERS += \
BroadcastCancelledAreaList.h \
CancelledCellinEAI.h \
CancelledCellinEAI-Item.h \
CancelledCellinTAI.h \
CancelledCellinTAI-Item.h \
CellAccessMode.h \
CellID-Cancelled.h \
CellID-Cancelled-Item.h \
ConcurrentWarningMessageIndicator.h \
CSGMembershipStatus.h \
Data-Forwarding-Not-Possible.h \
EmergencyAreaID-Cancelled.h \
EmergencyAreaID-Cancelled-Item.h \
E-RABList.h \
EUTRANRoundTripDelayEstimationInfo.h \
ExtendedRepetitionPeriod.h \
LPPa-PDU.h \
PS-ServiceNotAvailable.h \
Routing-ID.h \
StratumLevel.h \
SynchronizationStatus.h \
TimeSynchronizationInfo.h \
TAI-Cancelled.h \
TAI-Cancelled-Item.h \
KillResponse.h \
KillRequest.h \
DownlinkUEAssociatedLPPaTransport.h \
UplinkUEAssociatedLPPaTransport.h \
DownlinkNonUEAssociatedLPPaTransport.h \
UplinkNonUEAssociatedLPPaTransport.h
endif
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
-31
View File
@@ -1,31 +0,0 @@
SUBDIRS = ./MESSAGES/ .
AM_CFLAGS = \
@ADD_CFLAGS@ \
-I$(top_builddir)/S1AP \
-I$(top_builddir)/S1AP/MESSAGES \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_srcdir)/SCTP \
-I$(top_srcdir)/UTILS
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_eNB_decoder.h s1ap_eNB_decoder.c \
s1ap_eNB_encoder.h s1ap_eNB_encoder.c \
s1ap_eNB_handlers.h s1ap_eNB_handlers.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.h s1ap_mme.c \
$(top_builddir)/S1AP/s1ap_decoder.c \
$(top_builddir)/S1AP/s1ap_encoder.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
-758
View File
@@ -1,758 +0,0 @@
# Makefile.in generated by automake 1.12 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = S1AP
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libs1ap_la_DEPENDENCIES = ./MESSAGES/libs1apmessages.la
am_libs1ap_la_OBJECTS = s1ap_common.lo s1ap_eNB_decoder.lo \
s1ap_eNB_encoder.lo s1ap_eNB_handlers.lo s1ap_mme_encoder.lo \
s1ap_mme_decoder.lo s1ap_mme_handlers.lo s1ap_mme.lo \
s1ap_decoder.lo s1ap_encoder.lo
libs1ap_la_OBJECTS = $(am_libs1ap_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
libs1ap_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libs1ap_la_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libs1ap_la_SOURCES)
DIST_SOURCES = $(libs1ap_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ADD_CFLAGS = @ADD_CFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = \
@ADD_CFLAGS@ \
-I$(top_builddir)/S1AP \
-I$(top_builddir)/S1AP/MESSAGES \
-I$(top_srcdir)/INTERTASK_INTERFACE \
-I$(top_srcdir)/SCTP \
-I$(top_srcdir)/UTILS
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ASN1C_CHECK = @ASN1C_CHECK@
ASN1DIR = @ASN1DIR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN = @DOXYGEN@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
POW_LIB = @POW_LIB@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = ./MESSAGES/ .
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_eNB_decoder.h s1ap_eNB_decoder.c \
s1ap_eNB_encoder.h s1ap_eNB_encoder.c \
s1ap_eNB_handlers.h s1ap_eNB_handlers.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.h s1ap_mme.c \
$(top_builddir)/S1AP/s1ap_decoder.c \
$(top_builddir)/S1AP/s1ap_encoder.c \
$(top_builddir)/S1AP/s1ap_ies_defs.h
all: all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu S1AP/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu S1AP/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libs1ap.la: $(libs1ap_la_OBJECTS) $(libs1ap_la_DEPENDENCIES) $(EXTRA_libs1ap_la_DEPENDENCIES)
$(AM_V_CCLD)$(libs1ap_la_LINK) $(libs1ap_la_OBJECTS) $(libs1ap_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_decoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_eNB_decoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_eNB_encoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_eNB_handlers.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_encoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_mme.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_mme_decoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_mme_encoder.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s1ap_mme_handlers.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
s1ap_decoder.lo: $(top_builddir)/S1AP/s1ap_decoder.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT s1ap_decoder.lo -MD -MP -MF $(DEPDIR)/s1ap_decoder.Tpo -c -o s1ap_decoder.lo `test -f '$(top_builddir)/S1AP/s1ap_decoder.c' || echo '$(srcdir)/'`$(top_builddir)/S1AP/s1ap_decoder.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/s1ap_decoder.Tpo $(DEPDIR)/s1ap_decoder.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/S1AP/s1ap_decoder.c' object='s1ap_decoder.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o s1ap_decoder.lo `test -f '$(top_builddir)/S1AP/s1ap_decoder.c' || echo '$(srcdir)/'`$(top_builddir)/S1AP/s1ap_decoder.c
s1ap_encoder.lo: $(top_builddir)/S1AP/s1ap_encoder.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT s1ap_encoder.lo -MD -MP -MF $(DEPDIR)/s1ap_encoder.Tpo -c -o s1ap_encoder.lo `test -f '$(top_builddir)/S1AP/s1ap_encoder.c' || echo '$(srcdir)/'`$(top_builddir)/S1AP/s1ap_encoder.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/s1ap_encoder.Tpo $(DEPDIR)/s1ap_encoder.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/S1AP/s1ap_encoder.c' object='s1ap_encoder.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o s1ap_encoder.lo `test -f '$(top_builddir)/S1AP/s1ap_encoder.c' || echo '$(srcdir)/'`$(top_builddir)/S1AP/s1ap_encoder.c
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
cscopelist-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile $(LTLIBRARIES)
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool clean-local \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
cscopelist-recursive ctags-recursive install-am install-strip \
tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
clean-local clean-noinstLTLIBRARIES cscopelist \
cscopelist-recursive ctags ctags-recursive distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am
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
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
-9
View File
@@ -1,9 +0,0 @@
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
-163
View File
@@ -1,163 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
/*! \file s1ap_common.c
* \brief s1ap procedures for both eNB and MME
* \author Sebastien ROUX <sebastien.roux@eurecom.fr>
* \date 2012
* \version 0.1
*/
#include <stdint.h>
#include "S1AP-PDU.h"
#include "S1SetupRequest.h"
#include "UplinkNASTransport.h"
#include "s1ap_common.h"
int asn_debug = 0;
int asn1_xer_print = 0;
ssize_t s1ap_generate_initiating_message(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr) {
S1AP_PDU_t pdu;
ssize_t encoded;
memset(&pdu, 0, sizeof(S1AP_PDU_t));
pdu.present = S1AP_PDU_PR_initiatingMessage;
pdu.choice.initiatingMessage.procedureCode = procedureCode;
pdu.choice.initiatingMessage.criticality = criticality;
ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
if (asn1_xer_print)
xer_fprint(stdout,&asn_DEF_S1AP_PDU,(void*)&pdu);
if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
return -1;
}
*length = encoded;
return encoded;
}
ssize_t s1ap_generate_successfull_outcome(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr) {
S1AP_PDU_t pdu;
ssize_t encoded;
memset(&pdu, 0, sizeof(S1AP_PDU_t));
pdu.present = S1AP_PDU_PR_successfulOutcome;
pdu.choice.successfulOutcome.procedureCode = procedureCode;
pdu.choice.successfulOutcome.criticality = criticality;
ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
return -1;
}
*length = encoded;
return encoded;
}
ssize_t s1ap_generate_unsuccessfull_outcome(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr) {
S1AP_PDU_t pdu;
ssize_t encoded;
memset(&pdu, 0, sizeof(S1AP_PDU_t));
pdu.present = S1AP_PDU_PR_unsuccessfulOutcome;
pdu.choice.successfulOutcome.procedureCode = procedureCode;
pdu.choice.successfulOutcome.criticality = criticality;
ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
if ((encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
return -1;
}
*length = encoded;
return encoded;
}
IE_t *s1ap_new_ie(
ProtocolIE_ID_t id,
Criticality_t criticality,
asn_TYPE_descriptor_t *type,
void *sptr) {
IE_t *buff;
if ((buff = malloc(sizeof(IE_t))) == NULL) {
// Possible error on malloc
return NULL;
}
memset((void*)buff, 0, sizeof(IE_t));
buff->id = id;
buff->criticality = criticality;
ANY_fromType_aper(&buff->value, type, sptr);
if (asn1_xer_print)
if (xer_fprint(stdout, &asn_DEF_IE, buff) < 0) {
free(buff);
return NULL;
}
return buff;
}
void s1ap_handle_criticality(e_Criticality criticality) {
}
-473
View File
@@ -1,473 +0,0 @@
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2012 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#if HAVE_CONFIG_H_
# include "config.h"
#endif
#include "Criticality.h"
#include "Presence.h"
#include "PrivateIE-ID.h"
#include "ProcedureCode.h"
#include "ProtocolExtensionID.h"
#include "ProtocolIE-ID.h"
#include "TriggeringMessage.h"
#include "AllocationAndRetentionPriority.h"
#include "Bearers-SubjectToStatusTransfer-List.h"
#include "Bearers-SubjectToStatusTransfer-Item.h"
#include "BitRate.h"
#include "BPLMNs.h"
#include "BroadcastCompletedAreaList.h"
#include "Cause.h"
#include "CauseMisc.h"
#include "CauseProtocol.h"
#include "CauseRadioNetwork.h"
#include "CauseTransport.h"
#include "CauseNas.h"
#include "CellIdentity.h"
#include "CellID-Broadcast.h"
#include "CellID-Broadcast-Item.h"
#include "Cdma2000PDU.h"
#include "Cdma2000RATType.h"
#include "Cdma2000SectorID.h"
#include "Cdma2000HOStatus.h"
#include "Cdma2000HORequiredIndication.h"
#include "Cdma2000OneXSRVCCInfo.h"
#include "Cdma2000OneXMEID.h"
#include "Cdma2000OneXMSI.h"
#include "Cdma2000OneXPilot.h"
#include "Cdma2000OneXRAND.h"
#include "Cell-Size.h"
#include "CellType.h"
#include "CGI.h"
#include "CI.h"
#include "CNDomain.h"
#include "CSFallbackIndicator.h"
#include "CSG-Id.h"
#include "CSG-IdList.h"
#include "CSG-IdList-Item.h"
#include "COUNTvalue.h"
#include "CriticalityDiagnostics.h"
#include "CriticalityDiagnostics-IE-List.h"
#include "CriticalityDiagnostics-IE-Item.h"
#include "DataCodingScheme.h"
#include "DL-Forwarding.h"
#include "Direct-Forwarding-Path-Availability.h"
#include "ECGIList.h"
#include "EmergencyAreaIDList.h"
#include "EmergencyAreaID.h"
#include "EmergencyAreaID-Broadcast.h"
#include "EmergencyAreaID-Broadcast-Item.h"
#include "CompletedCellinEAI.h"
#include "CompletedCellinEAI-Item.h"
#include "ENB-ID.h"
#include "GERAN-Cell-ID.h"
#include "Global-ENB-ID.h"
#include "ENB-StatusTransfer-TransparentContainer.h"
#include "ENB-UE-S1AP-ID.h"
#include "ENBname.h"
#include "ENBX2TLAs.h"
#include "EncryptionAlgorithms.h"
#include "EPLMNs.h"
#include "EventType.h"
#include "E-RAB-ID.h"
#include "E-RABInformationList.h"
#include "E-RABInformationListItem.h"
#include "E-RABList.h"
#include "E-RABItem.h"
#include "E-RABLevelQoSParameters.h"
#include "EUTRAN-CGI.h"
#include "ExtendedRNC-ID.h"
#include "ForbiddenInterRATs.h"
#include "ForbiddenTAs.h"
#include "ForbiddenTAs-Item.h"
#include "ForbiddenTACs.h"
#include "ForbiddenLAs.h"
#include "ForbiddenLAs-Item.h"
#include "ForbiddenLACs.h"
#include "GBR-QosInformation.h"
#include "GTP-TEID.h"
#include "GUMMEI.h"
#include "HandoverRestrictionList.h"
#include "HandoverType.h"
#include "HFN.h"
#include "IMSI.h"
#include "IntegrityProtectionAlgorithms.h"
#include "InterfacesToTrace.h"
#include "LAC.h"
#include "LAI.h"
#include "LastVisitedCell-Item.h"
#include "LastVisitedEUTRANCellInformation.h"
#include "LastVisitedUTRANCellInformation.h"
#include "LastVisitedGERANCellInformation.h"
#include "L3-Information.h"
#include "MessageIdentifier.h"
#include "MMEname.h"
#include "MME-Group-ID.h"
#include "MME-Code.h"
#include "MME-UE-S1AP-ID.h"
#include "M-TMSI.h"
#include "MSClassmark2.h"
#include "MSClassmark3.h"
#include "NAS-PDU.h"
#include "NASSecurityParametersfromE-UTRAN.h"
#include "NASSecurityParameterstoE-UTRAN.h"
#include "NumberofBroadcastRequest.h"
#include "NumberOfBroadcasts.h"
#include "OldBSS-ToNewBSS-Information.h"
#include "OverloadAction.h"
#include "OverloadResponse.h"
#include "PagingDRX.h"
#include "PDCP-SN.h"
#include "PLMNidentity.h"
#include "Pre-emptionCapability.h"
#include "Pre-emptionVulnerability.h"
#include "PriorityLevel.h"
#include "QCI.h"
#include "ReceiveStatusofULPDCPSDUs.h"
#include "RelativeMMECapacity.h"
#include "RAC.h"
#include "RequestType.h"
#include "RIMTransfer.h"
#include "RIMInformation.h"
#include "RIMRoutingAddress.h"
#include "ReportArea.h"
#include "RepetitionPeriod.h"
#include "RNC-ID.h"
#include "RRC-Container.h"
#include "RRC-Establishment-Cause.h"
#include "SecurityKey.h"
#include "SecurityContext.h"
#include "SerialNumber.h"
#include "SONInformation.h"
#include "SONInformationRequest.h"
#include "SONInformationReply.h"
#include "SONConfigurationTransfer.h"
#include "Source-ToTarget-TransparentContainer.h"
#include "SourceBSS-ToTargetBSS-TransparentContainer.h"
#include "SourceeNB-ID.h"
#include "SRVCCOperationPossible.h"
#include "SRVCCHOIndication.h"
#include "SourceeNB-ToTargeteNB-TransparentContainer.h"
#include "SourceRNC-ToTargetRNC-TransparentContainer.h"
#include "ServedGUMMEIs.h"
#include "ServedGUMMEIsItem.h"
#include "ServedGroupIDs.h"
#include "ServedMMECs.h"
#include "ServedPLMNs.h"
#include "SubscriberProfileIDforRFP.h"
#include "SupportedTAs.h"
#include "SupportedTAs-Item.h"
#include "S-TMSI.h"
#include "TAC.h"
#include "TAIItem.h"
#include "TAIList.h"
#include "TAIListforWarning.h"
#include "TAI.h"
#include "TAI-Broadcast.h"
#include "TAI-Broadcast-Item.h"
#include "CompletedCellinTAI.h"
#include "CompletedCellinTAI-Item.h"
#include "TBCD-STRING.h"
#include "TargetID.h"
#include "TargeteNB-ID.h"
#include "TargetRNC-ID.h"
#include "TargeteNB-ToSourceeNB-TransparentContainer.h"
#include "Target-ToSource-TransparentContainer.h"
#include "TargetRNC-ToSourceRNC-TransparentContainer.h"
#include "TargetBSS-ToSourceBSS-TransparentContainer.h"
#include "TimeToWait.h"
#include "Time-UE-StayedInCell.h"
#include "TransportLayerAddress.h"
#include "TraceActivation.h"
#include "TraceDepth.h"
#include "E-UTRAN-Trace-ID.h"
#include "TypeOfError.h"
#include "UEAggregateMaximumBitrate.h"
#include "UE-S1AP-IDs.h"
#include "UE-S1AP-ID-pair.h"
#include "UE-associatedLogicalS1-ConnectionItem.h"
#include "UEIdentityIndexValue.h"
#include "UE-HistoryInformation.h"
#include "UEPagingID.h"
#include "UERadioCapability.h"
#include "UESecurityCapabilities.h"
#include "WarningAreaList.h"
#include "WarningType.h"
#include "WarningSecurityInfo.h"
#include "WarningMessageContents.h"
#include "X2TNLConfigurationInfo.h"
#include "S1AP-PDU.h"
#include "InitiatingMessage.h"
#include "SuccessfulOutcome.h"
#include "UnsuccessfulOutcome.h"
#include "HandoverRequired.h"
#include "HandoverCommand.h"
#include "HandoverNotify.h"
#include "HandoverPreparationFailure.h"
#include "HandoverRequest.h"
#include "HandoverRequestAcknowledge.h"
#include "HandoverFailure.h"
#include "PathSwitchRequest.h"
#include "PathSwitchRequestAcknowledge.h"
#include "PathSwitchRequestFailure.h"
#include "E-RABSetupRequest.h"
#include "E-RABSetupResponse.h"
#include "E-RABModifyRequest.h"
#include "E-RABModifyResponse.h"
#include "E-RABReleaseIndication.h"
#include "E-RABReleaseCommand.h"
#include "E-RABReleaseResponse.h"
#include "InitialContextSetupRequest.h"
#include "InitialContextSetupResponse.h"
#include "InitialContextSetupFailure.h"
#include "UEContextReleaseRequest.h"
#include "Paging.h"
#include "DownlinkNASTransport.h"
#include "InitialUEMessage.h"
#include "UplinkNASTransport.h"
#include "NASNonDeliveryIndication.h"
#include "HandoverCancel.h"
#include "HandoverCancelAcknowledge.h"
#include "Reset.h"
#include "ResetType.h"
#include "ResetAcknowledge.h"
#include "S1SetupResponse.h"
#include "S1SetupRequest.h"
#include "S1SetupFailure.h"
#include "ErrorIndication.h"
#include "ENBConfigurationUpdate.h"
#include "ENBConfigurationUpdateAcknowledge.h"
#include "ENBConfigurationUpdateFailure.h"
#include "MMEConfigurationUpdate.h"
#include "MMEConfigurationUpdateAcknowledge.h"
#include "MMEConfigurationUpdateFailure.h"
#include "DownlinkS1cdma2000tunneling.h"
#include "UplinkS1cdma2000tunneling.h"
#include "UEContextModificationRequest.h"
#include "UEContextModificationResponse.h"
#include "UEContextModificationFailure.h"
#include "UECapabilityInfoIndication.h"
#include "UEContextReleaseCommand.h"
#include "UEContextReleaseComplete.h"
#include "ENBStatusTransfer.h"
#include "MMEStatusTransfer.h"
#include "DeactivateTrace.h"
#include "TraceStart.h"
#include "TraceFailureIndication.h"
#include "CellTrafficTrace.h"
#include "LocationReportingControl.h"
#include "LocationReportingFailureIndication.h"
#include "LocationReport.h"
#include "OverloadStart.h"
#include "OverloadStop.h"
#include "WriteReplaceWarningRequest.h"
#include "WriteReplaceWarningResponse.h"
#include "ENBDirectInformationTransfer.h"
#include "MMEDirectInformationTransfer.h"
#include "ENBConfigurationTransfer.h"
#include "MMEConfigurationTransfer.h"
#include "PrivateMessage.h"
#include "Inter-SystemInformationTransferType.h"
#include "E-RABReleaseItemBearerRelComp.h"
#include "E-RABToBeSwitchedDLList.h"
#include "E-RABToBeSwitchedDLItem.h"
#include "E-RABToBeSwitchedULList.h"
#include "E-RABToBeSwitchedULItem.h"
#include "E-RABToBeSetupListBearerSUReq.h"
#include "E-RABToBeSetupItemBearerSUReq.h"
#include "E-RABDataForwardingList.h"
#include "E-RABDataForwardingItem.h"
#include "E-RABToBeSetupListHOReq.h"
#include "E-RABToBeSetupItemHOReq.h"
#include "E-RABAdmittedList.h"
#include "E-RABAdmittedItem.h"
#include "E-RABFailedtoSetupListHOReqAck.h"
#include "E-RABToBeSetupItemCtxtSUReq.h"
#include "E-RABToBeSetupListCtxtSUReq.h"
#include "E-RABSetupItemBearerSURes.h"
#include "E-RABSetupListBearerSURes.h"
#include "E-RABSetupItemCtxtSURes.h"
#include "E-RABSetupListCtxtSURes.h"
#include "E-RABReleaseListBearerRelComp.h"
#include "E-RABModifyItemBearerModRes.h"
#include "E-RABModifyListBearerModRes.h"
#include "E-RABFailedToSetupItemHOReqAck.h"
#include "E-RABFailedtoSetupListHOReqAck.h"
#include "E-RABToBeModifiedItemBearerModReq.h"
#include "E-RABToBeModifiedListBearerModReq.h"
#include "UE-associatedLogicalS1-ConnectionListResAck.h"
#include "IE.h"
#if defined (UPDATE_RELEASE_9)
# include "BroadcastCancelledAreaList.h"
# include "CancelledCellinEAI.h"
# include "CancelledCellinEAI-Item.h"
# include "CancelledCellinTAI.h"
# include "CancelledCellinTAI-Item.h"
# include "CellAccessMode.h"
# include "CellID-Cancelled.h"
# include "CellID-Cancelled-Item.h"
# include "ConcurrentWarningMessageIndicator.h"
# include "CSGMembershipStatus.h"
# include "Data-Forwarding-Not-Possible.h"
# include "EmergencyAreaID-Cancelled.h"
# include "EmergencyAreaID-Cancelled-Item.h"
# include "E-RABList.h"
# include "EUTRANRoundTripDelayEstimationInfo.h"
# include "ExtendedRepetitionPeriod.h"
# include "LPPa-PDU.h"
# include "PS-ServiceNotAvailable.h"
# include "Routing-ID.h"
# include "StratumLevel.h"
# include "SynchronizationStatus.h"
# include "TimeSynchronizationInfo.h"
# include "TAI-Cancelled.h"
# include "TAI-Cancelled-Item.h"
# include "KillRequest.h"
# include "KillResponse.h"
# include "DownlinkUEAssociatedLPPaTransport.h"
# include "UplinkUEAssociatedLPPaTransport.h"
# include "DownlinkNonUEAssociatedLPPaTransport.h"
# include "UplinkNonUEAssociatedLPPaTransport.h"
#endif /* (UPDATE_RELEASE_9) */
#ifndef S1AP_COMMON_H_
#define S1AP_COMMON_H_
/** @defgroup _s1ap_impl_ S1AP Layer Reference Implementation
* @ingroup _ref_implementation_
* @{
*/
/* Checking version of ASN1C compiler */
#if (ASN1C_ENVIRONMENT_VERSION < 923)
# error "You are compiling s1ap with the wrong version of ASN1C"
#endif
#define S1AP_PORT 36412
#define TRUE 1
#define FALSE 0
extern int asn_debug;
extern int asn1_xer_print;
#if defined(ENB_MODE)
# include "log.h"
# define S1AP_ERROR(x, args...) LOG_E(S1AP, x, ##args)
# define S1AP_WARN(x, args...) LOG_W(S1AP, x, ##args)
# define S1AP_DEBUG(x, args...) LOG_D(S1AP, x, ##args)
#else
# define S1AP_ERROR(x, args...) do { fprintf(stdout, "[S1AP][E]"x, ##args); } while(0)
# define S1AP_WARN(x, args...) do { fprintf(stdout, "[S1AP][W]"x, ##args); } while(0)
# define S1AP_DEBUG(x, args...) do { fprintf(stdout, "[S1AP][D]"x, ##args); } while(0)
#endif
//Forward declaration
struct s1ap_message_s;
/** \brief Function callback prototype.
**/
typedef int (*s1ap_message_decoded_callback)(
uint32_t assocId,
uint32_t stream,
struct s1ap_message_s *message);
/** \brief Encode a successfull outcome message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t s1ap_generate_successfull_outcome(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Encode an initiating message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t s1ap_generate_initiating_message(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Encode an unsuccessfull outcome message
\param buffer pointer to buffer in which data will be encoded
\param length pointer to the length of buffer
\param procedureCode Procedure code for the message
\param criticality Criticality of the message
\param td ASN1C type descriptor of the sptr
\param sptr Deferenced pointer to the structure to encode
@returns size in bytes encded on success or 0 on failure
**/
ssize_t s1ap_generate_unsuccessfull_outcome(
uint8_t **buffer,
uint32_t *length,
e_ProcedureCode procedureCode,
Criticality_t criticality,
asn_TYPE_descriptor_t *td,
void *sptr);
/** \brief Generate a new IE
\param id Protocol ie id of the IE
\param criticality Criticality of the IE
\param type ASN1 type descriptor of the IE value
\param sptr Structure to be encoded in the value field
@returns a pointer to the newly created IE structure or NULL in case of failure
**/
IE_t *s1ap_new_ie(ProtocolIE_ID_t id,
Criticality_t criticality,
asn_TYPE_descriptor_t *type,
void *sptr);
/** \brief Handle criticality
\param criticality Criticality of the IE
@returns void
**/
void s1ap_handle_criticality(e_Criticality criticality);
#endif /* S1AP_COMMON_H_ */
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More