moved NEMO_SHO from trunk to extras branch
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7750 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -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>.
|
||||
@@ -1,6 +0,0 @@
|
||||
THE APPLY ORDER MUST BE THE FOLLOWING:
|
||||
mmipv6-daemon-umip-0.4-nepl-20080108.patch
|
||||
mmipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch
|
||||
mmipv6-daemon-umip-0.4-sho-20080331.patch
|
||||
mmipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch
|
||||
|
||||
@@ -1,301 +0,0 @@
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.h
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.log
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.status
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libmissing: .deps
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libmissing: Makefile
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libnetlink: .deps
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libnetlink: Makefile
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: Makefile
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/man: Makefile
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: .deps
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: gram.c
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: gram.h
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: Makefile
|
||||
diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/mh.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mh.c
|
||||
--- mipv6-daemon-umip-0.4.all.paches.original/src/mh.c 2009-05-12 14:38:53.000000000 +0200
|
||||
+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mh.c 2009-05-12 14:33:25.000000000 +0200
|
||||
@@ -816,8 +816,11 @@
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&mh_sock.send_mutex);
|
||||
- setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO,
|
||||
+ ret = setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO,
|
||||
&on, sizeof(int));
|
||||
+ if (ret < 0)
|
||||
+ dbg("setsockopt: %s\n", strerror(errno));
|
||||
+
|
||||
ret = sendmsg(mh_sock.fd, &msg, 0);
|
||||
if (ret < 0)
|
||||
dbg("sendmsg: %s\n", strerror(errno));
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: mh.c~
|
||||
diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/mn.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mn.c
|
||||
--- mipv6-daemon-umip-0.4.all.paches.original/src/mn.c 2009-05-12 14:38:53.000000000 +0200
|
||||
+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mn.c 2009-05-12 14:33:25.000000000 +0200
|
||||
@@ -130,6 +130,8 @@
|
||||
* is the BID number. BID must be between
|
||||
* BCE_TABLE_MIN and BCE_TABLE_MAX
|
||||
*/
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_mn_init_rt_table()\n");
|
||||
assert(bule);
|
||||
|
||||
/* If BID is not assigned, default table is taken */
|
||||
@@ -147,6 +149,8 @@
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_block_rule_del()\n");
|
||||
if (!(hai->home_block & HOME_ADDR_RULE_BLOCK)) {
|
||||
MDBG("blackhole is not set.\n");
|
||||
return ret;
|
||||
@@ -166,6 +170,8 @@
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_block_rule_add()\n");
|
||||
if (hai->home_block & HOME_ADDR_RULE_BLOCK) {
|
||||
MDBG("blackhole is already set.\n");
|
||||
return ret;
|
||||
@@ -182,6 +188,8 @@
|
||||
|
||||
static void bul_expire(struct tq_elem *tqe)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("bul_expire()\n");
|
||||
pthread_rwlock_wrlock(&mn_lock);
|
||||
if (!task_interrupted()) {
|
||||
struct bulentry *bule = tq_data(tqe, struct bulentry, tqe);
|
||||
@@ -205,6 +213,8 @@
|
||||
uint16_t flags = e->flags;
|
||||
uint16_t bid = e->bid;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("bule_invalidate()\n");
|
||||
if (type != BUL_ENTRY)
|
||||
return;
|
||||
|
||||
@@ -307,6 +317,8 @@
|
||||
struct in6_addr *raddr = &ip6h->ip6_dst;
|
||||
struct in6_addr addr;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_recv_param_prob()\n");
|
||||
/* We only handle code 1 & 2 messages. */
|
||||
if (ih->icmp6_code != ICMP6_PARAMPROB_NEXTHEADER &&
|
||||
ih->icmp6_code != ICMP6_PARAMPROB_OPTION)
|
||||
@@ -623,6 +635,8 @@
|
||||
*/
|
||||
static int mn_dereg_bule(struct bulentry *bule)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_dereg_bule()\n");
|
||||
if (bule->type != NON_MIP_CN_ENTRY) {
|
||||
bule->seq++;
|
||||
bule->mcoa_dereg = 0;
|
||||
@@ -637,6 +651,8 @@
|
||||
{
|
||||
struct bulentry *bule = vbule;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_dereg()\n");
|
||||
if (bule->type == BUL_ENTRY) {
|
||||
if (!(bule->flags & IP6_MH_BU_HOME)) {
|
||||
bule->dereg = 1;
|
||||
@@ -684,6 +700,8 @@
|
||||
{
|
||||
int dhaad = dhaad_home_reg_failed(hai);
|
||||
int type = FLUSH_VALID;
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_change_ha()\n");
|
||||
if (hai->home_reg_status != HOME_REG_NONE)
|
||||
bul_iterate(&hai->bul, _bul_flush, &type);
|
||||
syslog(LOG_ERR,
|
||||
@@ -820,6 +838,8 @@
|
||||
uint32_t valid = PREFIX_LIFETIME_INFINITE;
|
||||
int plen = (mha->if_next == hai->if_tunnel ? 128 : hai->plen);
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mv_hoa\n");
|
||||
clock_gettime(CLOCK_REALTIME, &now);
|
||||
|
||||
if (hai->lladdr_comp && rta_tb[IFA_CACHEINFO] != NULL) {
|
||||
@@ -889,6 +909,8 @@
|
||||
{
|
||||
struct list_head *l;
|
||||
struct prefix_list_entry *pe;
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("nemo_mr_tnl_routes_add\n");
|
||||
list_for_each(l, &hai->mob_net_prefixes) {
|
||||
struct prefix_list_entry *p;
|
||||
p = list_entry(l, struct prefix_list_entry, list);
|
||||
@@ -917,6 +939,8 @@
|
||||
int ifindex, int all, int rtable)
|
||||
{
|
||||
int err = 0;
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_tnl_state_add\n");
|
||||
if (hai->home_reg_status != HOME_REG_NONE) {
|
||||
if ((err = mn_ro_pol_add(hai, ifindex, all)) < 0)
|
||||
return err;
|
||||
@@ -939,6 +963,8 @@
|
||||
int ifindex, int rtable)
|
||||
{
|
||||
struct list_head *l;
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("nemo_mr_tnl_routes_del\n");
|
||||
list_for_each(l, &hai->mob_net_prefixes) {
|
||||
struct prefix_list_entry *p;
|
||||
p = list_entry(l, struct prefix_list_entry, list);
|
||||
@@ -1001,6 +1027,8 @@
|
||||
struct home_addr_info *hai,
|
||||
struct timespec *lifetime)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("process_first_home_bu\n");
|
||||
int err = 0;
|
||||
assert(hai->current_coa);
|
||||
bule->type = BUL_ENTRY;
|
||||
@@ -1090,6 +1118,8 @@
|
||||
int homereg_expired = 0;
|
||||
movement_t type_movement = MIP6_TYPE_MOVEMENT_UNKNOWN;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_send_home_bu\n");
|
||||
TRACE;
|
||||
assert(hai->current_coa);
|
||||
|
||||
@@ -1285,6 +1315,8 @@
|
||||
|
||||
void mn_send_cn_bu(struct bulentry *bule)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_send_cn_bu\n");
|
||||
/* Rate limiting CN registration binding updates
|
||||
is necessary for multihomed MNs */
|
||||
if (mn_bu_ratelimit(bule))
|
||||
@@ -1487,6 +1519,8 @@
|
||||
struct timespec now, ba_lifetime, br_adv;
|
||||
uint16_t seqno, bid;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_recv_ba\n");
|
||||
TRACE;
|
||||
|
||||
if (len < sizeof(struct ip6_mh_binding_ack) ||
|
||||
@@ -1875,6 +1909,8 @@
|
||||
struct home_addr_info *hai,
|
||||
int replace)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_iface_dflt_hoa_rule_del\n");
|
||||
/* MCoA: Delete the default HoA rule */
|
||||
rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_HOA_OUT,
|
||||
0, RTN_UNICAST, &hai->hoa.addr, 128,
|
||||
@@ -1900,6 +1936,8 @@
|
||||
struct prefix_list_entry *p,
|
||||
int replace)
|
||||
{
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_iface_dflt_mnp_rules_del\n");
|
||||
/* MCoA: Delete the default MNP rule */
|
||||
rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_FWD_MCOA,
|
||||
0, RTN_UNICAST, &p->ple_prefix, p->ple_plen,
|
||||
@@ -1926,6 +1964,8 @@
|
||||
struct list_head *l;
|
||||
int delete_dflt_mnp = 0;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_iface_rules_del\n");
|
||||
bule = bul_get(hai, NULL, &hai->ha_addr, bid);
|
||||
if (!hai->reg_mcoa || (bule && !bule->rules))
|
||||
return NULL;
|
||||
@@ -1977,6 +2017,8 @@
|
||||
{
|
||||
struct list_head *l;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_mn_rules_del\n");
|
||||
list_for_each(l, &hinfo->mcoa) {
|
||||
struct mn_addr *iface = NULL;
|
||||
iface = list_entry(l, struct mn_addr, list);
|
||||
@@ -2006,6 +2048,8 @@
|
||||
struct list_head *l;
|
||||
uint8_t prio;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mcoa_iface_rules_add\n");
|
||||
bule = bul_get(hai, NULL, &hai->ha_addr, bid);
|
||||
if (!bid || !hai->reg_mcoa || !bule || (bule && bule->rules))
|
||||
return 0;
|
||||
@@ -2088,6 +2132,8 @@
|
||||
{
|
||||
struct list_head *l;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("nemo_mr_rules_del\n");
|
||||
list_for_each(l, &hinfo->mob_net_prefixes) {
|
||||
struct prefix_list_entry *p = NULL;
|
||||
p = list_entry(l, struct prefix_list_entry, list);
|
||||
@@ -2111,6 +2157,8 @@
|
||||
struct prefix_list_entry *pe = NULL;
|
||||
struct list_head *l;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("nemo_mr_rules_add\n");
|
||||
list_for_each(l, &hinfo->mob_net_prefixes) {
|
||||
struct prefix_list_entry *p = NULL;
|
||||
p = list_entry(l, struct prefix_list_entry, list);
|
||||
@@ -2164,6 +2212,8 @@
|
||||
struct flag_hoa_args arg;
|
||||
int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen);
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("clean_home_addr_info\n");
|
||||
list_del(&hai->list);
|
||||
if (hai->mob_rtr)
|
||||
nemo_mr_rules_del(hai);
|
||||
@@ -2538,6 +2588,8 @@
|
||||
struct mv_hoa_args mha;
|
||||
struct list_head *l;
|
||||
|
||||
+ MDBG("--------------------------------------\n");
|
||||
+ MDBG("mn_move\n");
|
||||
mha.target = hai;
|
||||
|
||||
TRACE;
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: mn.c~
|
||||
diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/movement.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/movement.c
|
||||
--- mipv6-daemon-umip-0.4.all.paches.original/src/movement.c 2009-05-12 14:38:53.000000000 +0200
|
||||
+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/movement.c 2009-05-12 14:33:25.000000000 +0200
|
||||
@@ -611,7 +611,9 @@
|
||||
memset(lladdr, 0, sizeof(struct in6_addr));
|
||||
uint8_t *eui = lladdr->s6_addr + 8;
|
||||
switch (iface_type) {
|
||||
- case ARPHRD_ETHER:
|
||||
+ case ARPHRD_EUROPENAIRMESH:
|
||||
+ memcpy(eui, hwa, 8);
|
||||
+ break;
|
||||
case ARPHRD_IEEE802:
|
||||
case ARPHRD_IEEE802_TR:
|
||||
case ARPHRD_IEEE80211:
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: movement.c~
|
||||
diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/ndisc.h mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/ndisc.h
|
||||
--- mipv6-daemon-umip-0.4.all.paches.original/src/ndisc.h 2009-05-12 14:38:38.000000000 +0200
|
||||
+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/ndisc.h 2009-05-12 14:33:25.000000000 +0200
|
||||
@@ -11,6 +11,8 @@
|
||||
{
|
||||
switch (iface_type) {
|
||||
/* supported physical devices */
|
||||
+ case ARPHRD_EUROPENAIRMESH:
|
||||
+ return 8;
|
||||
case ARPHRD_ETHER:
|
||||
case ARPHRD_IEEE802:
|
||||
case ARPHRD_IEEE802_TR:
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: ndisc.h~
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: pmgr.c
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: pmgr.h
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: scan.c
|
||||
Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: stamp-h1
|
||||
Only in mipv6-daemon-umip-0.4.all.paches.original: ZE_PATCH.patch
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,978 +0,0 @@
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/extras/mr_mcoa_sho_UMIP.conf mipv6-daemon-umip-0.4-nepl-mcoa-sho/extras/mr_mcoa_sho_UMIP.conf
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/extras/mr_mcoa_sho_UMIP.conf 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/extras/mr_mcoa_sho_UMIP.conf 2008-03-31 17:06:27.000000000 +0200
|
||||
@@ -0,0 +1,67 @@
|
||||
+# This is an example of mip6d Mobile Node configuration file
|
||||
+
|
||||
+NodeConfig MN;
|
||||
+
|
||||
+## If set to > 0, will not detach from tty
|
||||
+DebugLevel 10;
|
||||
+
|
||||
+## Support route optimization with other MNs
|
||||
+DoRouteOptimizationCN disabled;
|
||||
+
|
||||
+## Use route optimization with CNs
|
||||
+DoRouteOptimizationMN disabled;
|
||||
+
|
||||
+UseCnBuAck disabled;
|
||||
+
|
||||
+Interface "eth0" {
|
||||
+ Bid 100;
|
||||
+ BidPriority 1;
|
||||
+ Reliable false;
|
||||
+ DefaultDelay 5000;
|
||||
+}
|
||||
+
|
||||
+Interface "eth1" {
|
||||
+ Bid 200;
|
||||
+ BidPriority 1;
|
||||
+ Reliable true;
|
||||
+ DefaultDelay 0;
|
||||
+}
|
||||
+
|
||||
+MnRouterProbes 1;
|
||||
+
|
||||
+MnHomeLink "eth0" {
|
||||
+ IsMobRtr enabled;
|
||||
+ MnUseSHO enabled;
|
||||
+# MnUseSHO disabled;
|
||||
+ MnUseAdaptiveCombining enabled;
|
||||
+# MnUseAdaptiveCombining disabled;
|
||||
+ HomeAgentAddress 2001:4::1;
|
||||
+ HomeAddress 2001:4::4/64 (2001:4:0:2::/64);
|
||||
+ RegMultipleCoA enabled;
|
||||
+ IfMultipleCoA "eth0", "eth1";
|
||||
+
|
||||
+ # proto type code route opt.
|
||||
+# MnRoPolicy ICMP 129 0 enabled;
|
||||
+# MnRoPolicy ICMP any any disabled;
|
||||
+ # proto dst src route opt.
|
||||
+# MnRoPolicy TCP 80 any enabled;
|
||||
+# MnRoPolicy TCP any any disabled;
|
||||
+}
|
||||
+
|
||||
+##
|
||||
+## IPsec configuration
|
||||
+##
|
||||
+
|
||||
+UseMnHaIPsec disabled;
|
||||
+
|
||||
+## Key Management Mobility Capability
|
||||
+KeyMngMobCapability disabled;
|
||||
+
|
||||
+IPsecPolicySet {
|
||||
+ HomeAgentAddress 3ffe:2620:6:1::1;
|
||||
+ HomeAddress 3ffe:2620:6:1::1234/64;
|
||||
+
|
||||
+ IPsecPolicy HomeRegBinding UseESP;
|
||||
+ IPsecPolicy MobPfxDisc UseESP;
|
||||
+ IPsecPolicy TunnelMh UseESP;
|
||||
+}
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/include/netinet/ip6mh.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/include/netinet/ip6mh.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/include/netinet/ip6mh.h 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/include/netinet/ip6mh.h 2008-03-20 17:02:41.000000000 +0100
|
||||
@@ -157,6 +157,25 @@
|
||||
uint8_t ip6mobid_reserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
+/* NEMO-SHO */
|
||||
+struct ip6_mh_opt_fid {
|
||||
+ uint8_t ip6fid_type;
|
||||
+ uint8_t ip6fid_len;
|
||||
+ uint8_t ip6fid_flags_high;
|
||||
+ uint8_t ip6fid_flags_low;
|
||||
+ uint8_t ip6fid_fid;
|
||||
+ uint8_t ip6fid_action;
|
||||
+ uint8_t ip6fid_status;
|
||||
+ uint8_t ip6fid_pro_cls;
|
||||
+} __attribute__((packed));
|
||||
+
|
||||
+struct ip6_mh_opt_fid_subopt{
|
||||
+ uint8_t ip6fid_subopt_type;
|
||||
+ uint8_t ip6fid_subopt_len;
|
||||
+ uint8_t ip6fid_subopt_bid;
|
||||
+} __attribute__((packed));
|
||||
+/* NEMO-SHO */
|
||||
+
|
||||
/* Binding Unique Identifier sub-option flags */
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */
|
||||
@@ -187,6 +206,7 @@
|
||||
#define IP6_MHOPT_BAUTH 0x05 /* Binding Auth Data */
|
||||
#define IP6_MHOPT_MOB_NET_PRFX 0x06 /* Mobile Network Prefix */
|
||||
#define IP6_MHOPT_BID 0x07 /* Binding Unique Identifier */
|
||||
+#define IP6_MHOPT_FID 0x08 /* Flow Identification */
|
||||
|
||||
/*
|
||||
* Status values accompanied with Mobility Binding Acknowledgement
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.c 2008-03-20 16:55:16.000000000 +0100
|
||||
@@ -71,6 +71,7 @@
|
||||
bule->rules = 0;
|
||||
bule->home_block = 0;
|
||||
bule->mcoa_dereg = 1;
|
||||
+ bule->fid = 0; /* NEMO-SHO */
|
||||
INIT_LIST_HEAD(&bule->tqe.list);
|
||||
bule->seq = random();
|
||||
}
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.h 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.h 2008-03-20 16:54:49.000000000 +0100
|
||||
@@ -43,6 +43,7 @@
|
||||
uint16_t seq; /* sequence number of the latest BU */
|
||||
uint16_t flags; /* BU send flags */
|
||||
uint16_t bid; /* MCoA: Binding Identifier */
|
||||
+ uint8_t fid; /* NEMO-SHO: Associated FID */
|
||||
struct in6_addr last_coa; /* Last good coa */
|
||||
struct timespec lastsent;
|
||||
struct timespec lifetime; /* lifetime sent in this BU */
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/cn.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/cn.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/cn.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/cn.c 2008-03-20 17:12:02.000000000 +0100
|
||||
@@ -301,7 +301,7 @@
|
||||
status = IP6_MH_BAS_ACCEPTED;
|
||||
}
|
||||
if (bu_flags & IP6_MH_BU_ACK)
|
||||
- mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, key, iif);
|
||||
+ mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, NULL, key, iif); /* NEMO-SHO */
|
||||
return;
|
||||
send_nack:
|
||||
if (bce) {
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.c 2008-03-21 15:29:32.000000000 +0100
|
||||
@@ -404,4 +404,27 @@
|
||||
}
|
||||
return priority;
|
||||
}
|
||||
+#if 1
|
||||
+// NEMO-SHO
|
||||
+/*
|
||||
+ * get_bid_from_ifindex - return the bid from the interface index
|
||||
+ * @iif: the interface index
|
||||
+ */
|
||||
+uint16_t get_delay_from_bid(uint16_t bid)
|
||||
+{
|
||||
+ struct list_head *list;
|
||||
+
|
||||
+ list_for_each(list, &conf.net_ifaces) {
|
||||
+ struct net_iface *nif;
|
||||
+ nif = list_entry(list, struct net_iface, list);
|
||||
+ if (nif->mn_if_bid == bid) {
|
||||
+ if (is_if_mn(nif))
|
||||
+ return nif->mn_if_delay;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.h 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.h 2008-03-21 15:27:52.000000000 +0100
|
||||
@@ -45,6 +45,8 @@
|
||||
char MnDiscardHaParamProb;
|
||||
char SendMobPfxSols;
|
||||
char OptimisticHandoff;
|
||||
+ char MnUseSHO;
|
||||
+ char UseAdaptiveCombining;
|
||||
|
||||
/* HA options */
|
||||
char HaAcceptMobRtr;
|
||||
@@ -70,6 +72,7 @@
|
||||
uint16_t mn_if_bid;
|
||||
uint8_t mn_if_bidprio;
|
||||
int mn_if_reliable;
|
||||
+ uint16_t mn_if_delay; /* NEMO-SHO option */
|
||||
};
|
||||
|
||||
extern struct mip6_config conf;
|
||||
@@ -127,6 +130,7 @@
|
||||
uint16_t get_bid_from_ifindex(int iif);
|
||||
uint8_t get_prio_from_bid(uint16_t bid);
|
||||
uint8_t get_highest_prio();
|
||||
+uint16_t get_delay_from_bid(uint16_t bid);
|
||||
|
||||
int yyparse(void);
|
||||
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/gram.y mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/gram.y
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/gram.y 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/gram.y 2008-03-21 15:49:44.000000000 +0100
|
||||
@@ -54,7 +54,8 @@
|
||||
.mn_if_preference = POL_MN_IF_DEF_PREFERENCE,
|
||||
.mn_if_bid = POL_MN_IF_DEF_BID,
|
||||
.mn_if_bidprio = POL_MN_IF_DEF_BID_PRIORITY,
|
||||
- .mn_if_reliable = POL_MN_IF_DEF_RELIABLE
|
||||
+ .mn_if_reliable = POL_MN_IF_DEF_RELIABLE,
|
||||
+ .mn_if_delay = POL_MN_IF_DEF_DELAY
|
||||
};
|
||||
|
||||
struct home_addr_info hai = {
|
||||
@@ -196,8 +197,11 @@
|
||||
%token BID
|
||||
%token BIDPRIORITY
|
||||
%token RELIABLE
|
||||
+%token DEFAULTDELAY
|
||||
%token REGMULTIPLECOA
|
||||
%token IFMULTIPLECOA
|
||||
+%token MNUSESHO
|
||||
+%token MNUSEAPC
|
||||
|
||||
%token INV_TOKEN
|
||||
|
||||
@@ -448,6 +452,20 @@
|
||||
}
|
||||
ni.mn_if_bidprio = $2;
|
||||
}
|
||||
+ | DEFAULTDELAY NUMBER ';'
|
||||
+ {
|
||||
+ if (ni.mn_if_preference) {
|
||||
+ uerror("You cannot set Default Delay if "
|
||||
+ "MnIfPreference is set.");
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if ($2 < 0 || $2 > 65535) {
|
||||
+ uerror("DefDelay error "
|
||||
+ "(%d <= BidPriority <= %d)",0, 65535);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ ni.mn_if_delay = $2;
|
||||
+ }
|
||||
| RELIABLE BOOL ';'
|
||||
{
|
||||
ni.mn_if_reliable = $2;
|
||||
@@ -543,6 +561,14 @@
|
||||
{
|
||||
hai.reg_mcoa = $2;
|
||||
}
|
||||
+ | MNUSESHO BOOL ';'
|
||||
+ {
|
||||
+ conf.MnUseSHO = $2;
|
||||
+ }
|
||||
+ | MNUSEAPC BOOL ';'
|
||||
+ {
|
||||
+ conf.UseAdaptiveCombining = $2;
|
||||
+ }
|
||||
| IFMULTIPLECOA iflist ';'
|
||||
;
|
||||
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/ha.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/ha.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/ha.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/ha.c 2008-03-21 16:27:40.000000000 +0100
|
||||
@@ -60,6 +60,17 @@
|
||||
#include "ndisc.h"
|
||||
#include "prefix.h"
|
||||
|
||||
+/* NEMO-SHO CONFIG */
|
||||
+#define NEMO_SHO_LTOH // Enable in case of low speed to high speed
|
||||
+#ifdef NEMO_SHO_LTOH
|
||||
+const static int NEMO_SHO_DEFAULT_DELAY1 = 0; // msec
|
||||
+const static int NEMO_SHO_DEFAULT_DELAY2 = 1000; // msec
|
||||
+#else
|
||||
+const static int NEMO_SHO_DEFAULT_DELAY1 = 0; // msec
|
||||
+const static int NEMO_SHO_DEFAULT_DELAY2 = 0; // msec
|
||||
+#endif
|
||||
+/* NEMO-SHO CONFIG*/
|
||||
+
|
||||
#define HA_DEBUG_LEVEL 1
|
||||
|
||||
#if HA_DEBUG_LEVEL >= 1
|
||||
@@ -1007,6 +1018,12 @@
|
||||
struct home_tnl_ops_parm p;
|
||||
struct ip6_mh_opt_bid *bid_opt;
|
||||
|
||||
+ /* NEMO-SHO */
|
||||
+ struct ip6_mh_opt_fid *fid_opt;
|
||||
+ struct ip6_mh_opt_fid_subopt *fid_opt_subopt;
|
||||
+ struct bcentry *bce_associated = NULL;
|
||||
+ /* NEMO-SHO */
|
||||
+
|
||||
pthread_dbg("thread started");
|
||||
restart:
|
||||
home_ifindex = 0;
|
||||
@@ -1035,6 +1052,10 @@
|
||||
out.bind_coa = NULL;
|
||||
out.local_coa = NULL;
|
||||
bid_opt = NULL;
|
||||
+ /* NEMO-SHO */
|
||||
+ fid_opt = NULL;
|
||||
+ fid_opt_subopt = NULL;
|
||||
+ /* NEMO-SHO */
|
||||
|
||||
/* MCoA
|
||||
* We check if a BCE already exists for this HoA
|
||||
@@ -1322,6 +1343,85 @@
|
||||
}
|
||||
bcache_update_expire(bce);
|
||||
}
|
||||
+ /* NEMO-SHO */
|
||||
+ /* check if there is FID option */
|
||||
+ fid_opt = mh_opt(&arg->bu->ip6mhbu_hdr,
|
||||
+ &arg->mh_opts,
|
||||
+ IP6_MHOPT_FID);
|
||||
+ /* check if there is BID sub-option */
|
||||
+ if (fid_opt && (fid_opt->ip6fid_len > (sizeof(struct ip6_mh_opt_fid) - 2))){
|
||||
+ fid_opt_subopt = (struct ip6_mh_opt_fid_subopt*)(fid_opt+1);
|
||||
+ if (fid_opt_subopt->ip6fid_subopt_type == 1)
|
||||
+ MDBG("FID: BID Reference sub-option\n");
|
||||
+ else {
|
||||
+ MDBG("FID: Unknown sub-option. FID is not processed\n");
|
||||
+ fid_opt_subopt = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (fid_opt){
|
||||
+ MDBG("FID option (FID=%d) action=%d, status=%d, pro=%d, cls=%d\n",
|
||||
+ fid_opt->ip6fid_fid, fid_opt->ip6fid_action, fid_opt->ip6fid_status,
|
||||
+ (fid_opt->ip6fid_pro_cls & 0xF0) >> 4,
|
||||
+ fid_opt->ip6fid_pro_cls & 0x0F);
|
||||
+ uint8_t action = fid_opt->ip6fid_action;
|
||||
+ switch ( fid_opt->ip6fid_pro_cls & 0xF0){
|
||||
+ case FBIND_ADD_FLOW:
|
||||
+ MDBG("FID: ADD FLOW\n");
|
||||
+ if ( (action == FBIND_ACTION_NCAST) ||
|
||||
+ (action == FBIND_ACTION_NCAST_COMBINE )||
|
||||
+ (action == FBIND_ACTION_NCAST_COMBINE_ADAP) ){
|
||||
+ int nemo_sho_flag = SHO_BICAST;
|
||||
+ if (conf.debug_level > 0)
|
||||
+ nemo_sho_flag |= SHO_DEBUG;
|
||||
+ if (action == FBIND_ACTION_NCAST_COMBINE)
|
||||
+ nemo_sho_flag |= SHO_COMBINING;
|
||||
+ else if (action == FBIND_ACTION_NCAST_COMBINE_ADAP)
|
||||
+ nemo_sho_flag |= (SHO_COMBINING|SHO_ADAPTIVE);
|
||||
+
|
||||
+ assert(fid_opt_subopt);
|
||||
+ MDBG("FID: ACTION NCAST (SHO_FLAG=%x)\n", nemo_sho_flag);
|
||||
+ // look up another bcache assigned to bid
|
||||
+ bce_associated = bcache_get(out.src, out.dst,
|
||||
+ fid_opt_subopt->ip6fid_subopt_bid);
|
||||
+ if (bce_associated){
|
||||
+ if (dtunnel_mod_type(bce->tunnel,
|
||||
+ out.src,
|
||||
+ out.bind_coa,
|
||||
+ &bce_associated->coa,
|
||||
+ 0, // dummy
|
||||
+ nemo_sho_flag,
|
||||
+ 1, /* HA to MN/MR */
|
||||
+ NEMO_SHO_DEFAULT_DELAY1,
|
||||
+ NEMO_SHO_DEFAULT_DELAY2
|
||||
+ )< 0 ){
|
||||
+ }
|
||||
+ bcache_release_entry(bce_associated);
|
||||
+ }
|
||||
+ else
|
||||
+ MDBG("FID: no other binding cache entry\n");
|
||||
+ }
|
||||
+ else
|
||||
+ MDBG("FID: Unsupported Action\n");
|
||||
+ break;
|
||||
+ case FBIND_REMOVE_FLOW:
|
||||
+ MDBG("FID: REMOVE FLOW\n");
|
||||
+ dtunnel_mod_type(bce->tunnel,
|
||||
+ out.src,
|
||||
+ out.bind_coa,
|
||||
+ 0,
|
||||
+ 0, // dummy
|
||||
+ 0, // stop bicasting/combining
|
||||
+ 1 /* HA to MN/MR */,
|
||||
+ 0,
|
||||
+ 0);
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ /* NEMO-SHO */
|
||||
+
|
||||
/* bce is always valid here */
|
||||
bcache_release_entry(bce);
|
||||
if (!tsisset(lft))
|
||||
@@ -1356,7 +1456,7 @@
|
||||
|
||||
if (!(arg->flags & HA_BU_F_SKIP_BA))
|
||||
mh_send_ba(&out, status, ba_flags, seqno, &lft,
|
||||
- bid, bid_priority, NULL, iif);
|
||||
+ bid, bid_priority, fid_opt, NULL, iif); /* NEMO-SHO */
|
||||
/* MCoA: Start MPA only if no entries yet for this HoA */
|
||||
if (!bce_exists && new && tsisset(lft))
|
||||
mpd_start_mpa(&bce->our_addr, &bce->peer_addr);
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.c 2008-03-20 17:11:24.000000000 +0100
|
||||
@@ -479,6 +479,62 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* NEMO-SHO
|
||||
+ * mh_create_opt_fid - Create a Flow Identifier Option
|
||||
+ * TODO1: (TBA)
|
||||
+ */
|
||||
+int mh_create_opt_fid(struct iovec *iov,
|
||||
+ uint8_t fid, uint8_t action, uint8_t status,
|
||||
+ uint8_t priority,
|
||||
+ uint8_t pro,
|
||||
+ int fid_subopt,
|
||||
+ uint8_t bid)
|
||||
+{
|
||||
+ int optlen = sizeof(struct ip6_mh_opt_fid) +
|
||||
+ (fid_subopt?sizeof(struct ip6_mh_opt_fid_subopt):0);
|
||||
+ struct ip6_mh_opt_fid *opt_fid;
|
||||
+ struct ip6_mh_opt_fid_subopt *opt_fid_subopt;
|
||||
+ uint8_t *data;
|
||||
+
|
||||
+ iov->iov_base = malloc(optlen);
|
||||
+ iov->iov_len = optlen;
|
||||
+
|
||||
+ if (iov->iov_base == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ memset(iov->iov_base, 0, iov->iov_len);
|
||||
+ data = (uint8_t *)iov->iov_base;
|
||||
+
|
||||
+ opt_fid = (struct ip6_mh_opt_fid *)data;
|
||||
+
|
||||
+#define IP6_OPT_FID_R 0x80
|
||||
+#define IP6_OPT_FID_H 0x40
|
||||
+
|
||||
+ opt_fid->ip6fid_type = IP6_MHOPT_FID;
|
||||
+ opt_fid->ip6fid_len = fid_subopt?9:6; // NEMO-SHO TODO: hard-coded
|
||||
+ opt_fid->ip6fid_flags_high = 0;
|
||||
+ opt_fid->ip6fid_flags_low = IP6_OPT_FID_H|priority; // TODO: priority should be masked
|
||||
+ opt_fid->ip6fid_fid = fid;
|
||||
+ opt_fid->ip6fid_action = action;
|
||||
+ opt_fid->ip6fid_status = status;
|
||||
+ opt_fid->ip6fid_pro_cls = (pro << 4) | 0x00;
|
||||
+ data += sizeof(struct ip6_mh_opt_fid);
|
||||
+
|
||||
+ if (fid_subopt){
|
||||
+ opt_fid_subopt = (struct ip6_mh_opt_fid_subopt *)data;
|
||||
+ opt_fid_subopt->ip6fid_subopt_type = 1;
|
||||
+ opt_fid_subopt->ip6fid_subopt_len = 3;
|
||||
+ opt_fid_subopt->ip6fid_subopt_bid = bid;
|
||||
+ data += sizeof(struct ip6_mh_opt_fid_subopt);
|
||||
+ }
|
||||
+
|
||||
+ MDBG("FID sub-option created with FID = %d and action %d\n",
|
||||
+ fid, action);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+/* NEMO-SHO */
|
||||
+
|
||||
static size_t mh_length(struct iovec *vec, int count)
|
||||
{
|
||||
size_t len = 0;
|
||||
@@ -526,6 +582,11 @@
|
||||
case IP6_MHOPT_BID:
|
||||
pad = optpad(2, 0, len); /* 2n */
|
||||
break;
|
||||
+ /* NEMO-SHO */
|
||||
+ case IP6_MHOPT_FID:
|
||||
+ pad = optpad(2, 0, len); /* 2n */
|
||||
+ break;
|
||||
+ /* NEMO-SHO */
|
||||
}
|
||||
if (pad > 0) {
|
||||
create_opt_pad(&out[n++], pad);
|
||||
@@ -1027,6 +1088,7 @@
|
||||
const struct timespec *lifetime,
|
||||
const uint16_t bid,
|
||||
const uint8_t priority,
|
||||
+ const struct ip6_mh_opt_fid *opt_fid, /* NEMO-SHO */
|
||||
const uint8_t *key, int iif)
|
||||
{
|
||||
int iovlen = 1;
|
||||
@@ -1058,6 +1120,18 @@
|
||||
/* MCoA: Create Binding Unique Identifier Option if needed */
|
||||
if (bid)
|
||||
mh_create_opt_bid(&mh_vec[iovlen++], bid, priority, 0);
|
||||
+
|
||||
+ /* NEMO-SHO: FID option if needed & BA is accepted */
|
||||
+ if (opt_fid && (status == IP6_MH_BAS_ACCEPTED))
|
||||
+ mh_create_opt_fid(&mh_vec[iovlen++],
|
||||
+ opt_fid->ip6fid_fid, //fid
|
||||
+ opt_fid->ip6fid_action, //action (n-casting)
|
||||
+ 0, //status
|
||||
+ 0, //priority
|
||||
+ opt_fid->ip6fid_pro_cls, //process
|
||||
+ 0,0); //subopt is not present
|
||||
+ /* NEMO-SHO */
|
||||
+
|
||||
mh_send(addrs, mh_vec, iovlen, key, iif);
|
||||
free_iov_data(mh_vec, iovlen);
|
||||
}
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.h 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.h 2008-03-21 16:27:24.000000000 +0100
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/* If new types or options appear, these should be updated. */
|
||||
#define IP6_MH_TYPE_MAX IP6_MH_TYPE_BERROR
|
||||
-#define IP6_MHOPT_MAX IP6_MHOPT_BID
|
||||
+#define IP6_MHOPT_MAX IP6_MHOPT_FID /* NEMO-SHO */
|
||||
|
||||
struct in6_addr_bundle {
|
||||
struct in6_addr *src;
|
||||
@@ -45,6 +45,7 @@
|
||||
const struct timespec *lifetime,
|
||||
const uint16_t bid,
|
||||
const uint8_t priority,
|
||||
+ const struct ip6_mh_opt_fid *opt_fid, /* NEMO-SHO */
|
||||
const uint8_t *key, int iif);
|
||||
|
||||
static inline void mh_send_ba_err(const struct in6_addr_bundle *addrs,
|
||||
@@ -56,7 +57,7 @@
|
||||
{
|
||||
struct timespec zero = { 0, 0 };
|
||||
mh_send_ba(addrs, status, flags, seqno, &zero,
|
||||
- bid, priority, key, iif);
|
||||
+ bid, priority, NULL, key, iif); /* NEMO-SHO */
|
||||
}
|
||||
|
||||
void mh_send_be(struct in6_addr *dst,
|
||||
@@ -87,6 +88,14 @@
|
||||
|
||||
int mh_create_opt_bid(struct iovec *iov, uint16_t bid, uint8_t priority,
|
||||
uint8_t bid_flags);
|
||||
+/* NEMO-SHO */
|
||||
+int mh_create_opt_fid(struct iovec *iov,
|
||||
+ uint8_t fid, uint8_t action, uint8_t status,
|
||||
+ uint8_t priority,
|
||||
+ uint8_t pro,
|
||||
+ int fid_subopt,
|
||||
+ uint8_t bid);
|
||||
+/* NEMO-SHO */
|
||||
|
||||
static inline void *mh_opt(const struct ip6_mh *mh,
|
||||
const struct mh_options *mh_opts, uint8_t type)
|
||||
@@ -138,4 +147,13 @@
|
||||
void mh_handler_reg(uint8_t type, struct mh_handler *handler);
|
||||
void mh_handler_dereg(uint8_t type, struct mh_handler *handler);
|
||||
|
||||
+/* NEMO-SHO FlowBinding */
|
||||
+#define FBIND_ADD_FLOW 0x00
|
||||
+#define FBIND_REMOVE_FLOW 0xF0
|
||||
+#define FBIND_ACTION_NCAST 0x03
|
||||
+#define FBIND_ACTION_NCAST_COMBINE 0x04
|
||||
+#define FBIND_ACTION_NCAST_COMBINE_ADAP 0x05
|
||||
+#define FBIND_FID_SHO 0x08
|
||||
+/* NEMO-SHO */
|
||||
+
|
||||
#endif
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mn.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mn.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/mn.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mn.c 2008-03-31 16:15:06.000000000 +0200
|
||||
@@ -67,6 +67,14 @@
|
||||
#include "dhaad_mn.h"
|
||||
#include "ipsec.h"
|
||||
|
||||
+/* NEMO-SHO CONFIG */
|
||||
+uint16_t mcoa_get_previous_bid(struct home_addr_info *hai);
|
||||
+enum {
|
||||
+ TYPE_HO_DOWNWARD,
|
||||
+ TYPE_HO_UPWARD
|
||||
+};
|
||||
+/* NEMO-SHO CONFIG*/
|
||||
+
|
||||
#define MN_DEBUG_LEVEL 1
|
||||
|
||||
#if MN_DEBUG_LEVEL >= 1
|
||||
@@ -396,6 +404,49 @@
|
||||
free_iov_data(iov, iov_ind);
|
||||
return -ENOMEM;
|
||||
}
|
||||
+ /* NEMO-SHO */
|
||||
+ if (hai->reg_mcoa && bule->bid && bule->fid){
|
||||
+ uint16_t prev_bid =
|
||||
+ mcoa_get_previous_bid(hai);
|
||||
+ uint8_t action;
|
||||
+ if (conf.MnUseSHO){
|
||||
+ if (conf.UseAdaptiveCombining)
|
||||
+ action = FBIND_ACTION_NCAST_COMBINE_ADAP;
|
||||
+ else
|
||||
+ action = FBIND_ACTION_NCAST_COMBINE;
|
||||
+ }
|
||||
+ else
|
||||
+ action = FBIND_ACTION_NCAST;
|
||||
+ // Start N-casting
|
||||
+ if ( bu->ip6mhbu_lifetime &&
|
||||
+ mh_create_opt_fid(&iov[iov_ind++],
|
||||
+ bule->fid, //fid
|
||||
+ action,
|
||||
+ 0, //status
|
||||
+ 0, //priority
|
||||
+ FBIND_ADD_FLOW, //process (adding)
|
||||
+ 1, //subopt is present
|
||||
+ prev_bid //bid
|
||||
+ ) < 0 ){
|
||||
+ free_iov_data(iov, iov_ind);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ // Stop N-casting
|
||||
+ else if (!bule->mcoa_dereg &&
|
||||
+ mh_create_opt_fid(&iov[iov_ind++],
|
||||
+ bule->fid, //fid
|
||||
+ action,
|
||||
+ 0, //status
|
||||
+ 0, //priority
|
||||
+ 0xF,//process (removing)
|
||||
+ 0, //subopt is not present
|
||||
+ 0 //bid
|
||||
+ ) < 0){
|
||||
+ free_iov_data(iov, iov_ind);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ }
|
||||
+ /* NEMO-SHO */
|
||||
if (bule->flags & IP6_MH_BU_MR && bu->ip6mhbu_lifetime &&
|
||||
bule->home->mnp_count > 0 && conf.MobRtrUseExplicitMode &&
|
||||
mh_create_opt_mob_net_prefix(&iov[iov_ind++],
|
||||
@@ -452,6 +503,27 @@
|
||||
|
||||
return ret;
|
||||
}
|
||||
+/* NEMO-SHO */
|
||||
+uint16_t mcoa_get_previous_bid(struct home_addr_info *hai)
|
||||
+{
|
||||
+ struct list_head *l;
|
||||
+ int iif = hai->current_coa->iif;
|
||||
+
|
||||
+ if(!hai->reg_mcoa){
|
||||
+ MDBG("================================= reg_mcoa is 0\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ list_for_each(l, &hai->mcoa) {
|
||||
+ struct mn_addr *coa_entry;
|
||||
+ coa_entry = list_entry(l, struct mn_addr, list);
|
||||
+ if (coa_entry->iif != iif)
|
||||
+ return get_bid_from_ifindex(coa_entry->iif);
|
||||
+ }
|
||||
+ MDBG("================================= cannot find entry\n");
|
||||
+ return 0;
|
||||
+}
|
||||
+/* NEMO-SHO */
|
||||
|
||||
struct mn_addr *mcoa_get_current_coa(struct home_addr_info *hai, int iif)
|
||||
{
|
||||
@@ -1121,6 +1193,24 @@
|
||||
}
|
||||
if (!homereg_expired) {
|
||||
bule->do_send_bu = 1;
|
||||
+ /* NEMO-SHO */
|
||||
+ if (conf.MnUseSHO){
|
||||
+ struct bulentry *bul_prev = NULL;
|
||||
+ uint16_t prev_bid =
|
||||
+ mcoa_get_previous_bid(hai);
|
||||
+ if (prev_bid)
|
||||
+ bul_prev = bul_get(hai, NULL,
|
||||
+ &hai->ha_addr,
|
||||
+ prev_bid);
|
||||
+
|
||||
+ if (hai->reg_mcoa && bul_prev) {
|
||||
+ MDBG("=====previous_bid %d=====\n", prev_bid);
|
||||
+ bule->fid = FBIND_FID_SHO;
|
||||
+ }
|
||||
+ else
|
||||
+ bule->fid = 0;
|
||||
+ }
|
||||
+ /* NEMO-SHO */
|
||||
mn_send_bu_msg(bule);
|
||||
bul_update_timer(bule);
|
||||
if (conf.OptimisticHandoff)
|
||||
@@ -1145,6 +1235,44 @@
|
||||
bule->if_tunnel = tunnel_mod(bule->if_tunnel, &hai->current_coa->addr,
|
||||
&hai->ha_addr, hai->current_coa->iif,
|
||||
mn_ext_tunnel_ops, hai);
|
||||
+ /* NEMO-SHO */
|
||||
+ if (bule->fid){
|
||||
+ int HOtype;
|
||||
+ // only Packet Combining is enabled for this moement
|
||||
+ int nemo_sho_flag = SHO_COMBINING;
|
||||
+ if (conf.UseAdaptiveCombining)
|
||||
+ nemo_sho_flag |=SHO_ADAPTIVE;
|
||||
+ if (conf.debug_level > 0)
|
||||
+ nemo_sho_flag |=SHO_DEBUG;
|
||||
+
|
||||
+ uint16_t prev_bid =
|
||||
+ mcoa_get_previous_bid(hai);
|
||||
+ struct bulentry *bul_prev = bul_get(hai, NULL, &hai->ha_addr,
|
||||
+ prev_bid);
|
||||
+ // share the same fid with another bul
|
||||
+ bul_prev->fid = bule->fid;
|
||||
+
|
||||
+ if (get_delay_from_bid(prev_bid) >
|
||||
+ get_delay_from_bid(bule->bid) )
|
||||
+ HOtype = TYPE_HO_DOWNWARD;
|
||||
+ else
|
||||
+ HOtype = TYPE_HO_UPWARD;
|
||||
+
|
||||
+ dtunnel_mod_type(bule->if_tunnel,
|
||||
+ &bule->coa,
|
||||
+ &bule->peer_addr,
|
||||
+ &bul_prev->coa,
|
||||
+ bule->if_coa,
|
||||
+ nemo_sho_flag,
|
||||
+ 0,
|
||||
+ (HOtype==TYPE_HO_DOWNWARD)?
|
||||
+ get_delay_from_bid(bule->bid):0,
|
||||
+ (HOtype==TYPE_HO_DOWNWARD)?
|
||||
+ get_delay_from_bid(prev_bid):0
|
||||
+ ); /* from MR to HA */
|
||||
+ }
|
||||
+ /* NEMO-SHO */
|
||||
+
|
||||
hai->if_tunnel = bule->if_tunnel;
|
||||
bule->last_coa = bule->coa;
|
||||
bule->coa_changed = 0;
|
||||
@@ -1351,6 +1479,9 @@
|
||||
{
|
||||
struct ip6_mh_binding_ack *ba;
|
||||
struct ip6_mh_opt_bid *bui;
|
||||
+ // NEMO-SHO
|
||||
+ struct ip6_mh_opt_fid *fid_opt = NULL;
|
||||
+ // NEMO-SHO
|
||||
struct mh_options mh_opts;
|
||||
struct bulentry *bule;
|
||||
struct timespec now, ba_lifetime, br_adv;
|
||||
@@ -1370,6 +1501,7 @@
|
||||
/* MCoA: Lookup in BA options for the BUI sub-option and the BID */
|
||||
bui = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_BID);
|
||||
bid = bui ? ntohs(bui->ip6mobid_bid) : MCOA_NO_BID;
|
||||
+ fid_opt = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_FID);
|
||||
|
||||
bule = bul_get(NULL, in->dst, in->src, bid);
|
||||
if (!bule || bule->type != BUL_ENTRY) {
|
||||
@@ -1383,6 +1515,26 @@
|
||||
NIP6ADDR(in->local_coa != NULL ?
|
||||
in->local_coa : &in6addr_any),
|
||||
bid);
|
||||
+ if (fid_opt){
|
||||
+ struct home_addr_info *hai = mn_get_home_addr(in->dst);
|
||||
+ if (hai){
|
||||
+ MDBG("FID option (FID=%d) is attached. releasing Bicasting/Combining info\n", fid_opt->ip6fid_fid);
|
||||
+ bule = bul_get(hai, NULL, in->src,
|
||||
+ get_bid_from_ifindex(iif));
|
||||
+ if (bule->fid == fid_opt->ip6fid_fid){
|
||||
+ dtunnel_mod_type(bule->if_tunnel,
|
||||
+ &bule->coa,
|
||||
+ &bule->peer_addr,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0); /* from MR to HA */
|
||||
+ }
|
||||
+ }
|
||||
+ hai = NULL;
|
||||
+ }
|
||||
pthread_rwlock_unlock(&mn_lock);
|
||||
return;
|
||||
}
|
||||
@@ -1554,6 +1706,44 @@
|
||||
dbg("Deleting bul entry\n");
|
||||
bul_delete(bule);
|
||||
} else {
|
||||
+ /* NEMO-SHO */
|
||||
+ if (bule->fid){
|
||||
+ int nemo_sho_flag = SHO_BICAST|SHO_COMBINING;
|
||||
+ dbg("DTUNNEL from %x:%x:%x:%x:%x:%x:%x:%x "
|
||||
+ "with coa %x:%x:%x:%x:%x:%x:%x:%x\n",
|
||||
+ NIP6ADDR(in->src), NIP6ADDR(in->local_coa));
|
||||
+
|
||||
+ if (conf.UseAdaptiveCombining)
|
||||
+ nemo_sho_flag |=SHO_ADAPTIVE;
|
||||
+ if (conf.debug_level > 0)
|
||||
+ nemo_sho_flag |=SHO_DEBUG;
|
||||
+
|
||||
+ struct home_addr_info *hai = bule->home;
|
||||
+ uint16_t prev_bid =
|
||||
+ mcoa_get_previous_bid(hai);
|
||||
+ struct bulentry *bul_prev = bul_get(hai, NULL,
|
||||
+ &hai->ha_addr,
|
||||
+ prev_bid);
|
||||
+ int HOtype;
|
||||
+ if (get_delay_from_bid(prev_bid) >
|
||||
+ get_delay_from_bid(bule->bid) )
|
||||
+ HOtype = TYPE_HO_DOWNWARD;
|
||||
+ else
|
||||
+ HOtype = TYPE_HO_UPWARD;
|
||||
+ dtunnel_mod_type(bule->if_tunnel,
|
||||
+ &bule->coa,
|
||||
+ &bule->peer_addr,
|
||||
+ &bul_prev->coa,
|
||||
+ bule->if_coa,
|
||||
+ nemo_sho_flag,
|
||||
+ 0,
|
||||
+ (HOtype==TYPE_HO_DOWNWARD)?
|
||||
+ get_delay_from_bid(bule->bid):0,
|
||||
+ (HOtype==TYPE_HO_DOWNWARD)?
|
||||
+ get_delay_from_bid(prev_bid):0
|
||||
+ ); /* from MR to HA */
|
||||
+ }
|
||||
+ /* NEMO-SHO */
|
||||
set_bule_lifetime(bule, &ba_lifetime, &br_adv);
|
||||
if (bule->flags & IP6_MH_BU_HOME) {
|
||||
dbg("Callback to bu_refresh after %d seconds\n",
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/movement.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/movement.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/movement.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/movement.c 2008-03-31 14:43:09.000000000 +0200
|
||||
@@ -48,7 +48,7 @@
|
||||
#include "prefix.h"
|
||||
#include "conf.h"
|
||||
|
||||
-#define MD_DEBUG_LEVEL 1
|
||||
+#define MD_DEBUG_LEVEL 0
|
||||
|
||||
#if MD_DEBUG_LEVEL >= 1
|
||||
#define MDBG dbg
|
||||
@@ -1411,10 +1411,13 @@
|
||||
if (old)
|
||||
md_expire_router(iface, old, new);
|
||||
|
||||
+ //NEMO-SHO avoid blocking outbound traffic here
|
||||
+#if 0
|
||||
if (list_empty(&iface->coas) &&
|
||||
!(iface->iface_flags & MD_BLOCK_TRAFFIC)) {
|
||||
md_block_rule_add(iface);
|
||||
}
|
||||
+#endif
|
||||
new->used = 1;
|
||||
md_add_default_router(iface, new);
|
||||
__md_new_link(iface, link_changed);
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/policy.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/policy.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/policy.h 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/policy.h 2008-03-21 15:43:20.000000000 +0100
|
||||
@@ -13,6 +13,7 @@
|
||||
#define POL_MN_IF_DEF_BID 0
|
||||
#define POL_MN_IF_DEF_BID_PRIORITY 0
|
||||
#define POL_MN_IF_DEF_RELIABLE 1
|
||||
+#define POL_MN_IF_DEF_DELAY 0
|
||||
|
||||
struct ip6_mh_binding_update;
|
||||
struct nd_router_advert;
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/scan.l mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/scan.l
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/scan.l 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/scan.l 2008-03-21 15:34:55.000000000 +0100
|
||||
@@ -139,11 +139,14 @@
|
||||
HaAcceptMobRtr { return HAACCEPTMOBRTR; }
|
||||
HaAcceptMCoAReg { return HAACCEPTMCOAREG; }
|
||||
MCoAReg { return MCOAREG; }
|
||||
+MnUseSHO { return MNUSESHO; }
|
||||
+MnUseAdaptiveCombining { return MNUSEAPC; }
|
||||
NoMCoAReg { return NOMCOAREG; }
|
||||
IsMobRtr { return ISMOBRTR; }
|
||||
Bid { return BID; }
|
||||
BidPriority { return BIDPRIORITY; }
|
||||
Reliable { return RELIABLE; }
|
||||
+DefaultDelay { return DEFAULTDELAY; }
|
||||
RegMultipleCoA { return REGMULTIPLECOA; }
|
||||
IfMultipleCoA { return IFMULTIPLECOA; }
|
||||
HaServedPrefix { return HASERVEDPREFIX; }
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.c
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.c 2008-03-21 16:40:07.000000000 +0100
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.c 2008-03-20 16:51:35.000000000 +0100
|
||||
@@ -315,6 +315,73 @@
|
||||
return res;
|
||||
}
|
||||
|
||||
+// ---------------- rueegg -------------------------
|
||||
+int dtunnel_mod_type(int ifindex,
|
||||
+ struct in6_addr *local,
|
||||
+ struct in6_addr *remote,
|
||||
+ struct in6_addr *addr2,
|
||||
+ int link,
|
||||
+ int do_bicasting,
|
||||
+ int tnl_type,
|
||||
+ unsigned short defaultDeltaT1,
|
||||
+ unsigned short defaultDeltaT2)
|
||||
+{
|
||||
+ struct mip6_tnl *tnl;
|
||||
+ struct ip6_tnl_parm parm;
|
||||
+ struct ifreq ifr;
|
||||
+
|
||||
+ int res = -1;
|
||||
+
|
||||
+ pthread_mutex_lock(&tnl_lock);
|
||||
+
|
||||
+ TDBG("modifying mode of tunnel %d end points with "
|
||||
+ "from %x:%x:%x:%x:%x:%x:%x:%x "
|
||||
+ "to %x:%x:%x:%x:%x:%x:%x:%x\n",
|
||||
+ ifindex, NIP6ADDR(local), NIP6ADDR(remote));
|
||||
+
|
||||
+ tnl = get_tnl(ifindex);
|
||||
+ assert(tnl != NULL);
|
||||
+
|
||||
+ if (tnl->users == 1){
|
||||
+ memset(&parm, 0, sizeof(struct ip6_tnl_parm));
|
||||
+ parm.proto = IPPROTO_IPV6;
|
||||
+ parm.flags = IP6_TNL_F_MIP6_DEV|IP6_TNL_F_IGN_ENCAP_LIMIT;
|
||||
+ parm.hop_limit = 64;
|
||||
+ parm.laddr = *local;
|
||||
+ parm.raddr = *remote;
|
||||
+ parm.link = link;
|
||||
+ parm.dparms.dtnl_flag = do_bicasting; //rueegg
|
||||
+ if (do_bicasting) {
|
||||
+ parm.dparms.dtnl_type = tnl_type; //rueegg
|
||||
+ parm.dparms.addr2 = *addr2; //rueegg
|
||||
+ }
|
||||
+ parm.dparms.defaultDeltaT[0]=defaultDeltaT1;
|
||||
+ parm.dparms.defaultDeltaT[1]=defaultDeltaT2;
|
||||
+
|
||||
+ strcpy(ifr.ifr_name, tnl->parm.name);
|
||||
+ ifr.ifr_ifru.ifru_data = (void *)&parm;
|
||||
+
|
||||
+ if(ioctl(tnl_fd, SIOCCHGTUNNEL, &ifr) < 0) {
|
||||
+ TDBG("SIOCCHGTUNNEL failed status %d %s\n",
|
||||
+ errno, strerror(errno));
|
||||
+ pthread_mutex_unlock(&tnl_lock);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ memcpy(&tnl->parm, &parm, sizeof(struct ip6_tnl_parm));
|
||||
+ TDBG("modified tunnel iface %s (%d)"
|
||||
+ "from %x:%x:%x:%x:%x:%x:%x:%x "
|
||||
+ "to %x:%x:%x:%x:%x:%x:%x:%x\n",
|
||||
+ tnl->parm.name, tnl->ifindex, NIP6ADDR(&tnl->parm.laddr),
|
||||
+ NIP6ADDR(&tnl->parm.raddr));
|
||||
+ res = tnl->ifindex;
|
||||
+ }
|
||||
+
|
||||
+ pthread_mutex_unlock(&tnl_lock);
|
||||
+ return res;
|
||||
+}
|
||||
+
|
||||
+// ---------- rueegg end -------------------
|
||||
+
|
||||
static int __tunnel_mod(struct mip6_tnl *tnl,
|
||||
struct in6_addr *local,
|
||||
struct in6_addr *remote,
|
||||
diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.h
|
||||
--- mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.h 2007-09-13 11:42:42.000000000 +0200
|
||||
+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.h 2008-03-20 16:51:13.000000000 +0100
|
||||
@@ -28,6 +28,21 @@
|
||||
void *data),
|
||||
void *data);
|
||||
|
||||
+/* NEMO-SHO by hirokazu */
|
||||
+#define SHO_BICAST 0x1
|
||||
+#define SHO_COMBINING 0x2
|
||||
+#define SHO_ADAPTIVE 0x4
|
||||
+#define SHO_DEBUG 0x8
|
||||
+int dtunnel_mod_type(int ifindex,
|
||||
+ struct in6_addr *local,
|
||||
+ struct in6_addr *remote,
|
||||
+ struct in6_addr *addr2,
|
||||
+ int link,
|
||||
+ int do_bicasting,
|
||||
+ int tnl_type,
|
||||
+ unsigned short defaultDeltaT1,
|
||||
+ unsigned short defaultDeltaT2);
|
||||
+/* NEMO-SHO by hirokazu */
|
||||
|
||||
int tunnelctl_init(void);
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user