From 905aee70989471603fc7ad986c9b8cad1d28d986 Mon Sep 17 00:00:00 2001 From: gauthier <gauthier@mycompany.com> Date: Mon, 27 Jul 2015 15:10:28 +0000 Subject: [PATCH] moved NEMO_SHO from trunk to extras branch git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7750 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair3/NEMO_SHO/COPYING | 674 -- openair3/NEMO_SHO/README | 6 - ...-daemon-umip-0.4-nasmesh-2009-may-12.patch | 301 - .../mipv6-daemon-umip-0.4-nepl-20080108.patch | 2862 --------- ...6-daemon-umip-0.4-nepl-mcoa-20080108.patch | 5535 ----------------- .../mipv6-daemon-umip-0.4-sho-20080331.patch | 978 --- .../NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz | Bin 398552 -> 0 bytes 7 files changed, 10356 deletions(-) delete mode 100644 openair3/NEMO_SHO/COPYING delete mode 100644 openair3/NEMO_SHO/README delete mode 100644 openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch delete mode 100755 openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch delete mode 100755 openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch delete mode 100755 openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch delete mode 100755 openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz diff --git a/openair3/NEMO_SHO/COPYING b/openair3/NEMO_SHO/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair3/NEMO_SHO/COPYING +++ /dev/null @@ -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>. diff --git a/openair3/NEMO_SHO/README b/openair3/NEMO_SHO/README deleted file mode 100644 index 8753e997a9..0000000000 --- a/openair3/NEMO_SHO/README +++ /dev/null @@ -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 - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch deleted file mode 100644 index abb8f76f8a..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch +++ /dev/null @@ -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 diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch deleted file mode 100755 index 7d70c0d531..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch +++ /dev/null @@ -1,2862 +0,0 @@ -diff -r a7e20b0b5c43 AUTHORS ---- a/AUTHORS Wed Nov 28 16:43:32 2007 +0100 -+++ b/AUTHORS Tue Jan 08 11:28:48 2008 +0100 -@@ -5,3 +5,14 @@ Petander. Code has been contributed by - Petander. Code has been contributed by several individuals. See - THANKS for listing. See libnetlink/README for information regarding - libnetlink. -+ -+The NEMO Basic support code is developed by Ville Nuorvala -+<vnuorval@tcs.hut.fi> in co-operation with the Nautilus6/WIDE -+project (http://www.nautilus6.org). -+ -+The NEMO Basic Support code has been ported to UMIP by Romain KUNTZ -+<kuntz@lsiit.u-strasbg.fr> and received contributions from the -+following people: -+- Sebastien DECUGIS (Nautilus6): IPsec support for NEMO -+- Arnaud EBALARD (EADS): fixes for Big Endian architectures and -+ improvements of the NEMO debug messages. -diff -r a7e20b0b5c43 BUGS ---- a/BUGS Wed Nov 28 16:43:32 2007 +0100 -+++ b/BUGS Tue Jan 08 11:28:48 2008 +0100 -@@ -17,3 +17,11 @@ Mobile Node issues - * Multihoming support hasn't been very thoroughly tested and should - therefore be considered developmental code. However, it is a lot - more stable than in the Release Candidates. -+ -+NEMO issues -+----------- -+ -+* The Mobile Router's home address may only be on the egress interface. -+ -+* Dynamic routing protocols between the Home Agent and Mobile Router -+ are not yet supported. -diff -r a7e20b0b5c43 COPYING.NEMO ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/COPYING.NEMO Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,13 @@ -+Cisco and Nokia have both published IPR notices regarding RFC 3963 -+"Network Mobility (NEMO) Basic Support Protocol." -+ -+Cisco has agreed not to assert its patents against any party agreeing with the -+terms in its IPR notice. -+ -+Likewise, Nokia has agreed not to assert its patents against Open Source -+implementations of the specification. -+ -+For further information, please read -+licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt and -+licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt. -+ -diff -r a7e20b0b5c43 INSTALL ---- a/INSTALL Wed Nov 28 16:43:32 2007 +0100 -+++ b/INSTALL Tue Jan 08 11:28:48 2008 +0100 -@@ -45,6 +45,8 @@ 4. Run 'make install'. Executables shou - further information on how to configure your node. Also take a - look at the example configuration files in the extras directory. - -+ For comments about NEMO check README.NEMO. -+ - For comments about IPsec support check README.IPsec. - - 5. A startup script -diff -r a7e20b0b5c43 README ---- a/README Wed Nov 28 16:43:32 2007 +0100 -+++ b/README Tue Jan 08 11:28:48 2008 +0100 -@@ -2,6 +2,9 @@ MIPL Mobile IPv6 for Linux - - MIPL Mobile IPv6 for Linux is an implementation of the Mobility - Support in IP version 6 (RFC 3775). -+ -+ It also supports Network Mobility with the NEMO Basic Support -+ implementation (RFC 3963). - - This user space part works together with Mobile IPv6 enabled Linux - kernels. See INSTALL and any other documents referred there for -diff -r a7e20b0b5c43 README.NEMO ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/README.NEMO Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,18 @@ -+README for NEMO Basic Support -+----------------------------- -+ -+Here are a few things you need to keep in mind when setting up Network -+Mobility: -+ -+The MR is a router so you need to set -+/proc/sys/net/ipv6/conf/all/forwarding to 1 to make sure it will forward -+packets between its ingress and egress interfaces. -+ -+With static routing the HA and other routers on the home link might need some -+additional boot-strapping. If the MR has a physical home link that it may be -+attached to, the other routers must be pre-configured with routes to the MR's -+Mobile Network Prefixes via the MR's home address. This ensures packets will -+be forwarded correctly also when the MR is at home. -+ -+To be able to support NEMO DHAAD the HA needs to have AdvHomeAgentInfo and -+AdvMobRtrSupportFlag turned on in radvd.conf. -diff -r a7e20b0b5c43 include/netinet/icmp6.h ---- a/include/netinet/icmp6.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/include/netinet/icmp6.h Tue Jan 08 11:28:48 2008 +0100 -@@ -27,7 +27,13 @@ struct mip_dhaad_req { /* Dynamic HA Ad - #define mip_dhreq_code mip_dhreq_hdr.icmp6_code - #define mip_dhreq_cksum mip_dhreq_hdr.icmp6_cksum - #define mip_dhreq_id mip_dhreq_hdr.icmp6_data16[0] --#define mip_dhreq_reserved mip_dhreq_hdr.icmp6_data16[1] -+#define mip_dhreq_flags_reserved mip_dhreq_hdr.icmp6_data16[1] -+ -+#if BYTE_ORDER == BIG_ENDIAN -+#define MIP_DHREQ_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define MIP_DHREQ_FLAG_SUPPORT_MR 0x0080 -+#endif - #endif - - #ifndef HAVE_STRUCT_MIP_DHAAD_REP -@@ -40,7 +46,13 @@ struct mip_dhaad_rep { /* HA Address Di - #define mip_dhrep_code mip_dhrep_hdr.icmp6_code - #define mip_dhrep_cksum mip_dhrep_hdr.icmp6_cksum - #define mip_dhrep_id mip_dhrep_hdr.icmp6_data16[0] --#define mip_dhrep_reserved mip_dhrep_hdr.icmp6_data16[1] -+#define mip_dhrep_flags_reserved mip_dhrep_hdr.icmp6_data16[1] -+ -+#if BYTE_ORDER == BIG_ENDIAN -+#define MIP_DHREP_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define MIP_DHREP_FLAG_SUPPORT_MR 0x0080 -+#endif - #endif - - #ifndef HAVE_STRUCT_MIP_PREFIX_SOLICIT -@@ -89,10 +101,20 @@ struct nd_opt_homeagent_info { /* Home A - struct nd_opt_homeagent_info { /* Home Agent information */ - uint8_t nd_opt_hai_type; - uint8_t nd_opt_hai_len; -- uint16_t nd_opt_hai_reserved; -+ uint16_t nd_opt_hai_flags_reserved; - uint16_t nd_opt_hai_preference; - uint16_t nd_opt_hai_lifetime; - }; - #endif - -+#define nd_opt_hai_reserved nd_opt_hai_flags_reserved -+ -+#ifndef ND_OPT_HAI_FLAG_SUPPORT_MR -+#if BYTE_ORDER == BIG_ENDIAN -+#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x0080 -+#endif -+#endif -+ - #endif /* netinet/icmp6.h */ -diff -r a7e20b0b5c43 licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,41 @@ -+Title: Cisco Systems' Updated Statement about IPR claimed in -+ draft-ietf-nemo-basic-support-03.txt -+Received 25 October 2004 -+From: Robert Barr <rbarr@cisco.com> -+ -+This statement updates the IPR statement filed by Cisco on June 20, 2003 for -+draft-ietf-nemo-basic-support-00.txt. -+ -+Cisco is the owner of US Patent No. 6,636,498 and at least one pending -+patent application -+relating to the subject matter of draft-ietf-nemo-basic-support-03.txt -+"Network Mobility (NEMO) Basic Support Protocol" . -+If a standard relating to this subject matter is adopted by IETF and any -+claims -+of any issued Cisco patents are necessary for practicing this standard, any -+party will be able to obtain a license from Cisco to use any such patent -+claims under openly specified, reasonable, non-discriminatory terms, with -+reciprocity, to implement and fully comply with the standard. -+ -+The reasonable non-discriminatory terms are: -+ -+If this standard is adopted, Cisco will not assert any patents owned or -+controlled by Cisco against any party for making, using, selling, importing -+or offering for sale a product that implements the standard, provided, -+however that Cisco retains the right to assert its patents (including the -+right to claim past royalties) against any party that asserts a patent it -+owns or controls (either directly or indirectly) against Cisco or any of -+Cisco's affiliates or successors in title; and Cisco retains the right to -+assert its patents against any product or portion thereof that is not -+necessary for compliance with the standard. -+ -+Royalty-bearing licenses will be available to anyone who prefers that -+option. -+ -+For information contact: -+ -+Robert Barr -+Worldwide Patent Counsel -+Cisco Systems -+408-525-9706 -+rbarr@cisco.com -diff -r a7e20b0b5c43 licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,26 @@ -+Title: Nokia Corporation's statement about IPR claimed in draft-ietf-nemo-basic-support -+Received: July 1, 2003 -+From: Heikki Huttunen <heikki.a.huttunen@nokia.com> -+ -+This is to advise the IETF that Nokia believes the Nokia patent application "Mobile Router -+Support for IPv6", US10/295014, WO03/043226 may be relevant to Nemo Basic Support Protocol -+<draft-ietf-nemo-basic-support>. -+ -+Regarding internet draft "draft-ietf-nemo-basic-support", to the extent this draft is -+included into final IETF standard specification, Nokia agrees not to assert those claims -+in Nokia patents that apply to this draft and that are technically necessary to implement -+the IETF standard specification against any other party in respect of its implementation of -+the specification, if only practiced under any software distributed under the present terms -+of GNU GENERAL PUBLIC LICENSE (http://www.fsf.org/copyleft/gpl.html) or under license terms -+that conform to the present open source definition (http://www.opensource.org/osd.html) and -+provided that the party relying on this commitment does not assert its patents against Nokia. -+ -+Otherwise general Nokia Statement on Patent Licensing (http://www.ietf.org/ietf/IPR/NOKIA) -+applies to this submission. -+ -+ -+Heikki Huttunen -+Director, Licensing -+Nokia Corporation -+P.O Box 86, FIN-24101 Salo, Finland -+Phone: +358 (0) 7180 41202, Fax: +358 (0) 7180 44275 -diff -r a7e20b0b5c43 man/mip6d.conf.tmpl ---- a/man/mip6d.conf.tmpl Wed Nov 28 16:43:32 2007 +0100 -+++ b/man/mip6d.conf.tmpl Tue Jan 08 11:28:48 2008 +0100 -@@ -1,12 +1,12 @@ - .\" $Id: mip6d.conf.tmpl 1.33 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ --.TH mip6d.conf 5 "January 31, 2006" "" "Mobile IPv6 Daemon Configuration" -+.TH mip6d.conf 5 "January 31, 2006" "" "Mobile IPv6 and NEMO Daemon Configuration" - .SH NAME --mip6d.conf \- MIPL Mobile IPv6 Configuration file -+mip6d.conf \- MIPL Mobile IPv6 and NEMO Configuration file - .SH SYNOPSIS - .B %etc%/mip6d.conf - .sp - .SH DESCRIPTION --MIPL Mobile IPv6 daemon's configuration file -+MIPL Mobile IPv6 and NEMO daemon's configuration file - .P - Below is a list of currently supported configuration options. All - configuration lines are terminated with a semicolon. Sub-sections are -@@ -184,10 +184,29 @@ Default: 86400 - Default: 86400 - - .TP --.BR "BindingAclPolicy " "address " "allow | deny" -+.BR "HaAcceptMobRtr enabled | disabled" - --Defines if a MN is allowed to register with the HA or not. The MN home address --of the MN is given in the address field." -+Indicates if the HA accepts Mobile Router bindings. -+ -+Default: disabled; -+ -+.TP -+.BR "HaServedPrefix " "prefix/length" ";" -+ -+Prefix is an IPv6 prefix and length is the prefix length. Defines the whole -+aggregated or extended prefix the HA serves. This option is only used for MR -+bindings and is only needed if the MRs derive their Home Addresses from their -+Mobile Network Prefixes, instead of one of the home link prefixes. -+ -+.TP -+.BR "BindingAclPolicy " "address MNP list " "allow | deny" -+ -+Defines if a MN is allowed to register with the HA or not. The home address -+of the MN is given in the address field. The mobile network prefixes -+belonging a NEMO Mobile Router are listed in the MNP list. The list can either -+be an empty string or a comma separated list of network prefixes -+enclosed in braces, for example: -+.B "(3ffe:2620:6:3::/64, 3ffe:2620:6:4::/64)" - - .TP - .BR "DefaultBindingAclPolicy allow | deny" -@@ -254,6 +273,13 @@ Default: disabled - Default: disabled - - .TP -+.BR "MobRtrUseExplicitMode enabled | disabled" -+ -+Toggles between explicit or implicit mode home registrations in the MR. -+ -+Default: enabled -+ -+.TP - .BR "UseCnBuAck " "boolean" ";" - - Indicates if the Acknowledge bit should be set in Binding Updates sent to -@@ -299,7 +325,7 @@ Default: disabled; - .TP - .nf - .BR "MnHomeLink " "name " "{" --.BR " HomeAddress " "address/length" ";" -+.BR " HomeAddress " "address/length MNP list" ";" - .BR " HomeAgentAddress " "address" ";" - .BR " MnRoPolicy ..." - .BR " ..." -@@ -317,11 +343,14 @@ definitions. All the home link specific - definitions. All the home link specific definitions are detailed below: - - .TP --.BR "HomeAddress " "address/length" ";" -+.BR "HomeAddress " "address/length MNP list" ";" - - Address is an IPv6 address, and length the prefix length of the --address, usually 64. This option must be included in a home link --definition. -+address, usually 64. The MNP list contains the mobile network prefixes -+belonging to that particular NEMO Mobile Router. The MNP list is of the -+same format as in -+.B "BindingAclPolicy." -+This option must be included in a home link definition. - - .TP - .BR "HomeAgentAddress " "address" ";" -@@ -330,6 +359,13 @@ if it is the unspecified address ::. - if it is the unspecified address ::. - - Default: :: -+ -+.TP -+.BR "IsMobRtr enabled | disabled" -+ -+Defines if the MN is a NEMO MR. -+ -+Default: disabled - - .TP - The route optimization policies are of the form: -@@ -351,6 +387,49 @@ matching this entry. - matching this entry. - - .SH EXAMPLES -+ -+.TP -+.BR "A NEMO Home Agent example:" -+ -+.nf -+NodeConfig HA; -+ -+Interface "eth0"; -+ -+HaAcceptMobRtr enabled; -+ -+HaServedPrefix 3ffe:2620:6::/48; -+ -+DefaultBindingAclPolicy deny; -+BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -+BindingAclPolicy 3ffe:2620:6:1::1235 allow; -+ -+UseMnHaIPsec disabled; -+.fi -+ -+.TP -+.BR "A NEMO Mobile Router example:" -+ -+.nf -+NodeConfig MN; -+ -+DoRouteOptimizationCN disabled; -+DoRouteOptimizationMN disabled; -+ -+Interface "eth0"; -+ -+MnRouterProbes 1; -+ -+MobRtrUseExplicitMode enabled; -+ -+MnHomeLink "eth0" { -+ IsMobRtr enabled; -+ HomeAgentAddress 3ffe:2620:6:1::1; -+ HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -+} -+ -+UseMnHaIPsec disabled; -+.fi - - .TP - .BR "A Correspondent Node example:" -diff -r a7e20b0b5c43 man/mip6d.tmpl ---- a/man/mip6d.tmpl Wed Nov 28 16:43:32 2007 +0100 -+++ b/man/mip6d.tmpl Tue Jan 08 11:28:48 2008 +0100 -@@ -1,13 +1,13 @@ - .\" $Id: mip6d.tmpl 1.4 05/05/16 13:13:41+03:00 anttit@tcs.hut.fi $ --.TH mip6d 1 "May 16, 2005" "" "Mobile IPv6 Daemon" -+.TH mip6d 1 "May 16, 2005" "" "Mobile IPv6 and NEMO Daemon" - .SH NAME --mip6d \- MIPL Mobile IPv6 protocol implementation -+mip6d \- MIPL Mobile IPv6 and NEMO Basic Support protocol implementation - .SH SYNOPSIS - .B mip6d [options] - .sp - .SH DESCRIPTION - --Mobile IPv6 implementation -+Mobile IPv6 and NEMO Basic Support implementation - - .SH OPTIONS - .IP "\fB\-V, \-\-version\fP" -@@ -41,3 +41,5 @@ RFC3775: Mobility Support in IPv6, - .PP - RFC3776: Using IPsec to Protect Mobile IPv6 Signaling Between Mobile - Nodes and Home Agents -+.PP -+RFC3963: Network Mobility (NEMO) Basic Support Protocol -diff -r a7e20b0b5c43 src/bcache.c ---- a/src/bcache.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bcache.c Tue Jan 08 11:28:48 2008 +0100 -@@ -39,6 +39,7 @@ - #include "mh.h" - #include "cn.h" - #include "vt.h" -+#include "prefix.h" - - #define BCACHE_BUCKETS 32 - -@@ -63,6 +64,7 @@ void dump_bce(void *bce, void *os) - { - struct bcentry *e = (struct bcentry *)bce; - FILE *out = (FILE *)os; -+ int mnpcount = 0; - - fprintf(out, " == Binding Cache entry "); - -@@ -87,6 +89,37 @@ void dump_bce(void *bce, void *os) - NIP6ADDR(&e->our_addr)); - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno); -+ -+ if (e->flags & IP6_MH_BA_MR) { -+ struct list_head *list; -+ -+ /* MR registration type */ -+ fprintf(out, "MR Registration type: "); -+ switch(e->nemo_type) { -+ case BCE_NEMO_EXPLICIT: -+ fprintf(out, "explicit.\n"); -+ break; -+ case BCE_NEMO_IMPLICIT: -+ fprintf(out, "implicit.\n"); -+ break; -+ default: -+ fprintf(out, "unknown.\n"); -+ } -+ -+ /* Mobile Network prefixes */ -+ fprintf(out, "MR Mobile network prefixes: "); -+ list_for_each(list, &e->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (mnpcount) -+ fprintf(out, " "); -+ fprintf(out, "%x:%x:%x:%x:%x:%x:%x:%x/%d\n", -+ NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ mnpcount++; -+ } -+ if (!mnpcount) -+ fprintf(out, " none registered.\n"); -+ } - - fflush(out); - } -@@ -144,6 +177,7 @@ struct bcentry *bcache_alloc(int type) - } - memset(tmp, 0, sizeof(*tmp)); - INIT_LIST_HEAD(&tmp->tqe.list); -+ INIT_LIST_HEAD(&tmp->mob_net_prefixes); - return tmp; - } - -@@ -158,6 +192,7 @@ void bcache_free(struct bcentry *bce) - /* This function should really return allocated space to free - * pool. */ - pthread_rwlock_destroy(&bce->lock); -+ prefix_list_free(&bce->mob_net_prefixes); - free(bce); - } - -diff -r a7e20b0b5c43 src/bcache.h ---- a/src/bcache.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bcache.h Tue Jan 08 11:28:48 2008 +0100 -@@ -18,7 +18,8 @@ struct bcentry { - - uint16_t nonce_coa; - uint16_t nonce_hoa; -- int type; /* Entry type */ -+ uint16_t type; /* Entry type */ -+ uint16_t nemo_type; /* NEMO registration type */ - int unreach; /* ICMP dest unreach count */ - int tunnel; /* Tunnel interface index */ - int link; /* Home link interface index */ -@@ -33,6 +34,8 @@ struct bcentry { - struct tq_elem tqe; /* Timer queue entry for expire */ - - void (*cleanup)(struct bcentry *bce); /* Clean up bce data */ -+ -+ struct list_head mob_net_prefixes; - }; - - #define BCE_NONCE_BLOCK 0 -@@ -40,6 +43,10 @@ struct bcentry { - #define BCE_CACHED 2 - #define BCE_CACHE_DYING 3 - #define BCE_DAD 4 -+ -+#define BCE_NEMO_EXPLICIT 1 -+#define BCE_NEMO_IMPLICIT 2 -+#define BCE_NEMO_DYNAMIC 3 - - struct bcentry *bcache_alloc(int type); - -diff -r a7e20b0b5c43 src/bul.c ---- a/src/bul.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bul.c Tue Jan 08 11:28:48 2008 +0100 -@@ -103,9 +103,11 @@ void dump_bule(void *bule, void *os) - if (e->flags & IP6_MH_BU_ACK) - fprintf(out, "IP6_MH_BU_ACK "); - if (e->flags & IP6_MH_BU_LLOCAL) -- fprintf(out, "IP6_MH_BU_LLOCAL"); -+ fprintf(out, "IP6_MH_BU_LLOCAL "); - if (e->flags & IP6_MH_BU_KEYM) -- fprintf(out, "IP6_MH_BU_KEYM"); -+ fprintf(out, "IP6_MH_BU_KEYM "); -+ if (e->flags & IP6_MH_BU_MR) -+ fprintf(out, "IP6_MH_BU_MR"); - - fprintf(out, "\n"); - fflush(out); -@@ -184,7 +186,8 @@ int bul_add(struct bulentry *bule) - goto home_bul_free; - } else if (bule->type == NON_MIP_CN_ENTRY) { - if (bule->flags & IP6_MH_BU_HOME) { -- if (xfrm_block_hoa(hai) < 0) -+ if (xfrm_block_hoa(hai) < 0 || -+ (hai->mob_rtr && xfrm_block_ra(hai) < 0)) - goto home_bul_free; - } - } -@@ -231,6 +234,10 @@ void bul_delete(struct bulentry *bule) - xfrm_unblock_link(hai); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); -+ if (hai->home_block & NEMO_RA_BLOCK) -+ xfrm_unblock_ra(hai); -+ if (hai->home_block & NEMO_FWD_BLOCK) -+ xfrm_unblock_fwd(hai); - } - } - while (bule->ext_cleanup) -diff -r a7e20b0b5c43 src/cn.c ---- a/src/cn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/cn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -177,8 +177,8 @@ void cn_recv_bu(const struct ip6_mh *mh, - non_ind = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_NONCEID); - bce = bcache_get(out.src, out.dst); - if (bce) { -- if ((bce->flags^bu_flags) & IP6_MH_BU_HOME) { -- /* H-bit mismatch, flags changed */ -+ if ((bce->flags^bu_flags) & (IP6_MH_BU_HOME|IP6_MH_BU_MR)) { -+ /* H-bit or R-bit mismatch, flags changed */ - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_REG_NOT_ALLOWED; -@@ -221,9 +221,15 @@ void cn_recv_bu(const struct ip6_mh *mh, - /* else get rid of it */ - bcache_delete(out.src, out.dst); - } -- } else if (bu_flags & IP6_MH_BU_HOME) { -- status = IP6_MH_BAS_HA_NOT_SUPPORTED; -- goto send_nack; -+ } else { -+ if (bu_flags & IP6_MH_BU_HOME) { -+ status = IP6_MH_BAS_HA_NOT_SUPPORTED; -+ goto send_nack; -+ } -+ if (bu_flags & IP6_MH_BU_MR) { -+ status = IP6_MH_BAS_MR_OP_NOT_PERMITTED; -+ goto send_nack; -+ } - } - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, bu, len); -diff -r a7e20b0b5c43 src/conf.c ---- a/src/conf.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/conf.c Tue Jan 08 11:28:48 2008 +0100 -@@ -212,6 +212,7 @@ static void conf_default(struct mip6_con - INIT_LIST_HEAD(&c->home_addrs); - c->MoveModulePath = NULL; /* internal */ - c->DoRouteOptimizationMN = 1; -+ c->MobRtrUseExplicitMode = 1; - c->SendMobPfxSols = 1; - c->OptimisticHandoff = 0; - -@@ -221,6 +222,7 @@ static void conf_default(struct mip6_con - c->MaxMobPfxAdvInterval = 86400; /* seconds */ - c->MinMobPfxAdvInterval = 600; /* seconds */ - c->HaMaxBindingLife = MAX_BINDING_LIFETIME; -+ INIT_LIST_HEAD(&c->nemo_ha_served_prefixes); - - /* CN bindings */ - c->DoRouteOptimizationCN = 1; -@@ -304,6 +306,8 @@ void conf_show(struct mip6_config *c) - CONF_BOOL_STR(c->MnDiscardHaParamProb)); - dbg("SendMobPfxSols = %s\n", CONF_BOOL_STR(c->SendMobPfxSols)); - dbg("OptimisticHandoff = %s\n", CONF_BOOL_STR(c->OptimisticHandoff)); -+ dbg("MobRtrUseExplicitMode = %s\n", -+ CONF_BOOL_STR(c->MobRtrUseExplicitMode)); - - /* HA options */ - dbg("SendMobPfxAdvs = %s\n", CONF_BOOL_STR(c->SendMobPfxAdvs)); -@@ -312,7 +316,8 @@ void conf_show(struct mip6_config *c) - dbg("MaxMobPfxAdvInterval = %u\n", c->MaxMobPfxAdvInterval); - dbg("MinMobPfxAdvInterval = %u\n", c->MinMobPfxAdvInterval); - dbg("HaMaxBindingLife = %u\n", c->HaMaxBindingLife); -- -+ dbg("HaAcceptMobRtr = %s\n", CONF_BOOL_STR(c->HaAcceptMobRtr)); -+ - /* CN options */ - dbg("DoRouteOptimizationCN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationCN)); -diff -r a7e20b0b5c43 src/conf.h ---- a/src/conf.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/conf.h Tue Jan 08 11:28:48 2008 +0100 -@@ -39,6 +39,7 @@ struct mip6_config { - struct list_head home_addrs; - char *MoveModulePath; - uint16_t CnBuAck; -+ char MobRtrUseExplicitMode; - char DoRouteOptimizationMN; - char MnUseAllInterfaces; - char MnDiscardHaParamProb; -@@ -46,15 +47,16 @@ struct mip6_config { - char OptimisticHandoff; - - /* HA options */ -+ char HaAcceptMobRtr; - char SendMobPfxAdvs; - char SendUnsolMobPfxAdvs; - unsigned int MaxMobPfxAdvInterval; - unsigned int MinMobPfxAdvInterval; - unsigned int HaMaxBindingLife; -+ struct list_head nemo_ha_served_prefixes; - - /* CN options */ - char DoRouteOptimizationCN; -- - }; - - struct net_iface { -diff -r a7e20b0b5c43 src/dhaad_ha.c ---- a/src/dhaad_ha.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_ha.c Tue Jan 08 11:28:48 2008 +0100 -@@ -83,8 +83,8 @@ static void dhaad_expire_halist(struct t - pthread_rwlock_unlock(&ha_lock); - } - --void dhaad_insert_halist(struct ha_interface *i, -- uint16_t key, uint16_t life_sec, -+void dhaad_insert_halist(struct ha_interface *i, uint16_t key, -+ uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo, - const struct in6_addr *lladdr) - { -@@ -110,6 +110,7 @@ void dhaad_insert_halist(struct ha_inter - return; - } - memset(ha, 0, sizeof(*ha)); -+ ha->flags = flags; - ha->iface = i; - ha->addr = *addr; - INIT_LIST_HEAD(&ha->tqe.list); -@@ -136,18 +137,22 @@ void dhaad_insert_halist(struct ha_inter - return; - } - --static int dhaad_get_halist(struct ha_interface *i, int max, struct iovec *iov) -+static int dhaad_get_halist(struct ha_interface *i, uint16_t flags, -+ int max, struct iovec *iov) - { - struct list_head *lp; - int n = 0; - list_for_each(lp, &i->ha_list) { - struct home_agent *h; - h = list_entry(lp, struct home_agent, list); -- n++; -- iov[n].iov_len = sizeof(struct in6_addr); -- iov[n].iov_base = &h->addr; -- if (n >= max) -- break; -+ if (!(flags & MIP_DHREQ_FLAG_SUPPORT_MR) || -+ h->flags & ND_OPT_HAI_FLAG_SUPPORT_MR) { -+ n++; -+ iov[n].iov_len = sizeof(struct in6_addr); -+ iov[n].iov_base = &h->addr; -+ if (n >= max) -+ break; -+ } - } - return n; - } -@@ -177,8 +182,12 @@ static void dhaad_recv_req(const struct - - rph->mip_dhrep_id = rqh->mip_dhreq_id; - -+ if (rqh->mip_dhreq_flags_reserved & MIP_DHREQ_FLAG_SUPPORT_MR) -+ rph->mip_dhrep_flags_reserved = MIP_DHREP_FLAG_SUPPORT_MR; -+ - pthread_rwlock_rdlock(&ha_lock); -- iovlen = dhaad_get_halist(i, MAX_HOME_AGENTS, iov); -+ iovlen = dhaad_get_halist(i, rqh->mip_dhreq_flags_reserved, -+ MAX_HOME_AGENTS, iov); - icmp6_send(i->ifindex, 64, ha_addr, src, iov, iovlen + 1); - pthread_rwlock_unlock(&ha_lock); - free_iov_data(&iov[0], 1); -diff -r a7e20b0b5c43 src/dhaad_ha.h ---- a/src/dhaad_ha.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_ha.h Tue Jan 08 11:28:48 2008 +0100 -@@ -17,8 +17,8 @@ void dhaad_halist_iterate(struct ha_inte - int (* func)(int, void *, void *), void *arg); - #endif - --void dhaad_insert_halist(struct ha_interface *i, -- uint16_t key, uint16_t life_sec, -+void dhaad_insert_halist(struct ha_interface *i, uint16_t key, -+ uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo, - const struct in6_addr *lladdr); - -diff -r a7e20b0b5c43 src/dhaad_mn.c ---- a/src/dhaad_mn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_mn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -86,7 +86,8 @@ static int dhaad_append_candidate(struct - } - - static int dhaad_send_request(int oif, struct in6_addr *src, -- struct in6_addr *pfx, int plen) -+ struct in6_addr *pfx, int plen, -+ uint16_t flags) - { - struct mip_dhaad_req *ih; - struct iovec iov; -@@ -98,6 +99,7 @@ static int dhaad_send_request(int oif, s - return -1; - id = dhaad_id++; - ih->mip_dhreq_id = htons(id); -+ ih->mip_dhreq_flags_reserved = flags; - dhaad_gen_ha_anycast(&dst, pfx, plen); - icmp6_send(oif, 0, src, &dst, &iov, 1); - free_iov_data(&iov, 1); -@@ -121,7 +123,9 @@ static void dhaad_resend(struct tq_elem - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, -- hai->home_plen); -+ hai->home_plen, -+ hai->mob_rtr? -+ MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_resends++; - tsadd(t->dhaad_delay, t->dhaad_delay, t->dhaad_delay); - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); -@@ -139,11 +143,15 @@ static void _dhaad_start(struct home_add - t->dhaad_resends == DHAAD_RETRIES))) { - if (!(hai->home_block & HOME_ADDR_BLOCK)) - xfrm_block_hoa(hai); -+ if (hai->mob_rtr && !(hai->home_block & NEMO_RA_BLOCK)) -+ xfrm_block_ra(hai); - t->dhaad_resends = 0; - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, -- hai->home_plen); -+ hai->home_plen, -+ hai->mob_rtr? -+ MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_delay = INITIAL_DHAAD_TIMEOUT_TS; - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); - } -@@ -165,6 +173,8 @@ static void _dhaad_stop(struct home_addr - tsclear(t->dhaad_delay); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); -+ if (hai->home_block & NEMO_RA_BLOCK) -+ xfrm_unblock_ra(hai); - } - - void dhaad_stop(struct home_addr_info *hai) -@@ -245,6 +255,12 @@ static void dhaad_recv_rep(const struct - pthread_rwlock_unlock(&mn_lock); - return; - } -+ if (hai->mob_rtr && -+ !(rph->mip_dhrep_flags_reserved & MIP_DHREP_FLAG_SUPPORT_MR)) { -+ dbg("HA doesn't support MR\n"); -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - ha = (struct in6_addr *)(ih + 1); - - dhaad_flush_candidates(&hai->ha_list); -diff -r a7e20b0b5c43 src/gram.y ---- a/src/gram.y Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/gram.y Tue Jan 08 11:28:48 2008 +0100 -@@ -30,10 +30,10 @@ - #ifdef HAVE_CONFIG_H - #include <config.h> - #endif -+#include <stdio.h> - #include <pthread.h> - #include <netinet/in.h> - #include <net/if.h> --#include <stdio.h> - #include <string.h> - #include <stdarg.h> - #include <netinet/ip6mh.h> -@@ -54,8 +54,23 @@ struct net_iface ni = { - }; - - struct home_addr_info hai = { -- .ro_policies = LIST_HEAD_INIT(hai.ro_policies) -+ .ro_policies = LIST_HEAD_INIT(hai.ro_policies), -+ .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes) - }; -+ -+LIST_HEAD(prefixes); -+ -+int mv_prefixes(struct list_head *list) -+{ -+ struct list_head *l, *n; -+ int res = 0; -+ list_for_each_safe(l, n, &prefixes) { -+ list_del(l); -+ list_add_tail(l, list); -+ res++; -+ } -+ return res; -+} - - struct policy_bind_acl_entry *bae = NULL; - -@@ -165,6 +180,11 @@ static void uerror(const char *fmt, ...) - %token MNROUTERPROBETIMEOUT - %token MNDISCARDHAPARAMPROB - %token OPTIMISTICHANDOFF -+%token HOMEPREFIX -+%token HAACCEPTMOBRTR -+%token ISMOBRTR -+%token HASERVEDPREFIX -+%token MOBRTRUSEEXPLICITMODE - - %token INV_TOKEN - -@@ -282,6 +302,19 @@ topdef : MIP6ENTITY mip6entity ';' - { - conf.DefaultBindingAclPolicy = $2; - } -+ | HAACCEPTMOBRTR BOOL ';' -+ { -+ conf.HaAcceptMobRtr = $2; -+ } -+ | HASERVEDPREFIX prefixlistentry ';' -+ { -+ list_splice(&prefixes, -+ conf.nemo_ha_served_prefixes.prev); -+ } -+ | MOBRTRUSEEXPLICITMODE BOOL ';' -+ { -+ conf.MobRtrUseExplicitMode = $2; -+ } - | BINDINGACLPOLICY bindaclpolicy ';' - { - bae = NULL; -@@ -398,12 +431,16 @@ linksub : QSTRING '{' linkdefs '}' - memcpy(nhai, &hai, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&nhai->ro_policies); - INIT_LIST_HEAD(&nhai->ha_list.home_agents); -+ INIT_LIST_HEAD(&nhai->mob_net_prefixes); - nhai->ha_list.dhaad_id = -1; - list_splice(&hai.ro_policies, &nhai->ro_policies); -+ list_splice(&hai.mob_net_prefixes, -+ &nhai->mob_net_prefixes); - list_add_tail(&nhai->list, &conf.home_addrs); - - memset(&hai, 0, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&hai.ro_policies); -+ INIT_LIST_HEAD(&hai.mob_net_prefixes); - } - ; - -@@ -415,16 +452,35 @@ linkdef : HOMEAGENTADDRESS ADDR ';' - { - memcpy(&hai.ha_addr, &$2, sizeof(struct in6_addr)); - } -- | HOMEADDRESS ADDR '/' prefixlen ';' -- { -- hai.hoa.addr = $2; -- hai.plen = $4; -- } -+ | HOMEADDRESS homeaddress ';' - | USEALTCOA BOOL ';' - { - hai.altcoa = $2; - } - | MNROPOLICY mnropolicy ';' -+ | ISMOBRTR BOOL ';' -+ { -+ if ($2) -+ hai.mob_rtr = IP6_MH_BU_MR; -+ } -+ | HOMEPREFIX ADDR '/' prefixlen ';' -+ { -+ ipv6_addr_prefix(&hai.home_prefix, &$2, $4); -+ hai.home_plen = $4; -+ } -+ ; -+ -+homeaddress : homeaddrdef prefixlistsub -+ { -+ hai.mnp_count = mv_prefixes(&hai.mob_net_prefixes); -+ } -+ ; -+ -+homeaddrdef : ADDR '/' prefixlen -+ { -+ hai.hoa.addr = $1; -+ hai.plen = $3; -+ } - ; - - ipsecpolicyset : ipsechaaddrdef ipsecmnaddrdefs ipsecpolicydefs -@@ -639,7 +695,7 @@ bindaclpolval : BOOL - | NUMBER { $$ = $1; } - ; - --bindaclpolicy : ADDR bindaclpolval -+bindaclpolicy : ADDR prefixlistsub bindaclpolval - { - bae = malloc(sizeof(struct policy_bind_acl_entry)); - if (bae == NULL) { -@@ -649,7 +705,9 @@ bindaclpolicy : ADDR bindaclpolval - memset(bae, 0, sizeof(struct policy_bind_acl_entry)); - bae->hoa = $1; - bae->plen = 128; -- bae->bind_policy = $2; -+ INIT_LIST_HEAD(&bae->mob_net_prefixes); -+ bae->mnp_count = mv_prefixes(&bae->mob_net_prefixes); -+ bae->bind_policy = $3; - list_add_tail(&bae->list, &conf.bind_acl); - } - ; -@@ -664,4 +722,27 @@ prefixlen : NUMBER - } - ; - -+prefixlistsub : -+ | '(' prefixlist ')' -+ ; -+ -+prefixlist : prefixlistentry -+ | prefixlist ',' prefixlistentry -+ ; -+ -+prefixlistentry : ADDR '/' prefixlen -+ { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ fprintf(stderr, -+ "%s: out of memory\n", __FUNCTION__); -+ return -1; -+ } -+ memset(p, 0, sizeof(struct prefix_list_entry)); -+ p->ple_prefix = $1; -+ p->ple_plen = $3; -+ list_add_tail(&p->list, &prefixes); -+ } -+ ; - %% -diff -r a7e20b0b5c43 src/ha.c ---- a/src/ha.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ha.c Tue Jan 08 11:28:48 2008 +0100 -@@ -79,6 +79,7 @@ static void ha_recv_ra(const struct icmp - struct ha_interface *iface; - uint16_t pref = 0; - uint16_t life = 0; -+ uint16_t flags = 0; - - /* validity checks */ - if (hoplimit < 255 || !IN6_IS_ADDR_LINKLOCAL(src) || -@@ -120,6 +121,7 @@ static void ha_recv_ra(const struct icmp - hainfo = (struct nd_opt_homeagent_info *)opt; - pref = ntohs(hainfo->nd_opt_hai_preference); - life = ntohs(hainfo->nd_opt_hai_lifetime); -+ flags = hainfo->nd_opt_hai_flags_reserved; - } - optlen -= olen; - opt += olen; -@@ -129,7 +131,7 @@ static void ha_recv_ra(const struct icmp - if (pinfo[i]->nd_opt_pi_flags_reserved & - ND_OPT_PI_FLAG_RADDR) { - dhaad_insert_halist(iface, pref, life, -- pinfo[i], src); -+ flags, pinfo[i], src); - } - } - mpd_del_expired_pinfos(iface); -@@ -499,14 +501,53 @@ static int ha_vt_init(void) - } - #endif - -+ -+static void nemo_ha_del_mnp_routes(struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int ifindex, int all) -+{ -+ struct list_head *list; -+ list_for_each(list, old_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (!all && -+ prefix_list_find(new_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ NULL, 0, &p->ple_prefix, p->ple_plen, NULL); -+ } -+} -+ -+static int nemo_ha_add_mnp_routes(struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int ifindex, int all) -+{ -+ struct list_head *list; -+ list_for_each(list, new_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (!all && -+ prefix_list_find(old_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ NULL, 0, &p->ple_prefix, p->ple_plen, NULL) < 0) -+ return -1; -+ } -+ return 0; -+} -+ - struct home_tnl_ops_parm { - struct bcentry *bce; - int ba_status; -+ struct list_head mob_net_prefixes; - }; - - static int home_tnl_del(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - assert(old_if); - -@@ -514,17 +555,22 @@ static int home_tnl_del(int old_if, int - peer_addr = &p->bce->peer_addr; - coa = &p->bce->peer_addr; - old_coa = &p->bce->coa; -+ mnp = &p->bce->mob_net_prefixes; - - if (conf.UseMnHaIPsec) { - /* migrate */ - ha_ipsec_tnl_update(our_addr, peer_addr, -- coa, old_coa, p->bce->tunnel); -+ coa, old_coa, p->bce->tunnel, mnp); - /* delete SP entry */ -- ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel); -+ ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel, mnp); - } - /* delete HoA route */ - route_del(old_if, RT6_TABLE_MAIN, - IP6_RT_PRIO_MIP6_FWD, NULL, 0, peer_addr, 128, NULL); -+ -+ /* delete MNP routes */ -+ nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, old_if, 1); - /* update tunnel interface */ - p->bce->tunnel = new_if; - -@@ -534,17 +580,29 @@ static int home_tnl_add(int old_if, int - static int home_tnl_add(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - assert(new_if); - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; -- old_coa = &p->bce->peer_addr; -+ old_coa = IN6_ARE_ADDR_EQUAL(&p->bce->old_coa, &in6addr_any) ? -+ &p->bce->peer_addr : &p->bce->old_coa; -+ mnp = &p->mob_net_prefixes; - - /* update tunnel interface */ - p->bce->tunnel = new_if; - -+ /* add MNP routes */ -+ if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, new_if, 1) < 0) { -+ if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) -+ p->ba_status = IP6_MH_BAS_INVAL_PRFX; -+ else -+ p->ba_status = IP6_MH_BAS_FWDING_FAILED; -+ goto err; -+ } - /* add HoA route */ - if (route_add(new_if, RT6_TABLE_MAIN, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, -@@ -555,13 +613,13 @@ static int home_tnl_add(int old_if, int - /* add SP entry */ - if (conf.UseMnHaIPsec) { - if (ha_ipsec_tnl_pol_add(our_addr, peer_addr, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - /* migrate */ - if (ha_ipsec_tnl_update(our_addr, peer_addr, coa, old_coa, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } -@@ -578,17 +636,51 @@ static int home_tnl_chg(int old_if, int - - if (old_if == new_if) { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; - old_coa = &p->bce->old_coa; -+ mnp = &p->mob_net_prefixes; -+ -+ /* if interface hasn't changed, at least check if the -+ MR's MNPs have changed */ -+ if (!prefix_list_cmp(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes)) { -+ -+ /* Remove old policies and install new ones */ -+ if (conf.UseMnHaIPsec) { -+ ha_ipsec_mnp_pol_del(our_addr, peer_addr, -+ &p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ p->bce->tunnel); -+ ha_ipsec_mnp_pol_add(our_addr, peer_addr, -+ &p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ p->bce->tunnel); -+ } -+ -+ /* Do the same for routes */ -+ nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ old_if, 0); -+ if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ new_if, 0) < 0) { -+ if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) -+ p->ba_status = IP6_MH_BAS_INVAL_PRFX; -+ else -+ p->ba_status = IP6_MH_BAS_FWDING_FAILED; -+ return -1; -+ } -+ } - - /* migrate */ - if (conf.UseMnHaIPsec && - !IN6_ARE_ADDR_EQUAL(old_coa, coa) && - ha_ipsec_tnl_update(our_addr, peer_addr, coa, old_coa, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - return -1; - } - } else { -@@ -632,6 +724,61 @@ static void home_cleanup(struct bcentry - if (conf.UseMnHaIPsec) { - ha_mn_ipsec_pol_mod(&bce->our_addr, &bce->peer_addr); - } -+} -+ -+ -+static int ha_extract_mnps(const struct ip6_mh_binding_update *bu, -+ const struct mh_options *opts, -+ struct list_head *mob_net_prefixes) -+{ -+ struct ip6_mh_opt_mob_net_prefix *op; -+ int prefix_count = 0; -+ for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); -+ op != NULL; -+ op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ prefix_list_free(mob_net_prefixes); -+ return -1; -+ } -+ memset(p, 0, sizeof(struct prefix_list_entry)); -+ p->ple_plen = op->ip6mnp_prefix_len; -+ p->ple_prefix = op->ip6mnp_prefix; -+ list_add_tail(&p->list, mob_net_prefixes); -+ prefix_count++; -+ } -+ return prefix_count; -+} -+ -+static int ha_get_mnps(const struct in6_addr *hoa, -+ struct list_head *mob_net_prefixes) -+{ -+ struct nd_opt_prefix_info *mnps; -+ int mnp_count = conf.pmgr.get_mnp_count(hoa); -+ int i; -+ -+ if (mnp_count <= 0) -+ return mnp_count; -+ -+ mnps = calloc(mnp_count, sizeof(struct nd_opt_prefix_info)); -+ if (mnps == NULL) -+ return -1; -+ -+ mnp_count = conf.pmgr.get_mnps(hoa, mnp_count, mnps); -+ for (i = 0; i < mnp_count; i++) { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ prefix_list_free(mob_net_prefixes); -+ free(mnps); -+ return -1; -+ } -+ p->pinfo = *(mnps + i); -+ list_add_tail(&p->list, mob_net_prefixes); -+ } -+ free(mnps); -+ return mnp_count; - } - - struct ha_recv_bu_args { -@@ -684,8 +831,9 @@ restart: - bce = bcache_get(out.src, out.dst); - if (bce) { - if (bce->type != BCE_NONCE_BLOCK) { -- if (!(bce->flags & IP6_MH_BU_HOME)) { -- /* H-bit mismatch, flags changed */ -+ /* H-bit or R-bit mismatch, flags changed */ -+ if ((bce->flags ^ bu_flags) & -+ (IP6_MH_BU_HOME | IP6_MH_BU_MR)) { - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_REG_NOT_ALLOWED; -@@ -733,9 +881,15 @@ restart: - } - if ((status = mpd_prefix_check(out.src, out.dst, - &lft, &home_ifindex, new)) < 0) { -- /* not home agent for this subnet */ -- status = IP6_MH_BAS_NOT_HOME_SUBNET; -- goto send_nack; -+ if (!(bu_flags & IP6_MH_BU_MR) || -+ home_ifindex == 0 || -+ !prefix_list_find(&conf.nemo_ha_served_prefixes, -+ out.dst, 0)) { -+ /* not home agent for this subnet */ -+ status = IP6_MH_BAS_NOT_HOME_SUBNET; -+ goto send_nack; -+ } -+ status = IP6_MH_BAS_ACCEPTED; - } - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, arg->bu, arg->len); -@@ -787,6 +941,25 @@ restart: - } - new = 1; - } -+ INIT_LIST_HEAD(&p.mob_net_prefixes); -+ if (bu_flags & IP6_MH_BU_MR && tsisset(lft)) { -+ if (mh_opt(&arg->bu->ip6mhbu_hdr, -+ &arg->mh_opts, IP6_MHOPT_MOB_NET_PRFX) != NULL) { -+ if (ha_extract_mnps(arg->bu, -+ &arg->mh_opts, -+ &p.mob_net_prefixes) < 0) { -+ status = IP6_MH_BAS_INVAL_PRFX; -+ goto send_nack; -+ } -+ bce->nemo_type = BCE_NEMO_EXPLICIT; -+ } else if (ha_get_mnps(out.dst, &p.mob_net_prefixes) > 0) { -+ bce->nemo_type = BCE_NEMO_IMPLICIT; -+ } else { -+ /* Todo: dynamic routing */ -+ status = IP6_MH_BAS_FWDING_FAILED; -+ goto send_nack; -+ } -+ } - p.bce = bce; - p.ba_status = status; - bce->seqno = seqno; -@@ -801,6 +974,9 @@ restart: - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -+ /* Now save the MNP list in the BCE */ -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ - bce->cleanup = home_cleanup; - - if (route_add(bce->link, RT6_TABLE_MIP6, -@@ -829,6 +1005,10 @@ restart: - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -+ /* Now update the MNP list in the BCE */ -+ prefix_list_free(&bce->mob_net_prefixes); -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ - bcache_update_expire(bce); - } - /* bce is always valid here */ -@@ -855,6 +1035,9 @@ restart: - * have a binding before sending this Binding Update, - * discard the connections to the home address. */ - } -+ if (status < IP6_MH_BAS_UNSPECIFIED && bu_flags & IP6_MH_BU_MR) -+ ba_flags |= IP6_MH_BA_MR; -+ - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba(&out, status, ba_flags, seqno, &lft, NULL, iif); - if (new && tsisset(lft)) -diff -r a7e20b0b5c43 src/ha.h ---- a/src/ha.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ha.h Tue Jan 08 11:28:48 2008 +0100 -@@ -23,6 +23,7 @@ struct home_agent { - struct list_head list; - struct in6_addr addr; - uint16_t preference; -+ uint16_t flags; - struct timespec lifetime; - struct ha_interface *iface; - struct tq_elem tqe; -diff -r a7e20b0b5c43 src/ipsec.c ---- a/src/ipsec.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ipsec.c Tue Jan 08 11:28:48 2008 +0100 -@@ -81,7 +81,9 @@ static void _set_sp(struct xfrm_userpoli - struct ipsec_policy_entry *e, - int dir, - const struct in6_addr *in6_dst, -+ int dst_len, - const struct in6_addr *in6_src, -+ int src_len, - int ifindex, - int nodetype) - { -@@ -97,10 +99,13 @@ static void _set_sp(struct xfrm_userpoli - sp->action = e->action; - memcpy(&sp->sel.saddr.a6, in6_src, sizeof(sp->sel.saddr.a6)); - memcpy(&sp->sel.daddr.a6, in6_dst, sizeof(sp->sel.daddr.a6)); -- sp->sel.prefixlen_s = IN6_ARE_ADDR_EQUAL(in6_src, &in6addr_any) ? -- 0 : 128; -- sp->sel.prefixlen_d = IN6_ARE_ADDR_EQUAL(in6_dst, &in6addr_any) ? -- 0 : 128; -+ sp->sel.prefixlen_s = src_len; -+ if (!src_len && (!IN6_ARE_ADDR_EQUAL(in6_src, &in6addr_any))) -+ sp->sel.prefixlen_s = 128; -+ sp->sel.prefixlen_d = dst_len; -+ if (!dst_len && (!IN6_ARE_ADDR_EQUAL(in6_dst, &in6addr_any))) -+ sp->sel.prefixlen_d = 128; -+ - sp->sel.ifindex = 0; - - switch (e->type) { -@@ -347,6 +352,7 @@ struct ha_ipsec_tnl_update { - int tunnel; - struct in6_addr coa; - struct in6_addr old_coa; -+ struct list_head *mnp; - }; - - /* -@@ -365,6 +371,7 @@ static int _ha_tnl_update(const struct i - int ifindex; - const struct in6_addr *oldcoa, *newcoa; - const struct in6_addr *peer_addr = hoa; -+ struct list_head *mnp; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; -@@ -399,13 +406,14 @@ static int _ha_tnl_update(const struct i - oldcoa = IN6_ARE_ADDR_EQUAL(&info->old_coa, &in6addr_any) ? - peer_addr : &info->old_coa; - newcoa = &info->coa; -+ mnp = info->mnp; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for INBOUND policy failed\n"); -@@ -415,7 +423,7 @@ static int _ha_tnl_update(const struct i - /* forward */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for FORWARD policy failed\n"); -@@ -425,11 +433,54 @@ static int _ha_tnl_update(const struct i - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; -+ } -+ -+ /* Mobile router case */ -+ if ( (e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) -+ { -+ struct list_head *list; -+ -+ /* We have to modify rules to protect traffic to and from MNP's, the same way as HoA */ -+ list_for_each(list, mnp) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ -+ /* inbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for INBOUND policy failed\n"); -+ goto end; -+ } -+ -+ /* forward */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for FORWARD policy failed\n"); -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for OUTBOUND policy failed\n"); -+ goto end; -+ } -+ } - } - - end: -@@ -440,13 +491,176 @@ int ha_ipsec_tnl_update(const struct in6 - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { - struct ha_ipsec_tnl_update b; - b.coa = *coa; - b.old_coa = *old_coa; - b.tunnel = tunnel; -+ b.mnp = mnp; - return ipsec_policy_apply(haaddr, hoa, _ha_tnl_update, &b); -+} -+ -+struct ha_ipsec_mnp_update { -+ int tunnel; -+ struct list_head *old_mnps; -+ struct list_head *new_mnps; -+}; -+ -+/* -+ * Add/Delete MNP IPsec Security Policy -+ */ -+static int _ha_mnp_pol_mod(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg, -+ int add) -+{ -+ int err = 0; -+ struct ha_ipsec_mnp_update *parms = (struct ha_ipsec_mnp_update *)arg; -+ struct xfrm_userpolicy_info sp; -+ struct xfrm_user_tmpl tmpl; -+ u_int16_t ipsec_proto; -+ struct list_head *list, *old_mnps, *new_mnps, *main_mnps, *ref_mnps; -+ int ifindex; -+ -+ assert(haaddr); -+ assert(hoa); -+ assert(e); -+ assert(arg); -+ -+ ifindex = parms->tunnel; -+ old_mnps = parms->old_mnps; -+ new_mnps = parms->new_mnps; -+ -+ if (e->type != IPSEC_POLICY_TYPE_TUNNELPAYLOAD) -+ goto end; -+ -+ /* XXX Limitation: Single IPsec proto can only be applied */ -+ if (ipsec_use_esp(e)) -+ ipsec_proto = IPPROTO_ESP; -+ else if (ipsec_use_ah(e)) -+ ipsec_proto = IPPROTO_AH; -+ else if (ipsec_use_ipcomp(e)) -+ ipsec_proto = IPPROTO_COMP; -+ else { -+ dbg("invalid ipsec proto\n"); -+ goto end; -+ } -+ -+ /* Reverse the search logic on lists based on expected -+ * action (add/del) */ -+ main_mnps = add ? new_mnps : old_mnps; -+ ref_mnps = add ? old_mnps : new_mnps; -+ -+ if (main_mnps == NULL) -+ goto end; -+ -+ /* We have to add/delete rules to protect traffic to -+ and from MNP's, the same way as HoA */ -+ list_for_each(list, main_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ -+ if (ref_mnps && -+ prefix_list_find(ref_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ -+ /* inbound */ -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* forward */ -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying FORWARD policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying OUTBOUND policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ } -+ -+ end: -+ return err; -+} -+ -+ -+/* -+ * Add SP entry (for MNP on HA) -+ * -+ * NOTE: -+ * - This is a hook routine to ipsec_policy_apply() -+ */ -+static int _ha_mnp_pol_add(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg) -+{ -+ return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 1); -+} -+ -+int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel) -+{ -+ struct ha_ipsec_mnp_update b; -+ b.tunnel = tunnel; -+ b.old_mnps = old_mnps; -+ b.new_mnps = new_mnps; -+ -+ return ipsec_policy_apply(our_addr, peer_addr, _ha_mnp_pol_add, &b); -+} -+ -+/* -+ * Delete SP entry (for MNP on HA) -+ * -+ * NOTE: -+ * - This is a hook routine to ipsec_policy_apply() -+ */ -+static int _ha_mnp_pol_del(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg) -+{ -+ return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 0); -+} -+ -+int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel) -+{ -+ struct ha_ipsec_mnp_update b; -+ b.tunnel = tunnel; -+ b.old_mnps = old_mnps; -+ b.new_mnps = new_mnps; -+ -+ return ipsec_policy_apply(our_addr, peer_addr, -+ _ha_mnp_pol_del, &b); - } - - /* -@@ -459,7 +673,9 @@ static int _ha_tnl_pol_mod(const struct - int add) - { - int err = 0; -- int ifindex = *(int *)arg; -+ struct ha_ipsec_tnl_update *parms = (struct ha_ipsec_tnl_update *)arg; -+ int ifindex; -+ struct list_head *mnp; - struct xfrm_userpolicy_info sp; - struct xfrm_user_tmpl tmpl; - u_int16_t ipsec_proto; -@@ -468,6 +684,9 @@ static int _ha_tnl_pol_mod(const struct - assert(hoa); - assert(e); - assert(arg); -+ -+ ifindex = parms->tunnel; -+ mnp = parms->mnp; - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: -@@ -493,7 +712,7 @@ static int _ha_tnl_pol_mod(const struct - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ -- _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -504,7 +723,7 @@ static int _ha_tnl_pol_mod(const struct - } - - /* forward */ -- _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -515,7 +734,7 @@ static int _ha_tnl_pol_mod(const struct - } - - /* outbound */ -- _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); -@@ -525,6 +744,16 @@ static int _ha_tnl_pol_mod(const struct - goto end; - } - -+ /* Mobile Router case */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) { -+ struct ha_ipsec_mnp_update b; -+ -+ b.tunnel = ifindex; -+ b.old_mnps = add ? NULL : mnp; -+ b.new_mnps = add ? mnp : NULL; -+ -+ err = _ha_mnp_pol_mod(haaddr, hoa, e, (void *)&b, add); -+ } - end: - return err; - } -@@ -545,11 +774,14 @@ static int _ha_tnl_pol_add(const struct - - int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { -- int t = tunnel; -+ struct ha_ipsec_tnl_update b; -+ b.tunnel = tunnel; -+ b.mnp = mnp; - -- return ipsec_policy_apply(our_addr, peer_addr, _ha_tnl_pol_add, &t); -+ return ipsec_policy_apply(our_addr, peer_addr, _ha_tnl_pol_add, &b); - } - - /* -@@ -568,12 +800,15 @@ static int _ha_tnl_pol_del(const struct - - int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { -- int t = tunnel; -+ struct ha_ipsec_tnl_update b; -+ b.tunnel = tunnel; -+ b.mnp = mnp; - - return ipsec_policy_apply(our_addr, peer_addr, -- _ha_tnl_pol_del, &t); -+ _ha_tnl_pol_del, &b); - } - - /* -@@ -631,7 +866,7 @@ static int _mn_tnl_update(const struct i - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); -@@ -641,7 +876,7 @@ static int _mn_tnl_update(const struct i - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); -@@ -657,7 +892,7 @@ static int _mn_tnl_update(const struct i - /* template */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - /* additional settings */ - sp.priority = MIP6_PRIO_RO_SIG_IPSEC; -@@ -666,6 +901,52 @@ static int _mn_tnl_update(const struct i - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (2) failed\n"); - goto end; -+ } -+ } -+ -+ /* -+ * If we are a Mobile Router, we also need to migrate IN/FWD/OUT rules -+ * for forwarded traffic in case we have TUNNELPAYLOAD protection. -+ */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) -+ { -+ struct list_head *mnp; -+ -+ list_for_each(mnp, &bule->home->mob_net_prefixes) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(mnp, struct prefix_list_entry, list); -+ -+ /* outbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for OUTBOUND policy failed\n"); -+ goto end; -+ } -+ -+ /* forwarded */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for INBOUND policy (1) failed\n"); -+ goto end; -+ } -+ -+ /* inbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for INBOUND policy (1) failed\n"); -+ goto end; -+ } -+ - } - } - -@@ -724,7 +1005,7 @@ static int _mn_tnl_pol_mod(const struct - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); -@@ -735,7 +1016,7 @@ static int _mn_tnl_pol_mod(const struct - } - - /* outbound */ -- _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -758,6 +1039,54 @@ static int _mn_tnl_pol_mod(const struct - mn_ipsec_recv_bu_tnl_pol_del(bule, ifindex, e); - /* restore wildrecv SPD entry for processing BU */ - err = cn_wildrecv_bu_pol_add(); -+ } -+ } -+ -+ /* -+ * If we are a Mobile Router, we also need to create IN/FWD/OUT rules -+ * for forwarded traffic in case we have TUNNELPAYLOAD protection. -+ */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) -+ { -+ struct list_head *mnp; -+ -+ list_for_each(mnp, &bule->home->mob_net_prefixes) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(mnp, struct prefix_list_entry, list); -+ -+ /* inbound */ -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* forward */ -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying OUTBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } - } - } - -diff -r a7e20b0b5c43 src/ipsec.h ---- a/src/ipsec.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ipsec.h Tue Jan 08 11:28:48 2008 +0100 -@@ -82,15 +82,30 @@ int ha_ipsec_tnl_update(const struct in6 - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); -+ -+int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel); -+ -+int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel); - - int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); - - int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); - - int mn_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, -diff -r a7e20b0b5c43 src/mh.c ---- a/src/mh.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mh.c Tue Jan 08 11:28:48 2008 +0100 -@@ -51,6 +51,7 @@ - #include "conf.h" - #include "bcache.h" - #include "keygen.h" -+#include "prefix.h" - - #define MH_DEBUG_LEVEL 1 - -@@ -75,6 +76,7 @@ int mh_opts_dup_ok[] = { - 0, /* Alternate CoA */ - 0, /* Nonce Index */ - 0, /* Binding Auth Data */ -+ 1, /* Mobile Network Prefix */ - }; - - #define __MH_SENTINEL (IP6_MH_TYPE_MAX + 1) -@@ -401,6 +403,46 @@ static int create_opt_pad(struct iovec * - return 0; - } - -+int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, -+ struct list_head *mnps) -+{ -+ int optlen = (mnp_count * sizeof(struct ip6_mh_opt_mob_net_prefix) + -+ (mnp_count - 1) * sizeof(_pad4)); -+ struct list_head *l; -+ int i = 0; -+ 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; -+ -+ list_for_each(l, mnps) { -+ struct prefix_list_entry *p; -+ struct ip6_mh_opt_mob_net_prefix *mnp; -+ -+ p = list_entry(l, struct prefix_list_entry, list); -+ mnp = (struct ip6_mh_opt_mob_net_prefix *)data; -+ -+ mnp->ip6mnp_type = IP6_MHOPT_MOB_NET_PRFX; -+ mnp->ip6mnp_len = 18; -+ mnp->ip6mnp_prefix_len = p->ple_plen; -+ mnp->ip6mnp_prefix = p->ple_prefix; -+ -+ data += sizeof(struct ip6_mh_opt_mob_net_prefix); -+ -+ /* do internal padding here, so one iovec for MNPs is enough */ -+ if (++i < mnp_count) { -+ memcpy(data, _pad4, sizeof(_pad4)); -+ data += sizeof(_pad4); -+ } -+ } -+ return 0; -+} -+ - static size_t mh_length(struct iovec *vec, int count) - { - size_t len = 0; -@@ -441,6 +483,9 @@ static int mh_try_pad(const struct iovec - break; - case IP6_MHOPT_BAUTH: - pad = optpad(8, 2, len); /* 8n+2 */ -+ break; -+ case IP6_MHOPT_MOB_NET_PRFX: -+ pad = optpad(8, 4, len); /* 8n+4 */ - break; - } - if (pad > 0) { -@@ -694,6 +739,8 @@ static int mh_opt_len_chk(uint8_t type, - return len != sizeof(struct ip6_mh_opt_nonce_index); - case IP6_MHOPT_BAUTH: - return len != sizeof(struct ip6_mh_opt_auth_data); -+ case IP6_MHOPT_MOB_NET_PRFX: -+ return len != sizeof(struct ip6_mh_opt_mob_net_prefix); - case IP6_MHOPT_PADN: - default: - return 0; -diff -r a7e20b0b5c43 src/mh.h ---- a/src/mh.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mh.h Tue Jan 08 11:28:48 2008 +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_BAUTH -+#define IP6_MHOPT_MAX IP6_MHOPT_MOB_NET_PRFX - - struct in6_addr_bundle { - struct in6_addr *src; -@@ -74,6 +74,11 @@ int mh_create_opt_nonce_index(struct iov - - int mh_create_opt_auth_data(struct iovec *iov); - -+struct list_head; -+ -+int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, -+ struct list_head *mnps); -+ - static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) - { -diff -r a7e20b0b5c43 src/mn.c ---- a/src/mn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -326,7 +326,17 @@ static int mn_send_bu_msg(struct bulentr - free_iov_data(iov, iov_ind); - return -ENOMEM; - } -- if (!(bule->flags & IP6_MH_BU_HOME)) { -+ if (bule->flags & IP6_MH_BU_HOME) { -+ struct home_addr_info *hai = bule->home; -+ 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++], -+ hai->mnp_count, -+ &hai->mob_net_prefixes) < 0) { -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } -+ } else { - if (mh_create_opt_nonce_index(&iov[iov_ind++], bule->rr.ho_ni, - bule->rr.co_ni) || - mh_create_opt_auth_data(&iov[iov_ind++])) { -@@ -616,6 +626,34 @@ static int mv_hoa(struct ifaddrmsg *ifa, - return 0; - } - -+int nemo_mr_tnl_routes_add(struct home_addr_info *hai, int ifindex) -+{ -+ struct list_head *l; -+ struct prefix_list_entry *pe; -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, NULL) < 0) { -+ pe = p; -+ goto undo; -+ } -+ } -+ return 0; -+undo: -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static int mn_tnl_state_add(struct home_addr_info *hai, int ifindex, int all) - { - int err = 0; -@@ -628,12 +666,31 @@ static int mn_tnl_state_add(struct home_ - mn_ro_pol_del(hai, ifindex, all); - } - } -+ if (hai->mob_rtr && -+ (err = nemo_mr_tnl_routes_add(hai, ifindex)) < 0) { -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ &hai->hoa.addr, 128, &in6addr_any, 0, NULL); -+ mn_ro_pol_del(hai, ifindex, all); -+ } - return err; -+} -+ -+static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, int ifindex) -+{ -+ struct list_head *l; -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); -+ } - } - - static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, int all) - { - if (hai->home_reg_status != HOME_REG_NONE) { -+ if (hai->mob_rtr) -+ nemo_mr_tnl_routes_del(hai, ifindex); - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); -@@ -674,7 +731,8 @@ static int process_first_home_bu(struct - { - int err = 0; - bule->type = BUL_ENTRY; -- bule->flags = IP6_MH_BU_HOME | IP6_MH_BU_ACK | hai->lladdr_comp; -+ bule->flags = (IP6_MH_BU_HOME | IP6_MH_BU_ACK | -+ hai->lladdr_comp | hai->mob_rtr); - bule->coa_changed = -1; - bule->coa = hai->primary_coa.addr; - bule->if_coa = hai->primary_coa.iif; -@@ -1084,6 +1142,18 @@ static void mn_recv_ba(const struct ip6_ - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - struct ip6_mh_opt_refresh_advice *bra; -+ -+ if (bule->flags & IP6_MH_BU_MR && -+ !(ba->ip6mhba_flags & IP6_MH_BA_MR)) { -+ if (hai->use_dhaad) { -+ mn_change_ha(hai); -+ } else { -+ int one = 1; -+ bul_iterate(&hai->bul, mn_dereg, &one); -+ } -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - if (!tsisset(ba_lifetime)) { - int type = FLUSH_FAILED; - mn_dereg_home(hai); -@@ -1251,12 +1321,73 @@ static int flag_hoa(struct ifaddrmsg *if - return 0; - } - -+static void nemo_mr_rules_del(struct home_addr_info *hinfo) -+{ -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ } -+} -+ -+static int nemo_mr_rules_add(struct home_addr_info *hinfo) -+{ -+ struct prefix_list_entry *pe = NULL; -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (rule_add(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0) < 0) { -+ pe = p; -+ goto undo; -+ } -+ if (rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ pe = p; -+ goto undo; -+ } -+ } -+ return 0; -+undo: -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static void clean_home_addr_info(struct home_addr_info *hai) - { - struct flag_hoa_args arg; - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - - list_del(&hai->list); -+ if (hai->mob_rtr) -+ nemo_mr_rules_del(hai); - arg.target = hai; - arg.flag = 0; - addr_do(&hai->hoa.addr, plen, -@@ -1310,13 +1441,23 @@ static struct home_addr_info *hai_copy(s - - if (pthread_mutex_init(&hai->ha_list.c_lock, NULL)) - goto undo; -+ -+ INIT_LIST_HEAD(&hai->mob_net_prefixes); -+ if (hai->mob_rtr && -+ prefix_list_copy(&conf_hai->mob_net_prefixes, -+ &hai->mob_net_prefixes) < 0) -+ goto mutex_undo; -+ - INIT_LIST_HEAD(&hai->ro_policies); - if (rpl_copy(&conf_hai->ro_policies, &hai->ro_policies) < 0) -- goto mutex_undo; -+ goto mnp_undo; -+ - INIT_LIST_HEAD(&hai->ha_list.tqe.list); - INIT_LIST_HEAD(&hai->ha_list.home_agents); - } - return hai; -+mnp_undo: -+ prefix_list_free(&hai->mob_net_prefixes); - mutex_undo: - pthread_mutex_destroy(&hai->ha_list.c_lock); - undo: -@@ -1337,6 +1478,15 @@ static int conf_home_addr_info(struct ho - if ((hai = hai_copy(conf_hai)) == NULL) - goto err; - -+ if (hai->mob_rtr) { -+ MDBG("is Mobile Router\n"); -+ list_for_each(list, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ MDBG("Mobile Network Prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", -+ NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ } -+ } - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - hai->use_dhaad = 1; - } else { -@@ -1379,6 +1529,9 @@ static int conf_home_addr_info(struct ho - - if (addr_do(&hai->hoa.addr, 128, - hai->if_tunnel, &arg, flag_hoa) < 0) { -+ goto clean_err; -+ } -+ if (hai->mob_rtr && nemo_mr_rules_add(hai) < 0) { - goto clean_err; - } - hai->at_home = hai->hoa.iif == hai->if_home; -diff -r a7e20b0b5c43 src/mn.h ---- a/src/mn.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mn.h Tue Jan 08 11:28:48 2008 +0100 -@@ -45,9 +45,11 @@ struct ha_candidate_list { - pthread_mutex_t c_lock; - }; - --#define HOME_LINK_BLOCK 0x1 --#define HOME_ADDR_BLOCK 0x2 --#define HOME_ADDR_RULE_BLOCK 0x4 -+#define HOME_LINK_BLOCK 0x01 -+#define HOME_ADDR_BLOCK 0x02 -+#define HOME_ADDR_RULE_BLOCK 0x04 -+#define NEMO_RA_BLOCK 0x08 -+#define NEMO_FWD_BLOCK 0x10 - - struct mn_addr { - struct in6_addr addr; -@@ -84,7 +86,10 @@ struct home_addr_info { - int if_block; - short hwalen; - uint8_t altcoa; -+ uint16_t mob_rtr; - char name[IF_NAMESIZE]; -+ int mnp_count; -+ struct list_head mob_net_prefixes; - }; - - enum { -diff -r a7e20b0b5c43 src/movement.c ---- a/src/movement.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/movement.c Tue Jan 08 11:28:48 2008 +0100 -@@ -78,6 +78,7 @@ static int conf_default_rs = 3; - static int conf_default_rs = 3; - static int conf_default_rs_ival = 4; - -+static int conf_forwarding = 0; - static int conf_autoconf = 1; - static int conf_ra_defrtr = 0; - static int conf_rs = 0; -@@ -177,6 +178,12 @@ static void __md_free_router(struct md_r - - route_del(rtr->ifindex, RT_TABLE_MAIN, 0, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); -+ -+ /* delete default route for the packets coming from the -+ * Mobile Network -+ */ -+ route_del(rtr->ifindex, RT6_TABLE_MIP6, 0, -+ &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - } - list_for_each_safe(l, n, &rtr->prefixes) { - struct prefix_list_entry *p; -@@ -231,8 +238,31 @@ static void md_expire_coa(struct md_inet - list_add_tail(&coa->list, &iface->expired_coas); - } - -+static void md_reset_egress_forward(void) -+{ -+ struct list_head *l; -+ int forward = 0;; -+ -+ if (list_empty(&ifaces)) -+ return; -+ -+ list_for_each(l, &ifaces) { -+ struct md_inet6_iface *i; -+ i = list_entry(l, struct md_inet6_iface, list); -+ forward |= i->home_link; -+ } -+ list_for_each(l, &ifaces) { -+ struct md_inet6_iface *i; -+ i = list_entry(l, struct md_inet6_iface, list); -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, -+ i->name, forward); -+ } -+} -+ - static void md_reset_home_link(struct md_inet6_iface *i) - { -+ if (i->home_link) -+ md_reset_egress_forward(); - i->home_link = 0; - i->ll_dad_unsafe = 0; - } -@@ -648,6 +678,8 @@ md_create_inet6_iface(struct ifinfomsg * - - static void iface_proc_entries_init(struct md_inet6_iface *iface) - { -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, -+ conf_forwarding); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - conf_autoconf); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, conf_ra_defrtr); -@@ -878,6 +910,8 @@ static void md_check_home_link(struct md - ll_dad_unsafe |= hai->lladdr_comp; - } - } -+ if (i->home_link != home_link) -+ md_reset_egress_forward(); - i->home_link = home_link; - i->ll_dad_unsafe = ll_dad_unsafe; - } -@@ -1189,6 +1223,11 @@ static void md_update_router_stats(struc - RTF_DEFAULT|RTF_ADDRCONF, 1024, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - -+ /* default route for the packet coming from the Mobile Network */ -+ route_add(rtr->ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); -+ - list_for_each(list, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); -@@ -1737,6 +1776,8 @@ static void iface_default_proc_entries_c - - static void iface_proc_entries_cleanup(struct md_inet6_iface *iface) - { -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, -+ iface->devconf[DEVCONF_FORWARDING]); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - iface->devconf[DEVCONF_AUTOCONF]); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, -diff -r a7e20b0b5c43 src/ndisc.c ---- a/src/ndisc.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ndisc.c Tue Jan 08 11:28:48 2008 +0100 -@@ -106,7 +106,7 @@ int proxy_nd_start(int ifindex, struct i - { - struct in6_addr lladdr; - int err; -- int nd_flags = 0; -+ int nd_flags = bu_flags&IP6_MH_BU_MR ? NTF_ROUTER : 0; - - err = pneigh_add(ifindex, nd_flags, target); - -@@ -117,7 +117,9 @@ int proxy_nd_start(int ifindex, struct i - pneigh_del(ifindex, target); - } - if (!err) { -- uint32_t na_flags = ND_NA_FLAG_OVERRIDE; -+ uint32_t na_flags = (ND_NA_FLAG_OVERRIDE | -+ nd_flags ? ND_NA_FLAG_ROUTER : 0); -+ - ndisc_send_na(ifindex, src, &in6addr_all_nodes_mc, - target, na_flags); - -diff -r a7e20b0b5c43 src/policy.c ---- a/src/policy.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/policy.c Tue Jan 08 11:28:48 2008 +0100 -@@ -107,6 +107,23 @@ int default_max_binding_life(const struc - return 0; - } - -+static inline int -+policy_check_mob_net_prefix(const struct policy_bind_acl_entry *acl, -+ const struct ip6_mh_binding_update *bu, -+ const struct mh_options *opts) -+{ -+ struct ip6_mh_opt_mob_net_prefix *op; -+ for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); -+ op != NULL; -+ op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { -+ if (!prefix_list_get(&acl->mob_net_prefixes, -+ &op->ip6mnp_prefix, -+ op->ip6mnp_prefix_len)) -+ return IP6_MH_BAS_NOT_AUTH_FOR_PRFX; -+ } -+ return IP6_MH_BAS_ACCEPTED; -+} -+ - /** - * default_discard_binding - check for discard policy - * @remote_hoa: remote MN's home address -@@ -127,10 +144,20 @@ int default_discard_binding(const struct - int ret = def_bind_policy; - struct policy_bind_acl_entry *acl; - -+ if (bu->ip6mhbu_flags & IP6_MH_BU_MR && !conf.HaAcceptMobRtr) -+ return IP6_MH_BAS_MR_OP_NOT_PERMITTED; -+ - pthread_rwlock_rdlock(&policy_lock); - acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa); - if (acl != NULL) { - ret = acl->bind_policy; -+ if (ret < IP6_MH_BAS_UNSPECIFIED && -+ bu->ip6mhbu_flags & IP6_MH_BU_MR) { -+ struct mh_options opts; -+ mh_opt_parse(&bu->ip6mhbu_hdr, len, -+ sizeof(*bu), &opts); -+ ret = policy_check_mob_net_prefix(acl, bu, &opts); -+ } - } - pthread_rwlock_unlock(&policy_lock); - return ret; -@@ -227,6 +254,42 @@ int default_best_ro_coa(const struct in6 - return 0; - } - -+int default_get_mnp_count(const struct in6_addr *hoa) -+{ -+ int ret = 0; -+ struct policy_bind_acl_entry *acl; -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ if (acl != NULL) -+ ret = acl->mnp_count; -+ pthread_rwlock_unlock(&policy_lock); -+ return ret; -+ -+} -+ -+int default_get_mnps(const struct in6_addr *hoa, -+ const int mnp_count, -+ struct nd_opt_prefix_info *mnps) -+{ -+ int i = 0; -+ struct policy_bind_acl_entry *acl; -+ -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ if (acl != NULL) { -+ struct list_head *l; -+ list_for_each(l, &acl->mob_net_prefixes) { -+ struct prefix_list_entry *e; -+ if (i >= mnp_count) -+ break; -+ e = list_entry(l, struct prefix_list_entry, list); -+ mnps[i++] = e->pinfo; -+ } -+ } -+ pthread_rwlock_unlock(&policy_lock); -+ return i; -+} -+ - static int policy_bind_acle_cleanup(void *data, void *arg) - { - struct policy_bind_acl_entry *acl = data; -diff -r a7e20b0b5c43 src/policy.h ---- a/src/policy.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/policy.h Tue Jan 08 11:28:48 2008 +0100 -@@ -10,12 +10,15 @@ - - struct ip6_mh_binding_update; - struct nd_router_advert; -+struct nd_opt_prefix_info; - - struct policy_bind_acl_entry { - struct list_head list; - struct in6_addr hoa; - int plen; - int bind_policy; -+ int mnp_count; -+ struct list_head mob_net_prefixes; - }; - - /** -@@ -147,6 +150,12 @@ int default_best_ro_coa(const struct in6 - const struct in6_addr *cn, - struct in6_addr *coa); - -+int default_get_mnp_count(const struct in6_addr *hoa); -+ -+int default_get_mnps(const struct in6_addr *hoa, -+ const int mnp_count, -+ struct nd_opt_prefix_info *mnps); -+ - void policy_cleanup(void); - - int policy_init(void); -diff -r a7e20b0b5c43 src/proc_sys.h ---- a/src/proc_sys.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/proc_sys.h Tue Jan 08 11:28:48 2008 +0100 -@@ -14,6 +14,7 @@ - #define PROC_SYS_IP6_APP_SOLICIT "/proc/sys/net/ipv6/neigh/%s/app_solicit" - #define PROC_SYS_IP6_BASEREACHTIME_MS "/proc/sys/net/ipv6/neigh/%s/base_reachable_time_ms" - #define PROC_SYS_IP6_RETRANSTIMER_MS "/proc/sys/net/ipv6/neigh/%s/retrans_time_ms" -+#define PROC_SYS_IP6_FORWARDING "/proc/sys/net/ipv6/conf/%s/forwarding" - - int set_iface_proc_entry(const char *tmpl, const char *if_name, int val); - -diff -r a7e20b0b5c43 src/rtnl.h ---- a/src/rtnl.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/rtnl.h Tue Jan 08 11:28:48 2008 +0100 -@@ -16,6 +16,7 @@ - #define IP6_RT_PRIO_MIP6_FWD 192 - #define IP6_RT_PRIO_ADDRCONF 256 - -+#define IP6_RULE_PRIO_MIP6_MNP_IN 1000 - #define IP6_RULE_PRIO_MIP6_HOA_OUT 1001 - #define IP6_RULE_PRIO_MIP6_COA_OUT 1002 - #define IP6_RULE_PRIO_MIP6_BLOCK 1003 -diff -r a7e20b0b5c43 src/scan.l ---- a/src/scan.l Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/scan.l Tue Jan 08 11:28:48 2008 +0100 -@@ -136,6 +136,11 @@ MnRouterProbeTimeout { return MNROUTERP - MnRouterProbeTimeout { return MNROUTERPROBETIMEOUT; } - MnDiscardHaParamProb { return MNDISCARDHAPARAMPROB; } - OptimisticHandoff { return OPTIMISTICHANDOFF; } -+HaAcceptMobRtr { return HAACCEPTMOBRTR; } -+IsMobRtr { return ISMOBRTR; } -+HaServedPrefix { return HASERVEDPREFIX; } -+HomePrefix { return HOMEPREFIX; } -+MobRtrUseExplicitMode { return MOBRTRUSEEXPLICITMODE; } - internal { return INTERNAL; } - - {addr} { -diff -r a7e20b0b5c43 src/vt.c ---- a/src/vt.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/vt.c Tue Jan 08 11:28:48 2008 +0100 -@@ -677,6 +677,16 @@ static int bcache_vt_dump(void *data, vo - } - - fprintf(vh->vh_stream, "\n"); -+ -+ /* Dump the registered MNP */ -+ { -+ struct list_head *l; -+ list_for_each(l, &bce->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ fprintf(vh->vh_stream, " MNP: %x:%x:%x:%x:%x:%x:%x:%x/%d\n", NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ } -+ } - - return 0; - } -diff -r a7e20b0b5c43 src/xfrm.c ---- a/src/xfrm.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/xfrm.c Tue Jan 08 11:28:48 2008 +0100 -@@ -679,12 +679,73 @@ static int _mn_ha_ipsec_bypass_init(cons - return err; - } - -+static int mr_ipsec_bypass_init(void) -+{ -+ struct list_head *home; -+ struct list_head *mnps; -+ int err=0; -+ -+ /* Loop for each HomeAddress info */ -+ list_for_each(home, &conf.home_addrs) -+ { -+ struct home_addr_info *hai; -+ hai = list_entry(home, struct home_addr_info, list); -+ -+ /* If Mobile Router for this link, loop for each MNP */ -+ if (hai->mob_rtr) -+ { -+ /* Add bypass policies to and from the MNP link */ -+ list_for_each(mnps, &hai->mob_net_prefixes) -+ { -+ struct prefix_list_entry * mnp; -+ struct xfrm_selector sel; -+ -+ mnp = list_entry(mnps, struct prefix_list_entry, list); -+ -+ memset(&sel, 0, sizeof(sel)); -+ sel.family = AF_INET6; -+ sel.user = getuid(); -+ -+ /* IN, src = MNP , dst = any */ -+ memcpy(&sel.saddr.a6, &mnp->ple_prefix, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_IN, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ -+ /* XXX: what should we do in case of error? */ -+ -+ /* FWD, src = MNP , dst = any */ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_FWD, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ -+ /* OUT, src = any , dst = MNP */ -+ memset(&sel.saddr.a6, 0, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = 0; -+ memcpy(&sel.daddr.a6, &mnp->ple_prefix, sizeof(sel.daddr.a6)); -+ sel.prefixlen_d = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ } -+ } -+ } -+ -+ return err; -+} -+ - static inline int mn_ha_ipsec_init(void) - { - int err; - - /* insert bypass policy */ - err = ipsec_policy_walk(_mn_ha_ipsec_bypass_init, NULL); -+ -+ /* insert NEMO-related bypass */ -+ err = mr_ipsec_bypass_init(); - - err = ipsec_policy_walk(_mn_ha_ipsec_init, NULL); - -@@ -787,9 +848,64 @@ static int _mn_ha_ipsec_bypass_cleanup(c - return err; - } - -+static int mr_ipsec_bypass_cleanup(void) -+{ -+ struct list_head *home; -+ struct list_head *mnps; -+ int err=0; -+ -+ /* Loop for each HomeAddress info */ -+ list_for_each(home, &conf.home_addrs) -+ { -+ struct home_addr_info *hai; -+ hai = list_entry(home, struct home_addr_info, list); -+ -+ /* If Mobile Router for this link, loop for each MNP */ -+ if (hai->mob_rtr) -+ { -+ /* Delete bypass policies to and from the MNP link */ -+ list_for_each(mnps, &hai->mob_net_prefixes) -+ { -+ struct prefix_list_entry * mnp; -+ struct xfrm_selector sel; -+ -+ mnp = list_entry(mnps, struct prefix_list_entry, list); -+ -+ memset(&sel, 0, sizeof(sel)); -+ sel.family = AF_INET6; -+ sel.user = getuid(); -+ -+ /* IN, src = MNP , dst = any */ -+ memcpy(&sel.saddr.a6, &mnp->ple_prefix, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); -+ -+ /* XXX: what should we do in case of error? */ -+ -+ /* FWD, src = MNP , dst = any */ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_FWD); -+ -+ /* OUT, src = any , dst = MNP */ -+ memset(&sel.saddr.a6, 0, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = 0; -+ memcpy(&sel.daddr.a6, &mnp->ple_prefix, sizeof(sel.daddr.a6)); -+ sel.prefixlen_d = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); -+ } -+ } -+ } -+ -+ return err; -+} -+ -+ - static inline void mn_ha_ipsec_cleanup(void) - { - ipsec_policy_walk(_mn_ha_ipsec_bypass_cleanup, NULL); -+ -+ (void)mr_ipsec_bypass_cleanup(); - - ipsec_policy_walk(_mn_ha_ipsec_cleanup, NULL); - } -@@ -1719,6 +1835,8 @@ int xfrm_pre_bu_add_bule(struct bulentry - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); - xfrm_block_link(hai); -+ if (hai->mob_rtr && !(hai->home_block & NEMO_FWD_BLOCK)) -+ xfrm_block_fwd(hai); - } - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (rdata) -@@ -1784,6 +1902,8 @@ int xfrm_post_ba_mod_bule(struct bulentr - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (hai->home_block & NEMO_FWD_BLOCK) -+ xfrm_unblock_fwd(hai); - } - /* check if XFRM policies and states have already been cleaned up */ - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) -@@ -2058,6 +2178,50 @@ void xfrm_unblock_hoa(struct home_addr_i - hai->home_block &= ~HOME_ADDR_BLOCK; - } - -+/* block all RA messages sent by MR */ -+int xfrm_block_ra(struct home_addr_info *hai) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ hai->home_block |= NEMO_RA_BLOCK; -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_ROUTER_ADVERT, 0, 0, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ -+void xfrm_unblock_ra(struct home_addr_info *hai) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_ROUTER_ADVERT, 0, 0, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -+ hai->home_block &= ~NEMO_RA_BLOCK; -+} -+ -+/* block all forwarded packets */ -+int xfrm_block_fwd(struct home_addr_info *hai) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ hai->home_block |= NEMO_FWD_BLOCK; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_FWD, XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ -+void xfrm_unblock_fwd(struct home_addr_info *hai) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_FWD); -+ hai->home_block &= ~NEMO_FWD_BLOCK; -+} -+ - int mn_ipsec_recv_bu_tnl_pol_add(struct bulentry *bule, int ifindex, - struct ipsec_policy_entry *e) - { -diff -r a7e20b0b5c43 src/xfrm.h ---- a/src/xfrm.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/xfrm.h Tue Jan 08 11:28:48 2008 +0100 -@@ -15,6 +15,7 @@ - #define MIP6_PRIO_RO_SIG_IPSEC 7 /* XXX: BU between MN-MN with IPsec */ - #define MIP6_PRIO_RO_SIG 8 /* XXX: BU between MN-CN */ - #define MIP6_PRIO_RO_SIG_ANY 9 -+#define MIP6_PRIO_MR_LOCAL_DATA_BYPASS 9 /* Bypass rule for local traffic in mobile network */ - #define MIP6_PRIO_RO_SIG_RR 10 /* XXX: MH(or HoTI/HoT) between MN-CN */ - #define MIP6_PRIO_RO_BLOCK 11 - #define MIP6_PRIO_NO_RO_SIG_ANY 12 -@@ -87,6 +88,12 @@ int xfrm_block_hoa(struct home_addr_info - int xfrm_block_hoa(struct home_addr_info *hai); - void xfrm_unblock_hoa(struct home_addr_info *hai); - -+int xfrm_block_ra(struct home_addr_info *hai); -+void xfrm_unblock_ra(struct home_addr_info *hai); -+ -+int xfrm_block_fwd(struct home_addr_info *hai); -+void xfrm_unblock_fwd(struct home_addr_info *hai); -+ - int ha_mn_ipsec_pol_mod(struct in6_addr *haaddr, - struct in6_addr *hoa); - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch deleted file mode 100755 index 11217388cf..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch +++ /dev/null @@ -1,5535 +0,0 @@ -diff -r 82fcd4bea972 NEWS.MCOA ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/NEWS.MCOA Fri Jan 11 17:02:25 2008 +0100 -@@ -0,0 +1,103 @@ -+mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch -+News and Bugfixes list since mipv6-daemon-umip-0.3-nepl-mcoa-20071022.patch: -+ -+* Updated code on top of the latest NEPL patch -+* No new features -+ -+----------------------------------------------------------------------- -+mipv6-daemon-umip-0.4-nepl-mcoa-20071022.patch -+News and Bugfixes list since mipv6-daemon-umip-0.3-nepl-mcoa-20070613.patch: -+ -+* Ported the code to UMIP 0.4. MCoA now runs on a 2.6.23 kernel, -+ with an UMIP 0.4-based code for the userland. -+* Merged a fix to the proxy ND code for the HA (provided by -+ Tobias HOF): the HA can now be used as legacy node on the -+ Home Link (whereas it only worked as a gateway before). -+ -+----------------------------------------------------------------------- -+mipv6-daemon-umip-0.3-nepl-mcoa-20070613.patch -+News and Bugfixes list since nemo-0.2-mcoa-beta2-20060630: -+ -+* Ported the code to UMIP. MCoA now runs on a 2.6.21.3 kernel, -+ with an UMIP-based code for the userland. -+* MCoA is now provided as a patch for the UMIP userland. -+* The MCoA kernel patch is not needed anymore as it has been -+ integrated in the mainline kernel. -+* No new functionnalities were added. -+ -+----------------------------------------------------------------------- -+nemo-0.2-mcoa-beta3-20070118 -+News and Bugfixes list since nemo-0.2-mcoa-beta2-20060630: -+ -+* Base code: -+- Userland runs on a 2.6.16 kernel -+- Upgraded fwmark patch for 2.6.16 kernel -+- MCoA userland code updated to nemo-20060725 -+ -+* Features: -+- New "Reliable" option that allows to use the BU as a -+ heartbeat, and to automatically divert the traffic to -+ another interface when one MR-HA path fails. -+ See the manpage for details. -+- MPS/MPA can now be used with MCoA. -+- When handover occurs on an interface, forwarded traffic is now -+ blocked only for the interface performing the handover (whereas -+ it was blocked globally before). The local traffic is also -+ blocked for the interface that performs the handover, whereas -+ it was blocked for the HoA interface before. -+- Merged patch to support HoA from MNP (for Mobile Routers) -+- Merged patch to support SIT tunnels -+- Merged patch to fix the MR behaviour in the Home Network -+ (the MR was not correctly forwarding packets from the MNNs) -+ -+* Bugfixes: -+- The source address used to send the BU was sometimes outdated -+ because the CoA was not correctly updated in the XFRM kernel -+ state. -+- When packets originated from the MR were sent to the HA, the -+ HA did not behave correctly because the source address of the -+ packet may not match the one in the kernel XFRM state (that -+ can only store one CoA). Thus the MR behaviour has been -+ slightly changed to NOT use HAO dest. option when sending -+ packet to the HA (This behaviour seems to respect the MIP6 -+ spec). -+- When packets originated from the MR were sent to the HA, and -+ the MR handoffs, the HA still sent replied packets to the -+ old CoA (using Routing Header Type 2). The HA now updates -+ correctly the CoA stored in the kernel, but as the kernel -+ can only store 1 CoA at a time, when the HA replies to the -+ MR the path may be asymetric. -+- Added more checks in the configuration file grammar to -+ avoid configuration errors for MCoA. -+- Solved infinite loop when interface was declared as Interface -+ but not in IfMultipleCoA. -+- Fixed some bugs when MCoA was disabled. It now works fine when -+ not using MCoA. Interface prefence works also fine. -+- Fixed bugs when one entry was invalidated: rules are now -+ correctly deleted. -+- Fixed bugs when choosing the default rule: invalid BULE are -+ not looked up when searching for the default rule. -+- Improved the MR and HA behaviour regarding error management. -+ -+ -+----------------------------------------------------------------------- -+nemo-0.2-mcoa-beta2-20060630 -+News and Bugfixes list since nemo-0.2-mcoa-beta1-20060531: -+ -+- The MR was in some cases installing the same rules twice. -+- The MR had a problem to install some rules after recovering a failure. -+- The MR was stuck in an infinite loop at startup if MCoA was disabled -+- The MR could not clean properly tunnels if registration failed with HA -+- Policy issues when Returning home with a usual MR but using MCoA code -+- When the MR only have 1 active interface, handoff policy is different -+ (rules not erased and dereg bu not send during handoff time) -+- When the MR receives a BAck without BID option, whereas it sent a BU -+ with a BID option, the MR only registers the prefered interface -+ -+- If HA is not configured for MCoA, or MCoA not allowed for the HoA, then -+ BU is accepted but no BID option is sent in BAck -+ -+- Merged the OptimisticHandoff patch -+- Merged the PPP patch -+ -+----------------------------------------------------------------------- -diff -r 82fcd4bea972 README.MCOA ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/README.MCOA Fri Jan 11 17:02:25 2008 +0100 -@@ -0,0 +1,154 @@ -+-------------------------------------------- -+Multiple CoA implementation on UMIP -+<http://software.nautilus6.org/MCoA/> -+ver. 20080108 -+-------------------------------------------- -+Romain KUNTZ <kuntz(at)sfc.wide.ad.jp> -+Jean LORCHAT <lorchat(at)sfc.wide.ad.jp> -+Nautilus6 Project <http://www.nautilus6.org> -+-------------------------------------------- -+ -+ -+1. What is Multiple CoA? -+------------------------ -+ -+Multiple CoA (Multiple Care-of Addresses Registration, MCoA) allows -+a Mobile Node to register multiple Care-of Addresses at the same -+time to its Home Agent. Main benefits, amongst others, are policy -+routing and fault tolerance for the Mobile Router. -+ -+The current implementation is based on -+draft-ietf-monami6-multiplecoa-01 and is shipped as a tarball -+that contains kernel patches and the userland. -+ -+This implementation is based on UMIP, a Mobility platform on Linux. -+More information about UMIP can be found on -+<http://www.linux-ipv6.org/umip-0.3-ann.html.en> -+ -+ -+2. Limitations -+-------------- -+ -+Due to its early stage of development, the MCoA implementation still -+have some important limitations. Please read them carefully to -+understand what you cannot do with this implementation: -+ -+- IPsec is not yet supported. It will in the future, but we now -+ concentrate on the non-IPsec part. -+ -+- Returning home is not supported. Do not try to boot your MN at home -+ or to return home with one of its interface, this will not work. -+ This feature will be available in the future. -+ -+- Once the MN has established multiple tunnels, the policy routing -+ only works FOR THE FORWARDED TRAFFIC. The traffic generated by the -+ MN itself will not be routed according to your policies. Only the -+ traffic from the MNN, routed via the Mobile Router, will be routed -+ according to the policies you installed on the MR. You can expect -+ some improvements in the next releases. -+ -+- CN are not supported, ie the MN cannot register multiple CoA to -+ the CN. -+ -+- The BID for each interface must be chosen between 1 and 251. This -+ limitation is due to the implementation design. We will try to -+ improve this point in the future. -+ -+- This implementation does not support yet the Bulk Registration, -+ mainly because Bulk registration is still under discussion at -+ the IETF. -+ -+ -+3. Known Bugs -+------------- -+ -+- Binding Refresh Request do not include the BID option -+- Binding Error do not include the BID option -+- The BU is sometimes sent via another interface than expected. -+- Certainly many others! -+ -+4. Instructions -+--------------- -+ -+a. Testbed Setup -+---------------- -+ -+Testbed setup, kernel and userlan compilation, configuration -+files etc. are explained in the NEPL Howto available on: -+http://www.nautilus6.org/doc/nepl-howto/ -+ -+Please check this document (especially section 6) to setup -+your MCoA testbed. -+ -+b. Policy Routing -+----------------- -+ -+Once your MN has registered multiple CoA to your Home Agent, it can -+use its multiple MN-HA tunnel for policy routing. -+ -+The policy routing part is managed with ip6tables. Be sure to install -+this tool on both your HA and MN. -+ -+- How does it work? -+------------------- -+ -+The BID that you assigned to each interface will be used to mark the -+packets. Packets marked with BID X will be routed through the -+interface whose BID is X. If this interface is not available (because -+it is down), then the packet will be routed through the most prefered -+interface (the one with the best BidPriority). -+ -+NOTE: -+At the moment, ONLY PACKETS FORWARDED BY THE MR (ie packets sent by MNN) -+can benefit from the policy routing. Packets generated by the MR itself -+will not be routed according to your rules. We are currently working to -+improve the current situation to also allow the MR to benefit from the -+policy routing. -+ -+ -+- How to mark a packet? -+----------------------- -+ -+Use the ip6tables tool and the MARK target to mark your packets with -+the BID. Ip6tables rules must be done in the PREROUTING chain, in the -+mangle table. -+ -+For example, on the MN, to mark as 100 all icmpv6 packets whose -+destination is 2001:a:b::1000, you can do: -+ -+ip6tables -A PREROUTING -t mangle -+ -p icmpv6 --destination 2001:a:b::1000 -+ -j MARK --set-mark 100 -+ -+Those packets will be sent through the interface whose BID is 100. -+You will also need to create the "symetric" rule on the Home Agent: -+ -+ip6tables -A PREROUTING -t mangle -+ -p icmpv6 --source 2001:a:b::1000 -+ -j MARK --set-mark 100 -+ -+As you see, one current limitation is that each rules created on the -+MN must be also created on the Home Agent. We plan to support in the -+future some policy exchange mechanism between the MN and the HA in -+order to configure automatically the HA. -+ -+Read carefully the ip6tables manpage. You will be able to create -+rules based on many parameters, and thus create a very subtle policy -+routing on your MN. -+ -+ -+5. Support -+---------- -+ -+The MCoA implementation is not supported by the UMIP team, so please -+do not complain on their Mailing List. If you have any questions -+regarding this work, or any BUG report, feel free to subscribe to -+our support and announce mailing lists: -+ -+http://www.nautilus6.org/ml.php -+ -+-------------------------------------------- -+Romain KUNTZ <kuntz(at)sfc.wide.ad.jp> -+Jean LORCHAT <lorchat(at)sfc.wide.ad.jp> -+Nautilus6 Project <http://www.nautilus6.org> -+-------------------------------------------- -diff -r 82fcd4bea972 include/netinet/ip6mh.h ---- a/include/netinet/ip6mh.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/include/netinet/ip6mh.h Fri Jan 11 17:02:25 2008 +0100 -@@ -146,6 +146,25 @@ struct ip6_mh_opt_mob_net_prefix { - } __attribute__ ((packed)); - - /* -+ * MCoA registration -+ * Binding Unique Identifier sub-option -+ */ -+struct ip6_mh_opt_bid { -+ uint8_t ip6mobid_type; -+ uint8_t ip6mobid_len; -+ uint16_t ip6mobid_bid; -+ uint8_t ip6mobid_priority; -+ uint8_t ip6mobid_reserved; -+} __attribute__((packed)); -+ -+/* Binding Unique Identifier sub-option flags */ -+#if BYTE_ORDER == BIG_ENDIAN -+#define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */ -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */ -+#endif -+ -+/* - * Mobility Header Message Types - */ - #define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */ -@@ -167,6 +186,7 @@ struct ip6_mh_opt_mob_net_prefix { - #define IP6_MHOPT_NONCEID 0x04 /* Nonce Index */ - #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 */ - - /* - * Status values accompanied with Mobility Binding Acknowledgement -@@ -191,6 +211,9 @@ struct ip6_mh_opt_mob_net_prefix { - #define IP6_MH_BAS_INVAL_PRFX 141 /* Invalid Prefix */ - #define IP6_MH_BAS_NOT_AUTH_FOR_PRFX 142 /* Not Authorized for Prefix */ - #define IP6_MH_BAS_FWDING_FAILED 143 /* Forwarding Setup failed */ -+#define IP6_MH_BAS_CONFLICT_BINDING 144 /* (TBD) MCoA Conflict between bindings */ -+#define IP6_MH_BAS_MCOA_BULK_FAILED 145 /* (TBD) MCoA Bulk registration failed */ -+ - /* - * Status values for the Binding Error mobility messages - */ -diff -r 82fcd4bea972 man/mip6d.conf.tmpl ---- a/man/mip6d.conf.tmpl Fri Jan 11 16:55:08 2008 +0100 -+++ b/man/mip6d.conf.tmpl Fri Jan 11 17:02:25 2008 +0100 -@@ -57,6 +57,9 @@ These options are used both in the Home - .BR "Interface " "name" " {" - .BR " MnIfPreference " "number" ";" - .BR " IfType " "CN | HA | MN" ";" -+.BR " Bid " "number" ";" -+.BR " BidPriority " "number" ";" -+.BR " Reliable " "boolean" ";" - .B } - .fi - -@@ -74,9 +77,10 @@ sets the interface preference value for - sets the interface preference value for an interface in a multi-homed - Mobile Node. The most preferred intefaces have preference 1, the - second most preferred have 2, etc. A preference of zero means the --interface will not be used. -+interface will not be used. Do not use this option if you use the Multiple -+Care-of Address registration on your Mobile Node with this interface. - --Default: 5 -+Default: 0 - - .B IfType - overrides the default node behavior for this interface. If a MN doesn't -@@ -86,6 +90,43 @@ Default: same as - Default: same as - .B NodeConfig - -+.B Bid -+Sets the BID for this interface. The BID must be unique within all -+interface definitions. This BID will be used as an Interface Identifier -+that the user can use for policy routing. If this option is defined, -+also set the -+.B BidPriority -+option, and do not set the -+.B MnIfPreference -+option. -+.B Bid -+must be set between 1 and 251 (this is one of the current limitation -+with this MCoA implementation). -+ -+Default: 0 (no BID) -+ -+.B BidPriority -+Sets the priority of the binding (the higher the better). When no -+policies are define for some flows, the binding with the higher -+preference is used. If this option is defined, do not set the -+.B MnIfPreference -+option for this interface. -+.B BidPriority -+must be set between 1 and 255. -+ -+Default: 0 -+ -+.B Reliable -+allows you to specify if the interface can be considered as reliable -+when using MCoA. If set to false, the traffic will be redirected to -+another interface during the BU-BAck exchange. You can thus use the -+BU as a heartbeat (by specifying a small -+.B MnMaxHaBindingLife -+), which can be pretty useful when one of your MR-HA path is not -+reliable: traffic is redirected to the interface with the best -+priority as long as no BAck is received. -+ -+Default: true - - .TP - .BR "UseMnHaIPsec " "boolean" ";" -@@ -191,6 +232,13 @@ Default: disabled; - Default: disabled; - - .TP -+.BR "HaAcceptMCoAReg enabled | disabled" -+ -+Indicates if the HA accepts Multiple Care-of Addresses registration. -+ -+Default: disabled; -+ -+.TP - .BR "HaServedPrefix " "prefix/length" ";" - - Prefix is an IPv6 prefix and length is the prefix length. Defines the whole -@@ -199,7 +247,7 @@ Mobile Network Prefixes, instead of one - Mobile Network Prefixes, instead of one of the home link prefixes. - - .TP --.BR "BindingAclPolicy " "address MNP list " "allow | deny" -+.BR "BindingAclPolicy " "address MNP list " "MCoAReg | NoMCoAReg " "allow | deny" - - Defines if a MN is allowed to register with the HA or not. The home address - of the MN is given in the address field. The mobile network prefixes -@@ -207,6 +255,12 @@ be an empty string or a comma separated - be an empty string or a comma separated list of network prefixes - enclosed in braces, for example: - .B "(3ffe:2620:6:3::/64, 3ffe:2620:6:4::/64)" -+The HA can forbid or allow the MN to register Multiple Care-of Addresses by -+setting the -+.B NoMCoAReg -+or -+.B MCoAReg -+flag. - - .TP - .BR "DefaultBindingAclPolicy allow | deny" -@@ -368,6 +422,31 @@ Default: disabled - Default: disabled - - .TP -+.BR "RegMultipleCoA enabled | disabled" -+ -+Defines if the Mobile Node should try to register Multiple Care-of -+Addresses to its Home Agent. If enabled, use also the -+.B IfMultipleCoA -+option. If disabled, the node will only register one CoA at a time. -+ -+Default: disabled; -+ -+.TP -+.BR "IfMultipleCoA " "name1, name2, ..." ";" -+ -+Defines the list of interfaces that will be used for Multiple Care-of -+Addresses registration. This list must be composed with the names -+(enclosed in double quotes) of the interfaces (eg. "eth1"), separated -+with a coma. Each interface listed must have an -+.B Interface -+definition properly filled with the Multiple Care-of Address options -+( -+.B Bid -+and -+.B BidPriority -+). -+ -+.TP - The route optimization policies are of the form: - - .TP -@@ -389,7 +468,7 @@ matching this entry. - .SH EXAMPLES - - .TP --.BR "A NEMO Home Agent example:" -+.BR "A NEMO Home Agent example with MCoA support:" - - .nf - NodeConfig HA; -@@ -397,18 +476,19 @@ Interface "eth0"; - Interface "eth0"; - - HaAcceptMobRtr enabled; -+HaAcceptMCoAReg enabled; - - HaServedPrefix 3ffe:2620:6::/48; - - DefaultBindingAclPolicy deny; --BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -+BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) MCoAReg allow; - BindingAclPolicy 3ffe:2620:6:1::1235 allow; - - UseMnHaIPsec disabled; - .fi - - .TP --.BR "A NEMO Mobile Router example:" -+.BR "A NEMO Mobile Router example with MCoA support:" - - .nf - NodeConfig MN; -@@ -416,7 +496,15 @@ DoRouteOptimizationCN disabled; - DoRouteOptimizationCN disabled; - DoRouteOptimizationMN disabled; - --Interface "eth0"; -+Interface "eth0" { -+ Bid 111; -+ BidPriority 10; -+}; -+ -+Interface "eth1" { -+ Bid 222; -+ BidPriority 5; -+}; - - MnRouterProbes 1; - -@@ -426,6 +514,8 @@ MnHomeLink "eth0" { - IsMobRtr enabled; - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -+ RegMultipleCoA enabled; -+ IfMultipleCoA "eth0", "eth1"; - } - - UseMnHaIPsec disabled; -diff -r 82fcd4bea972 src/bcache.c ---- a/src/bcache.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bcache.c Fri Jan 11 17:02:25 2008 +0100 -@@ -48,6 +48,7 @@ static int bcache_count = 0; - static int bcache_count = 0; - - pthread_rwlock_t bc_lock; /* Protects binding cache */ -+int bce_next_entry(void *bce_v, void *next_bce_v); - - /** - * get_bcache_count - returns number of home and cache entries -@@ -90,6 +91,12 @@ void dump_bce(void *bce, void *os) - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno); - -+ if (e->bid) -+ fprintf(out, " BID = %d, Priority = %d\n", -+ e->bid, e->priority); -+ else -+ fprintf(out, " No BID assigned\n"); -+ - if (e->flags & IP6_MH_BA_MR) { - struct list_head *list; - -@@ -201,6 +208,7 @@ void bcache_free(struct bcentry *bce) - * @hinfo: home address info, optional if our_addr is present - * @our_addr: local address (home address) - * @peer_addr: address of CN -+ * @bid: BID of the bce - * - * Returns reference to non-null entry on success and null on failure. - * If caller adjusts lifetime of entry, caller must call -@@ -208,7 +216,8 @@ void bcache_free(struct bcentry *bce) - * call bcache_release_entry() after entry is not used anymore. - **/ - struct bcentry *bcache_get(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - -@@ -216,7 +225,7 @@ struct bcentry *bcache_get(const struct - - pthread_rwlock_rdlock(&bc_lock); - -- bce = hash_get(&bc_hash, our_addr, peer_addr); -+ bce = hash_get(&bc_hash, our_addr, peer_addr, bid); - - if (bce) - pthread_rwlock_wrlock(&bce->lock); -@@ -240,16 +249,19 @@ void bcache_release_entry(struct bcentry - * bce_type - get type of binding cache entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address -+ * @bid: BID of the bce - * - * Looks up entry from binding cache and returns its type. If not - * found, returns -%ENOENT. - **/ --int bce_type(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -+int bce_type(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - int type; - -- bce = bcache_get(our_addr, peer_addr); -+ bce = bcache_get(our_addr, peer_addr, bid); - - if (bce == NULL) - return -ENOENT; -@@ -264,7 +276,8 @@ static int __bcache_insert(struct bcentr - { - int ret; - -- ret = hash_add(&bc_hash, bce, &bce->our_addr, &bce->peer_addr); -+ ret = hash_add(&bc_hash, bce, &bce->our_addr, -+ &bce->peer_addr, &bce->bid); - if (ret) - return ret; - -@@ -282,7 +295,14 @@ static int __bcache_start(struct bcentry - bce->type == BCE_HOMEREG ? bce->lifetime : tmp, - expires); - add_task_abs(&expires, &bce->tqe, _expire); -- xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 0); -+ /* MCoA -+ * Due to the BID, the BC may have several entries with the -+ * same peer_addr. Thus we add states and policies only if -+ * there are no entries yet for the our_addr/peer_addr pair -+ * (see bce->xfrm_create). -+ */ -+ xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 0, -+ bce->xfrm_create); - return 0; - } - -@@ -350,22 +370,26 @@ int bcache_update_expire(struct bcentry - } - tsadd(expires, bce->add_time, expires); - add_task_abs(&expires, &bce->tqe, _expire); -- xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 1); -+ xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 1, 0); - - return 0; - } - - /** - * bcache_delete - deletes a bul entry -+ * If bid == 0, all entries that match our_addr/peer_addr are deleted - **/ - void bcache_delete(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - pthread_rwlock_wrlock(&bc_lock); -- bce = hash_get(&bc_hash, our_addr, peer_addr); -- if (bce) -- bce_delete(bce, 0); -+ while ((bce = hash_get(&bc_hash, our_addr, peer_addr, bid))) { -+ if (bce) -+ bce_delete(bce, 0); -+ } -+ - pthread_rwlock_unlock(&bc_lock); - } - -@@ -398,8 +422,27 @@ static void bce_delete(struct bcentry *b - pthread_rwlock_wrlock(&bce->lock); - if (bce->type != BCE_DAD) { - del_task(&bce->tqe); -- if (bce->type != BCE_NONCE_BLOCK) -- xfrm_del_bce(&bce->our_addr, &bce->peer_addr); -+ if (bce->type != BCE_NONCE_BLOCK) { -+ /* MCoA -+ * Due to the BID, the BC can have several entries -+ * with the same our_addr/peer_addr pair. We delete -+ * the xfrm data if we do not have any BCE for -+ * this peer_addr anymore, or we update it (we need -+ * to update the kernel's CoA to a valid one). -+ */ -+ if(mcoa_bce_count(&bce->peer_addr) == 1) -+ xfrm_del_bce(&bce->our_addr, &bce->peer_addr); -+ else { -+ struct bcentry *next = bce; -+ /* Look for another valid BCE */ -+ bcache_iterate_in(&bce->peer_addr, -+ bce_next_entry, &next); -+ /* Replace the CoA */ -+ xfrm_add_bce(&next->our_addr, -+ &next->peer_addr, -+ &next->coa, 1, 0); -+ } -+ } - } - if (bce->cleanup) - bce->cleanup(bce); -@@ -414,7 +457,7 @@ static void bce_delete(struct bcentry *b - } - } - bcache_count--; -- hash_delete(&bc_hash, &bce->our_addr, &bce->peer_addr); -+ hash_delete(&bc_hash, &bce->our_addr, &bce->peer_addr, bce->bid); - pthread_rwlock_unlock(&bce->lock); - bcache_free(bce); - } -@@ -458,3 +501,71 @@ int bcache_iterate(int (* func)(void *, - pthread_rwlock_unlock(&bc_lock); - return err; - } -+ -+/** -+ * bcache_iterate_in - apply function to every BC entry that match peer_addr -+ * @peer_addr: the peer_addr of the hash -+ * @func: function to apply -+ * @arg: extra data for @func -+ * -+ * Iterates through binding cache, calling @func for each entry that -+ * match peer_addr. Extra data may be passed to @func in @arg. @func -+ * takes a bcentry as its first argument and @arg as second argument. -+ * -+ * Be sure that bc_lock is locked before using this function, and -+ * unlocked after using it. -+ **/ -+int bcache_iterate_in(const struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg) -+{ -+ int err; -+ err = hash_iterate_in(&bc_hash, peer_addr, func, arg); -+ return err; -+} -+ -+int bce_highest_priority(void *bce_v, void *best_bce_v) -+{ -+ struct bcentry *bce = bce_v; -+ struct bcentry **best_bce = best_bce_v; -+ -+ assert(bce); -+ assert(best_bce); -+ -+ if (!(*best_bce) || (bce->priority > (*best_bce)->priority)) -+ (*best_bce) = bce; -+ -+ return 0; -+} -+ -+int bce_next_entry(void *bce_v, void *next_bce_v) -+{ -+ struct bcentry *bce = bce_v; -+ struct bcentry **next_bce = next_bce_v; -+ -+ assert(bce); -+ assert(next_bce); -+ -+ if (bce->bid != (*next_bce)->bid) { -+ (*next_bce) = bce; -+ return 1; -+ } -+ -+ return 0; -+} -+ -+int mcoa_bce_inc_counter(void *bule_v, void *counter_v) -+{ -+ int *counter = counter_v; -+ (*counter)++; -+ return 0; -+} -+ -+int mcoa_bce_count(const struct in6_addr *peer_addr) -+{ -+ int count = 0; -+ bcache_iterate_in(peer_addr, mcoa_bce_inc_counter, &count); -+ -+ return count; -+} -+ -diff -r 82fcd4bea972 src/bcache.h ---- a/src/bcache.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bcache.h Fri Jan 11 17:02:25 2008 +0100 -@@ -20,6 +20,12 @@ struct bcentry { - uint16_t nonce_hoa; - uint16_t type; /* Entry type */ - uint16_t nemo_type; /* NEMO registration type */ -+ uint16_t bid; /* MCoA: Binding Identifier */ -+ uint8_t priority; /* MCoA: BID priority */ -+ int table; /* MCoA: Table id to where are stored -+ the routes */ -+ int xfrm_create; /* MCoA: If xfrm policies/states must -+ be created */ - int unreach; /* ICMP dest unreach count */ - int tunnel; /* Tunnel interface index */ - int link; /* Home link interface index */ -@@ -48,12 +54,16 @@ struct bcentry { - #define BCE_NEMO_IMPLICIT 2 - #define BCE_NEMO_DYNAMIC 3 - -+#define BCE_TABLE_MIN 1 -+#define BCE_TABLE_MAX 251 -+ - struct bcentry *bcache_alloc(int type); - - void bcache_free(struct bcentry *bce); - - struct bcentry *bcache_get(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - int bcache_add(struct bcentry *bce); - -@@ -63,28 +73,37 @@ int bcache_update_expire(struct bcentry - int bcache_update_expire(struct bcentry *bce); - - void bcache_delete(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - int bcache_init(void); - void bcache_flush(void); - void bcache_cleanup(void); - - int bcache_iterate(int (* func)(void *, void *), void *arg); -+int bcache_iterate_in(const struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg); - - void bcache_release_entry(struct bcentry *bce); - - int bce_type(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - static inline int bce_exists(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { -- return bce_type(our_addr, peer_addr) >= BCE_NONCE_BLOCK; -+ return bce_type(our_addr, peer_addr, bid) >= BCE_NONCE_BLOCK; - } -+ -+int bce_highest_priority(void *bce_v, void *best_bce_v); - - void dump_bce(void *bce, void *os); - - int get_bcache_count(int type); -+int mcoa_bce_count(const struct in6_addr *peer_addr); - - extern pthread_rwlock_t bc_lock; /* Protects binding cache */ - -diff -r 82fcd4bea972 src/bul.c ---- a/src/bul.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bul.c Fri Jan 11 17:02:25 2008 +0100 -@@ -38,6 +38,8 @@ - #include "xfrm.h" - #include "debug.h" - #include "retrout.h" -+#include "tunnelctl.h" -+#include "rtnl.h" - #ifdef ENABLE_VT - #include "vt.h" - #endif -@@ -55,7 +57,8 @@ static struct hash bul_hash; - static struct hash bul_hash; - - struct bulentry *create_bule(const struct in6_addr *hoa, -- const struct in6_addr *cn_addr) -+ const struct in6_addr *cn_addr, -+ u_int16_t bid) - { - struct bulentry *bule; - if ((bule = malloc(sizeof(*bule))) != NULL) { -@@ -63,6 +66,11 @@ struct bulentry *create_bule(const struc - bule->hoa = *hoa; - bule->last_coa = *hoa; - bule->peer_addr = *cn_addr; -+ bule->bid = bid; -+ bule->if_tunnel = 0; -+ bule->rules = 0; -+ bule->home_block = 0; -+ bule->mcoa_dereg = 1; - INIT_LIST_HEAD(&bule->tqe.list); - bule->seq = random(); - } -@@ -97,6 +105,11 @@ void dump_bule(void *bule, void *os) - NIP6ADDR(&e->peer_addr)); - fprintf(out, " lifetime = %ld, ", e->lifetime.tv_sec); - fprintf(out, " delay = %ld\n", tstomsec(e->delay)); -+ if (e->bid) -+ fprintf(out, " BID = %d, Priority = %d\n", -+ e->bid, e->priority); -+ else -+ fprintf(out, " No BID assigned\n"); - fprintf(out, " flags: "); - if (e->flags & IP6_MH_BU_HOME) - fprintf(out, "IP6_MH_BU_HOME "); -@@ -118,21 +131,23 @@ void dump_bule(void *bule, void *os) - * @hinfo: home address info, optional if our_addr is present - * @our_addr: local address (home address) - * @peer_addr: address of CN -+ * @bid: Binding Unique Identifier - * - * Returns non-null entry on success and null on failure. Caller must - * call del_task and add_task, if lifetime of the entry is changed. - **/ - struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ u_int16_t bid) - { - struct bulentry *bule; - - assert(hinfo || our_addr); - - if (hinfo) -- bule = hash_get(&hinfo->bul, NULL, peer_addr); -- else bule = hash_get(&bul_hash, our_addr, peer_addr); -+ bule = hash_get(&hinfo->bul, NULL, peer_addr, bid); -+ else bule = hash_get(&bul_hash, our_addr, peer_addr, bid); - return bule; - } - -@@ -175,9 +190,11 @@ int bul_add(struct bulentry *bule) - - assert(bule && tsisset(bule->lifetime) && hai); - -- if ((ret = hash_add(&bul_hash, bule, &bule->hoa, &bule->peer_addr)) < 0) -+ if ((ret = hash_add(&bul_hash, bule, &bule->hoa, &bule->peer_addr, -+ &bule->bid)) < 0) - return ret; -- if ((ret = hash_add(&hai->bul, bule, NULL, &bule->peer_addr)) < 0) -+ if ((ret = hash_add(&hai->bul, bule, NULL, &bule->peer_addr, -+ &bule->bid)) < 0) - goto bul_free; - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); -@@ -197,9 +214,9 @@ int bul_add(struct bulentry *bule) - add_task_abs(&timer_expire, &bule->tqe, bule->callback); - return 0; - home_bul_free: -- hash_delete(&hai->bul, &bule->hoa, &bule->peer_addr); -+ hash_delete(&hai->bul, &bule->hoa, &bule->peer_addr, bule->bid); - bul_free: -- hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); -+ hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr, bule->bid); - return ret; - } - -@@ -209,8 +226,8 @@ void bul_delete(struct bulentry *bule) - struct home_addr_info *hai = bule->home; - - del_task(&bule->tqe); -- hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); -- hash_delete(&hai->bul, NULL, &bule->peer_addr); -+ hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr, bule->bid); -+ hash_delete(&hai->bul, NULL, &bule->peer_addr, bule->bid); - - if (!IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - bule->last_coa = bule->coa; -@@ -222,6 +239,7 @@ void bul_delete(struct bulentry *bule) - if (!(bule->flags & IP6_MH_BU_HOME)) - mn_rr_delete_bule(bule); - } -+ - if (bule->flags & IP6_MH_BU_HOME) { - if (bule->type == UNREACH_ENTRY) { - pthread_mutex_lock(&hai->ha_list.c_lock); -@@ -232,16 +250,28 @@ void bul_delete(struct bulentry *bule) - } else { - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); - if (hai->home_block & NEMO_RA_BLOCK) - xfrm_unblock_ra(hai); - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); -+ if (bule->home_block & NEMO_FWD_BLOCK) -+ bule_unblock_fwd(bule); - } - } - while (bule->ext_cleanup) - bule->ext_cleanup(bule); -+ -+ /* MCoA -+ * If MCoA is used, the tunnel related to this BULE -+ * has to be deleted. -+ */ -+ if (bule->home->reg_mcoa && bule->type != NON_MIP_CN_ENTRY) -+ tunnel_del(bule->if_tunnel, NULL, NULL); -+ - dbg("Deleting bule\n"); - dbg_func(bule, dump_bule); - free_bule(bule); -@@ -312,3 +342,129 @@ int bul_iterate(struct hash *h, int (* f - struct hash *tmp = h ? h : &bul_hash; - return hash_iterate(tmp, func, arg); - } -+ -+/** -+ * bul_iterate_in - apply function to every BUL entry that match peer_addr -+ * @peer_addr: the peer_addr of the hash -+ * @func: function to apply -+ * @arg: extra data for @func -+ * -+ * Iterates through binding update list, calling @func for each entry that -+ * match peer_addr. Extra data may be passed to @func in @arg. @func -+ * takes a BUL entry as its first argument and @arg as second argument. -+ **/ -+int bul_iterate_in(struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg) -+{ -+ return hash_iterate_in(&bul_hash, peer_addr, func, arg); -+} -+ -+int bul_highest_priority(void *bule_v, void *best_bule_v) -+{ -+ struct bulentry *bule = bule_v; -+ struct bulentry **best_bule = best_bule_v; -+ -+ assert(bule); -+ assert(best_bule); -+ -+ if(bule->type == NON_MIP_CN_ENTRY || -+ bule->type == UNREACH_ENTRY) -+ return 0; -+ -+ if (!(*best_bule) -+ || (bule->priority > (*best_bule)->priority -+ && bule->rules)) -+ (*best_bule) = bule; -+ -+ return 0; -+} -+ -+int mcoa_bule_inc_counter(void *bule_v, void *counter_v) -+{ -+ struct bulentry *bule = bule_v; -+ int *counter = counter_v; -+ assert(counter); -+ -+ if(bule->type != NON_MIP_CN_ENTRY) -+ (*counter)++; -+ return 0; -+} -+ -+/** -+ * mcoa_bule_count - count the number of entry (!NON_MIP_CN_ENTRY) -+ * with the same peer_addr. -+ * @bule: the bule where to pick up the peer address -+ **/ -+ -+int mcoa_bule_count(struct bulentry *bule) -+{ -+ int count = 0; -+ assert(bule); -+ bul_iterate_in(&bule->peer_addr, mcoa_bule_inc_counter, &count); -+ return count; -+} -+ -+ -+int mcoa_bule_setdereg(void *bule_v, void *dereg_v) -+{ -+ int *dereg = dereg_v; -+ struct bulentry *bule = bule_v; -+ -+ assert(dereg); -+ bule->mcoa_dereg = *(dereg); -+ return 0; -+} -+ -+/** -+ * mcoa_bule_dereg - Set the BULE mcoa_dereg flag to value for -+ * all entries that match bule->peer_addr. -+ * @bule: the bule where to pick up the peer address -+ * @value: the value to set -+ **/ -+int mcoa_bule_dereg(struct bulentry *bule, int value) -+{ -+ bul_iterate_in(&bule->peer_addr, mcoa_bule_setdereg, &value); -+ return 0; -+} -+ -+/** -+ * bule_block_fwd - Block forwarding for all MNPs -+ * via the fwmark (BID) of the bule -+ * @bule: the bule -+ */ -+void bule_block_fwd(struct bulentry *bule) -+{ -+ struct list_head *l; -+ if (!bule->rules) -+ return; -+ bule->home_block |= NEMO_FWD_BLOCK; -+ list_for_each(l, &bule->home->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ /*fwmark*/ bule->bid, RTN_BLACKHOLE, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } -+} -+ -+/** -+ * bule_unblock_fwd - unblock forwarding for all MNPs -+ * via the fwmark (BID) of the bule -+ * @bule: the bule -+ */ -+void bule_unblock_fwd(struct bulentry *bule) -+{ -+ struct list_head *l; -+ bule->home_block &= ~NEMO_FWD_BLOCK; -+ list_for_each(l, &bule->home->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ /*fwmark*/ bule->bid, RTN_BLACKHOLE, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } -+} -+ -diff -r 82fcd4bea972 src/bul.h ---- a/src/bul.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bul.h Fri Jan 11 17:02:25 2008 +0100 -@@ -9,6 +9,9 @@ - #include "tqueue.h" - #include "hash.h" - #include "list.h" -+ -+#define BULE_TABLE_MIN 1 -+#define BULE_TABLE_MAX 251 - - struct home_addr_info; - -@@ -31,10 +34,16 @@ struct bulentry { - struct in6_addr hoa; - struct in6_addr coa; /* care-of address of the sent BU */ - int if_coa; -+ int if_tunnel; /* MCoA: Tunnel iface for the BCE */ -+ int table; /* MCoA: Routing table where are -+ stored the routes */ -+ int rules; /* MCoA: if rules are installed for -+ this BULE */ - int type; /* BUL / NON_MIP_CN / UNREACH */ - uint16_t seq; /* sequence number of the latest BU */ - uint16_t flags; /* BU send flags */ -- struct in6_addr last_coa; /* Last good coa */ -+ uint16_t bid; /* MCoA: Binding Identifier */ -+ struct in6_addr last_coa; /* Last good coa */ - struct timespec lastsent; - struct timespec lifetime; /* lifetime sent in this BU */ - struct timespec delay; /* call back time in ms*/ -@@ -47,7 +56,11 @@ struct bulentry { - uint8_t use_alt_coa; /* Whether to use alt. CoA option */ - uint8_t dereg; /* for calculating BSA key */ - uint8_t do_send_bu; /* send bu / not send bu */ -- -+ uint8_t priority; /* MCoA: BID priority */ -+ uint8_t home_block; /* MCoA: NEMO_FWD_BLOCK, ... */ -+ uint8_t mcoa_dereg; /* MCoA: if BCE needs to be -+ deregistered with a BU */ -+ - /* Information for return routability */ - struct retrout_info rr; - uint8_t Kbm[HMAC_SHA1_KEY_SIZE]; -@@ -84,7 +97,8 @@ enum { - - struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ u_int16_t bid); - - int bul_add(struct bulentry *bule); - -@@ -94,7 +108,11 @@ void bul_update_expire(struct bulentry * - void bul_update_expire(struct bulentry *bule); - - int bul_iterate(struct hash *h, int (* func)(void *bule, void *arg), void *arg); -+int bul_iterate_in(struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg); - -+int bul_highest_priority(void *bule_v, void *best_bule_v); - int bul_init(void); - int bul_home_init(struct home_addr_info *home); - void bul_home_cleanup(struct hash *bul); -@@ -102,7 +120,12 @@ void bul_cleanup(void); - void bul_cleanup(void); - void dump_bule(void *bule, void *os); - struct bulentry *create_bule(const struct in6_addr *hoa, -- const struct in6_addr *cn_addr); -+ const struct in6_addr *cn_addr, -+ u_int16_t bid); - void free_bule(struct bulentry *bule); -+int mcoa_bule_count(struct bulentry *bule); -+int mcoa_bule_dereg(struct bulentry *bule_v, int value); -+void bule_block_fwd(struct bulentry *bule); -+void bule_unblock_fwd(struct bulentry *bule); - - #endif -diff -r 82fcd4bea972 src/cn.c ---- a/src/cn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/cn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -67,7 +67,11 @@ static void cn_recv_dst_unreach(const st - if (icmp6_parse_data(ip6h, optlen, &laddr, &raddr) < 0) - return; - -- bce = bcache_get(laddr, raddr); -+ /* MCoA TODO2 -+ * Add MCoA support for the CN -+ * MCOA_NO_BID must be replaced with the BUI's BID -+ */ -+ bce = bcache_get(laddr, raddr, MCOA_NO_BID); - - if (bce == NULL) - return; -@@ -76,7 +80,7 @@ static void cn_recv_dst_unreach(const st - if (bce->unreach > ICMP_ERROR_PERSISTENT_THRESHOLD && - bce->type != BCE_HOMEREG) { - bcache_release_entry(bce); -- bcache_delete(laddr, raddr); -+ bcache_delete(laddr, raddr, MCOA_NO_BID); - dbg("BCE for %x:%x:%x:%x:%x:%x:%x:%x deleted " - "due to receipt of ICMPv6 destination unreach\n", - NIP6ADDR(raddr)); -@@ -156,6 +160,7 @@ void cn_recv_bu(const struct ip6_mh *mh, - struct in6_addr_bundle out; - struct ip6_mh_binding_update *bu; - struct ip6_mh_opt_nonce_index *non_ind; -+ struct ip6_mh_opt_bid *bid_opt = NULL; - struct bcentry *bce = NULL; - struct timespec lft; - int status, new = 0; -@@ -175,7 +180,18 @@ void cn_recv_bu(const struct ip6_mh *mh, - - bu_flags = bu->ip6mhbu_flags; - non_ind = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_NONCEID); -- bce = bcache_get(out.src, out.dst); -+ /* MCoA TODO2 -+ * MCoA support for CN is not implemented yet -+ * At the moment we ignore the BUs with BUI option -+ */ -+ if ((bid_opt = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_BID))) { -+ dbg("Received BU with BUI sub-option, but CN doesn't " -+ "support MCoA registration. BU skipped.\n"); -+ status = IP6_MH_BAS_REG_NOT_ALLOWED; -+ goto send_nack; -+ } -+ -+ bce = bcache_get(out.src, out.dst, MCOA_NO_BID); - if (bce) { - if ((bce->flags^bu_flags) & (IP6_MH_BU_HOME|IP6_MH_BU_MR)) { - /* H-bit or R-bit mismatch, flags changed */ -@@ -219,7 +235,7 @@ void cn_recv_bu(const struct ip6_mh *mh, - goto send_nack; - } - /* else get rid of it */ -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - } - } else { - if (bu_flags & IP6_MH_BU_HOME) { -@@ -281,18 +297,18 @@ void cn_recv_bu(const struct ip6_mh *mh, - } - /* dereg, success */ - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - status = IP6_MH_BAS_ACCEPTED; - } - if (bu_flags & IP6_MH_BU_ACK) -- mh_send_ba(&out, status, 0, seqno, &lft, key, iif); -+ mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, key, iif); - return; - send_nack: - if (bce) { - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - } -- mh_send_ba_err(&out, status, 0, seqno, pkey, iif); -+ mh_send_ba_err(&out, status, 0, seqno, 0, 0, pkey, iif); - } - - static struct mh_handler cn_bu_handler = -diff -r 82fcd4bea972 src/conf.c ---- a/src/conf.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/conf.c Fri Jan 11 17:02:25 2008 +0100 -@@ -74,6 +74,7 @@ static void conf_version(void) - { - fprintf(stderr, - "%s (%s) %s\n" -+ "With Multiple Care-of Addresses registration support\n" - "%s\n" - "This is free software; see the source for copying conditions. There is NO\n" - "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", -@@ -218,6 +219,7 @@ static void conf_default(struct mip6_con - - /* HA options */ - c->SendMobPfxAdvs = 1; -+ c->HaAcceptMCoAReg = 0; - c->SendUnsolMobPfxAdvs = 1; - c->MaxMobPfxAdvInterval = 86400; /* seconds */ - c->MinMobPfxAdvInterval = 600; /* seconds */ -@@ -317,8 +319,89 @@ void conf_show(struct mip6_config *c) - dbg("MinMobPfxAdvInterval = %u\n", c->MinMobPfxAdvInterval); - dbg("HaMaxBindingLife = %u\n", c->HaMaxBindingLife); - dbg("HaAcceptMobRtr = %s\n", CONF_BOOL_STR(c->HaAcceptMobRtr)); -+ dbg("HaAcceptMCoAReg = %s\n", CONF_BOOL_STR(c->HaAcceptMCoAReg)); - - /* CN options */ - dbg("DoRouteOptimizationCN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationCN)); - } -+ -+/* -+ * get_reliable_from_ifindex - return the reliability value -+ * from the interface index -+ * @iif: the interface index -+ */ -+int get_reliable_from_ifindex(int iif) -+{ -+ 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->ifindex == iif) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_reliable; -+ return -1; -+ } -+ } -+ return -1; -+} -+ -+/* -+ * get_bid_from_ifindex - return the bid from the interface index -+ * @iif: the interface index -+ */ -+uint16_t get_bid_from_ifindex(int iif) -+{ -+ 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->ifindex == iif) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_bid; -+ return 0; -+ } -+ } -+ return 0; -+} -+ -+/* -+ * get_prio_from_bid - return the priority from the bid -+ * @bid: the bid of the interface -+ */ -+uint8_t get_prio_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_bidprio; -+ return 0; -+ } -+ } -+ return 0; -+} -+ -+/* -+ * get_highest_prio - return the highest BID priority from the -+ * interface list -+ */ -+uint8_t get_highest_prio() -+{ -+ struct list_head *list; -+ int priority = 0; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->mn_if_bidprio >= priority) -+ priority = nif->mn_if_bidprio; -+ } -+ return priority; -+} -+ -diff -r 82fcd4bea972 src/conf.h ---- a/src/conf.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/conf.h Fri Jan 11 17:02:25 2008 +0100 -@@ -48,6 +48,7 @@ struct mip6_config { - - /* HA options */ - char HaAcceptMobRtr; -+ char HaAcceptMCoAReg; - char SendMobPfxAdvs; - char SendUnsolMobPfxAdvs; - unsigned int MaxMobPfxAdvInterval; -@@ -66,6 +67,9 @@ struct net_iface { - int is_rtr; - int mip6_if_entity; - int mn_if_preference; -+ uint16_t mn_if_bid; -+ uint8_t mn_if_bidprio; -+ int mn_if_reliable; - }; - - extern struct mip6_config conf; -@@ -119,6 +123,11 @@ int conf_parse(struct mip6_config *c, in - - void conf_show(struct mip6_config *c); - -+int get_reliable_from_ifindex(int iif); -+uint16_t get_bid_from_ifindex(int iif); -+uint8_t get_prio_from_bid(uint16_t bid); -+uint8_t get_highest_prio(); -+ - int yyparse(void); - - int yylex(void); -diff -r 82fcd4bea972 src/dhaad_mn.c ---- a/src/dhaad_mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/dhaad_mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -120,8 +120,9 @@ static void dhaad_resend(struct tq_elem - pthread_rwlock_unlock(&mn_lock); - return; - } -- t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, -- &hai->primary_coa.addr, -+ assert(hai->current_coa); -+ t->dhaad_id = dhaad_send_request(hai->current_coa->iif, -+ &hai->current_coa->addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? -@@ -146,8 +147,9 @@ static void _dhaad_start(struct home_add - if (hai->mob_rtr && !(hai->home_block & NEMO_RA_BLOCK)) - xfrm_block_ra(hai); - t->dhaad_resends = 0; -- t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, -- &hai->primary_coa.addr, -+ assert(hai->current_coa); -+ t->dhaad_id = dhaad_send_request(hai->current_coa->iif, -+ &hai->current_coa->addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? -diff -r 82fcd4bea972 src/gram.y ---- a/src/gram.y Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/gram.y Fri Jan 11 17:02:25 2008 +0100 -@@ -47,15 +47,20 @@ - #include "util.h" - #include "ipsec.h" - #include "rtnl.h" -+#include "bul.h" - - struct net_iface ni = { - .mip6_if_entity = MIP6_ENTITY_NO, - .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 - }; - - struct home_addr_info hai = { - .ro_policies = LIST_HEAD_INIT(hai.ro_policies), -- .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes) -+ .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes), -+ .mcoa = LIST_HEAD_INIT(hai.mcoa) - }; - - LIST_HEAD(prefixes); -@@ -185,6 +190,14 @@ static void uerror(const char *fmt, ...) - %token ISMOBRTR - %token HASERVEDPREFIX - %token MOBRTRUSEEXPLICITMODE -+%token HAACCEPTMCOAREG -+%token MCOAREG -+%token NOMCOAREG -+%token BID -+%token BIDPRIORITY -+%token RELIABLE -+%token REGMULTIPLECOA -+%token IFMULTIPLECOA - - %token INV_TOKEN - -@@ -197,6 +210,7 @@ static void uerror(const char *fmt, ...) - %type <addr> mnropolicyaddr - %type <bool> dorouteopt - %type <num> bindaclpolval -+%type <num> mcoapolval - %type <num> prefixlen - %type <num> mip6entity - %type <bool> xfrmaction -@@ -306,6 +320,10 @@ topdef : MIP6ENTITY mip6entity ';' - { - conf.HaAcceptMobRtr = $2; - } -+ | HAACCEPTMCOAREG BOOL ';' -+ { -+ conf.HaAcceptMCoAReg = $2; -+ } - | HASERVEDPREFIX prefixlistentry ';' - { - list_splice(&prefixes, -@@ -375,6 +393,9 @@ ifacedef : QSTRING ifacesub - memset(&ni, 0, sizeof(struct net_iface)); - ni.mip6_if_entity = MIP6_ENTITY_NO; - ni.mn_if_preference = POL_MN_IF_DEF_PREFERENCE; -+ ni.mn_if_bid = POL_MN_IF_DEF_BID; -+ ni.mn_if_bidprio = POL_MN_IF_DEF_BID_PRIORITY; -+ ni.mn_if_reliable = POL_MN_IF_DEF_RELIABLE; - } - ; - -@@ -392,7 +413,44 @@ ifaceopt : IFTYPE mip6entity ';' - } - | MNIFPREFERENCE NUMBER ';' - { -- ni.mn_if_preference = $2; -+ if (ni.mn_if_bid) { -+ uerror("You cannot set MnIfPreference if BID " -+ "is set. Use BidPriority instead."); -+ return -1; -+ } -+ ni.mn_if_preference = $2; -+ } -+ | BID NUMBER ';' -+ { -+ if (ni.mn_if_preference) { -+ uerror("If BID is set, you cannot set " -+ "MnIfPreference. Use BidPriority instead."); -+ return -1; -+ } -+ if ($2 < BULE_TABLE_MIN || $2 > BULE_TABLE_MAX) { -+ uerror("BID error (%d <= Bid <= %d)", -+ BULE_TABLE_MIN, BULE_TABLE_MAX); -+ return -1; -+ } -+ ni.mn_if_bid = $2; -+ } -+ | BIDPRIORITY NUMBER ';' -+ { -+ if (ni.mn_if_preference) { -+ uerror("You cannot set BidPriority if " -+ "MnIfPreference is set."); -+ return -1; -+ } -+ if ($2 < 1 || $2 > 255) { -+ uerror("BidPriotity error " -+ "(%d <= BidPriority <= %d)",1, 255); -+ return -1; -+ } -+ ni.mn_if_bidprio = $2; -+ } -+ | RELIABLE BOOL ';' -+ { -+ ni.mn_if_reliable = $2; - } - ; - -@@ -432,15 +490,28 @@ linksub : QSTRING '{' linkdefs '}' - INIT_LIST_HEAD(&nhai->ro_policies); - INIT_LIST_HEAD(&nhai->ha_list.home_agents); - INIT_LIST_HEAD(&nhai->mob_net_prefixes); -+ INIT_LIST_HEAD(&nhai->mcoa); - nhai->ha_list.dhaad_id = -1; - list_splice(&hai.ro_policies, &nhai->ro_policies); - list_splice(&hai.mob_net_prefixes, - &nhai->mob_net_prefixes); -+ list_splice(&hai.mcoa, &nhai->mcoa); -+ if (!hai.reg_mcoa) { -+ /* If MCoA registration is not used, we -+ * initialize nhai->current_coa -+ */ -+ nhai->current_coa = malloc(sizeof(struct mn_addr)); -+ if (nhai->current_coa == NULL) { -+ uerror("out of memory"); -+ return -1; -+ } -+ } - list_add_tail(&nhai->list, &conf.home_addrs); - - memset(&hai, 0, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&hai.ro_policies); - INIT_LIST_HEAD(&hai.mob_net_prefixes); -+ INIT_LIST_HEAD(&hai.mcoa); - } - ; - -@@ -468,6 +539,11 @@ linkdef : HOMEAGENTADDRESS ADDR ';' - ipv6_addr_prefix(&hai.home_prefix, &$2, $4); - hai.home_plen = $4; - } -+ | REGMULTIPLECOA BOOL ';' -+ { -+ hai.reg_mcoa = $2; -+ } -+ | IFMULTIPLECOA iflist ';' - ; - - homeaddress : homeaddrdef prefixlistsub -@@ -695,7 +771,12 @@ bindaclpolval : BOOL - | NUMBER { $$ = $1; } - ; - --bindaclpolicy : ADDR prefixlistsub bindaclpolval -+mcoapolval : MCOAREG { $$ = 1; } -+ | NOMCOAREG { $$ = 0; } -+ | '' { $$ = 0; } -+ ; -+ -+bindaclpolicy : ADDR prefixlistsub mcoapolval bindaclpolval - { - bae = malloc(sizeof(struct policy_bind_acl_entry)); - if (bae == NULL) { -@@ -707,7 +788,8 @@ bindaclpolicy : ADDR prefixlistsub binda - bae->plen = 128; - INIT_LIST_HEAD(&bae->mob_net_prefixes); - bae->mnp_count = mv_prefixes(&bae->mob_net_prefixes); -- bae->bind_policy = $3; -+ bae->mcoa_reg = $3; -+ bae->bind_policy = $4; - list_add_tail(&bae->list, &conf.bind_acl); - } - ; -@@ -745,4 +827,58 @@ prefixlistentry : ADDR '/' prefixlen - list_add_tail(&p->list, &prefixes); - } - ; -+ -+iflist : iflistentry -+ | iflist ',' iflistentry -+ ; -+ -+iflistentry : QSTRING -+ { -+ struct mn_addr *mncoa; -+ struct list_head *l; -+ int declared = 0, bid = 0; -+ -+ /* Check that this interface has been -+ * previously declared as "Interface" */ -+ list_for_each(l, &conf.net_ifaces) { -+ struct net_iface *ni; -+ ni = list_entry(l, struct net_iface, -+ list); -+ -+ if(if_nametoindex($1) == ni->ifindex) { -+ declared = 1; -+ bid = ni->mn_if_bid; -+ break; -+ } -+ } -+ -+ if(!declared) { -+ uerror("Interface %s has not been " -+ "declared as Interface\n", $1); -+ return -1; -+ } -+ -+ if(!bid) { -+ uerror("Interface %s has no BID " -+ "although you declared it in " -+ "IfMultipleCoA\n", $1); -+ return -1; -+ } -+ -+ mncoa = malloc(sizeof(struct mn_addr)); -+ if (mncoa == NULL) { -+ fprintf(stderr, "%s: out of memory\n", -+ __FUNCTION__); -+ return -1; -+ } -+ memset(mncoa, 0, sizeof(struct mn_addr)); -+ if ((mncoa->iif = if_nametoindex($1)) == 0) { -+ fprintf(stderr, "%s: %s is not a valid " -+ "interface name\n", __FUNCTION__, $1); -+ return -1; -+ } -+ free($1); -+ list_add_tail(&mncoa->list, &hai.mcoa); -+ } -+ ; - %% -diff -r 82fcd4bea972 src/ha.c ---- a/src/ha.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/ha.c Fri Jan 11 17:02:25 2008 +0100 -@@ -59,6 +59,14 @@ - #include "xfrm.h" - #include "ndisc.h" - #include "prefix.h" -+ -+#define HA_DEBUG_LEVEL 1 -+ -+#if HA_DEBUG_LEVEL >= 1 -+#define MDBG dbg -+#else -+#define MDBG(...) -+#endif /* MDBG */ - - static pthread_mutex_t bu_worker_mutex; - static volatile unsigned long bu_worker_count = 0; -@@ -504,7 +512,7 @@ static int ha_vt_init(void) - - static void nemo_ha_del_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, -- int ifindex, int all) -+ int table, int ifindex, int all) - { - struct list_head *list; - list_for_each(list, old_mnps) { -@@ -514,14 +522,22 @@ static void nemo_ha_del_mnp_routes(struc - prefix_list_find(new_mnps, &p->ple_prefix, p->ple_plen)) - continue; - -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, table, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL); -+ -+ /* MCoA -+ * Delete the MNP fwmark rule -+ */ -+ if(table != RT6_TABLE_MIP6) -+ rule_del(NULL, table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ table, RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0); - } - } - - static int nemo_ha_add_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, -- int ifindex, int all) -+ int table, int ifindex, int all) - { - struct list_head *list; - list_for_each(list, new_mnps) { -@@ -530,11 +546,89 @@ static int nemo_ha_add_mnp_routes(struct - if (!all && - prefix_list_find(old_mnps, &p->ple_prefix, p->ple_plen)) - continue; -- if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ if (route_add(ifindex, table, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL) < 0) - return -1; -+ /* MCoA -+ * Add the MNP fwmark rule -+ */ -+ if(table != RT6_TABLE_MIP6 -+ && rule_add(NULL, table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ table, RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0) < 0) -+ return -1; - } -+ return 0; -+} -+ -+static int mcoa_ha_init_rt_table(struct bcentry *bce) -+{ -+ /* MCoA TODO2 -+ * At the moment, the routing table number is the BID number. -+ * BID thus must be between BCE_TABLE_MIN and BCE_TABLE_MAX -+ */ -+ assert(bce); -+ -+ /* If BID is not assigned, default table is taken */ -+ if (!bce->bid) -+ return (bce->table = RT6_TABLE_MIP6); -+ -+ if (bce->bid >= BCE_TABLE_MIN && bce->bid <= BCE_TABLE_MAX) -+ return (bce->table = bce->bid); -+ -+ return -1; -+} -+ -+static int mcoa_ha_del_dflt_rules(struct bcentry *bce) -+{ -+ struct list_head *list; -+ struct prefix_list_entry *pfx; -+ struct bcentry *best_bce = bce; -+ const struct in6_addr *peer_addr = &bce->peer_addr; -+ int8_t priority = 0; -+ -+ MDBG("Current BCE has the best priority (%d), " -+ "erasing default rules\n", best_bce->priority); -+ -+ /* Erase the default HoA rule */ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Erase the default MNP rules */ -+ list_for_each(list, &bce->mob_net_prefixes) { -+ pfx = list_entry(list, struct prefix_list_entry, list); -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ } -+ -+ /* Create new rule with next best bce available */ -+ priority = bce->priority; -+ bce->priority = 0; -+ bcache_iterate_in(&bce->peer_addr, bce_highest_priority, -+ &best_bce); -+ bce->priority = priority; -+ -+ if(best_bce != bce) { -+ MDBG("Rules replaced with BCE prio %d\n", -+ best_bce->priority); -+ rule_add(NULL, best_bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Default prefix rules */ -+ list_for_each(list, &bce->mob_net_prefixes) { -+ pfx = list_entry(list, -+ struct prefix_list_entry, list); -+ rule_add(NULL, best_bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ } -+ } else -+ MDBG("No other BCE available, no dflt rules added\n"); -+ - return 0; - } - -@@ -544,10 +638,49 @@ struct home_tnl_ops_parm { - struct list_head mob_net_prefixes; - }; - -+static int mcoa_ha_add_dflt_rules(struct home_tnl_ops_parm *p) -+{ -+ struct list_head *list; -+ struct bcentry *bce = p->bce; -+ const struct in6_addr *peer_addr = &bce->peer_addr; -+ -+ MDBG("BCE has the best priority (%d), adding default HoA " -+ "and prefix rules\n", bce->priority); -+ -+ /* Erase the default HoA rule */ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Add the default HoA rule */ -+ if (rule_add(NULL, bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0) < 0) -+ return -1; -+ -+ /* Delete and add the default prefix rules */ -+ list_for_each(list, &p->mob_net_prefixes) { -+ struct prefix_list_entry *pfx; -+ pfx = list_entry(list, struct prefix_list_entry, list); -+ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ -+ if (rule_add(NULL, bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0) < 0) -+ return -1; -+ } -+ -+ return 0; -+} -+ - static int home_tnl_del(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; -+ struct bcentry *best_bce = NULL; - - assert(old_if); - -@@ -565,12 +698,33 @@ static int home_tnl_del(int old_if, int - ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel, mnp); - } - /* delete HoA route */ -+ /* MCoA: The route is deleted in the table given by p->bce->table */ -+ /* RKRK: for the moment the route is installed in the MAIN table. -+ * See home_tnl_add */ -+ //MDBG("Deleting old default route in table %d\n", p->bce->table); -+ MDBG("Deleting old default route in table %d\n", RT6_TABLE_MAIN); -+ //route_del(old_if, p->bce->table, - route_del(old_if, RT6_TABLE_MAIN, - IP6_RT_PRIO_MIP6_FWD, NULL, 0, peer_addr, 128, NULL); -- -+ - /* delete MNP routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -- &p->mob_net_prefixes, old_if, 1); -+ &p->mob_net_prefixes, p->bce->table, -+ old_if, 1); -+ /* MCoA -+ * Delete the HoA and fwmark rules, and if needed replace -+ * the default HoA and MNP rules with the best available one -+ */ -+ if(p->bce->table != RT6_TABLE_MIP6) { -+ rule_del(NULL, p->bce->table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ p->bce->table, RTN_UNICAST, &in6addr_any, 0, -+ peer_addr, 128, 0); -+ best_bce = p->bce; -+ bcache_iterate_in(&p->bce->peer_addr, -+ bce_highest_priority, &best_bce); -+ if(best_bce == p->bce) -+ mcoa_ha_del_dflt_rules(p->bce); -+ } - /* update tunnel interface */ - p->bce->tunnel = new_if; - -@@ -581,6 +735,7 @@ static int home_tnl_add(int old_if, int - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; -+ struct bcentry *best_bce = NULL; - - assert(new_if); - -@@ -596,7 +751,8 @@ static int home_tnl_add(int old_if, int - - /* add MNP routes */ - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -- &p->mob_net_prefixes, new_if, 1) < 0) { -+ &p->mob_net_prefixes, p->bce->table, -+ new_if, 1) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; - else -@@ -604,11 +760,38 @@ static int home_tnl_add(int old_if, int - goto err; - } - /* add HoA route */ -+ /* MCoA: The route is added in the table given by p->bce->table */ -+ /* RKRK: does not work. Route has to be added in the MAIN table. -+ * Need to check why! */ -+ //MDBG("Adding route in table %d via iface %d\n", p->bce->table, new_if); -+ MDBG("Adding route in table %d via iface %d\n", RT6_TABLE_MAIN, new_if); -+ //if (route_add(new_if, p->bce->table, - if (route_add(new_if, RT6_TABLE_MAIN, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, peer_addr, 128, NULL) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; -+ } -+ /* MCoA -+ * Add the HoA and fwmark rules, and if needed replace -+ * the default HoA and MNP rules with the best available one -+ */ -+ if (p->bce->table != RT6_TABLE_MIP6) { -+ if (rule_add(NULL, p->bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_FWM, -+ p->bce->table, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0) < 0) { -+ p->ba_status = IP6_MH_BAS_INSUFFICIENT; -+ goto err; -+ } -+ best_bce = p->bce; -+ bcache_iterate_in(&p->bce->peer_addr, -+ bce_highest_priority, &best_bce); -+ if(best_bce == p->bce -+ && mcoa_ha_add_dflt_rules(p) < 0) { -+ p->ba_status = IP6_MH_BAS_INSUFFICIENT; -+ goto err; -+ } - } - /* add SP entry */ - if (conf.UseMnHaIPsec) { -@@ -664,9 +847,11 @@ static int home_tnl_chg(int old_if, int - /* Do the same for routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, -+ p->bce->table, - old_if, 0); - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, -+ p->bce->table, - new_if, 0) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; -@@ -707,12 +892,22 @@ static int home_tnl_ops(int request, int - - static void home_cleanup(struct bcentry *bce) - { -- mpd_cancel_mpa(&bce->our_addr, &bce->peer_addr); -+ int nb_entry = mcoa_bce_count(&bce->peer_addr); -+ -+ /* MCoA -+ * MPA is canceled if this is the last BCE entry -+ */ -+ if (nb_entry == 1) -+ mpd_cancel_mpa(&bce->our_addr, &bce->peer_addr); - - if (bce->link > 0) { -- route_del(bce->link, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ route_del(bce->link, bce->table, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, NULL); -- proxy_nd_stop(bce->link, &bce->peer_addr, bce->flags); -+ /* MCoA -+ * Proxy ND is stopped if this is the last BCE entry -+ */ -+ if (nb_entry == 1) -+ proxy_nd_stop(bce->link, &bce->peer_addr, bce->flags); - } - if (bce->tunnel > 0) { - struct home_tnl_ops_parm p = { -@@ -724,6 +919,9 @@ static void home_cleanup(struct bcentry - if (conf.UseMnHaIPsec) { - ha_mn_ipsec_pol_mod(&bce->our_addr, &bce->peer_addr); - } -+ -+ /* MCoA: Freeing the BCE's MNPs list */ -+ prefix_list_free(&bce->mob_net_prefixes); - } - - -@@ -800,19 +998,28 @@ static void *ha_recv_bu_worker(void *var - { - struct ha_recv_bu_args *arg = varg; - struct in6_addr_bundle out; -- struct bcentry *bce; -+ struct bcentry *bce, *bce_exists; - struct timespec lft, tmp; -- int iif, status, new, home_ifindex; -- uint16_t bu_flags, seqno; -- uint8_t ba_flags; -+ int iif, status, status_bid, new, home_ifindex; -+ int update_dflt_table; -+ uint16_t bu_flags, seqno, bid; -+ uint8_t ba_flags, bid_priority, bid_flags; - struct home_tnl_ops_parm p; -+ struct ip6_mh_opt_bid *bid_opt; - - pthread_dbg("thread started"); - restart: - home_ifindex = 0; - new = 0; -+ bid = 0; -+ bid_priority = 0; -+ bid_flags = 0; -+ update_dflt_table = 0; - ba_flags = 0; -- lft = arg->lft; -+ status = IP6_MH_BAS_UNSPECIFIED; -+ status_bid = 0; -+ bce = NULL; -+ lft = arg->lft; - iif = arg->iif; - bu_flags = arg->bu->ip6mhbu_flags; - seqno = ntohs(arg->bu->ip6mhbu_seqno); -@@ -827,8 +1034,79 @@ restart: - else - out.bind_coa = NULL; - out.local_coa = NULL; -+ bid_opt = NULL; - -- bce = bcache_get(out.src, out.dst); -+ /* MCoA -+ * We check if a BCE already exists for this HoA -+ * We take the first one available -+ */ -+ bce_exists = bcache_get(out.src, out.dst, MCOA_NO_BID); -+ if(bce_exists) -+ bcache_release_entry(bce_exists); -+ -+ /* MCoA -+ * we need the BID before looking at the BCE -+ */ -+ bid_opt = mh_opt(&arg->bu->ip6mhbu_hdr, -+ &arg->mh_opts, -+ IP6_MHOPT_BID); -+ -+ if (bid_opt && !default_mcoa_reg(out.dst)) { -+ /* MCoA: BAck without BID option will be sent */ -+ MDBG("BUI option, but MCoA registration not allowed.\n"); -+ } else if (bid_opt) { -+ MDBG("BUI option, and HA is configured for MCoA.\n"); -+ bid = ntohs(bid_opt->ip6mobid_bid); -+ bid_priority = bid_opt->ip6mobid_priority; -+ bid_flags = ntohs(bid_opt->ip6mobid_reserved); -+ -+ if (!bid) { -+ MDBG("BID invalid, BU discarded.\n"); -+ goto out; -+ } -+ -+ MDBG("BID = %d, Priority = %d\n", bid, bid_priority); -+ /* MCoA TODO1 -+ * if B flag is set but no altcoa option: -+ * BAck status 145. -+ * To update according to latest draft. -+ */ -+ if (bid_flags & IP6_OPT_BID_BULK) { -+ /* MCoA TODO1 -+ * At the moment we do not check the AltCoA option, -+ * and just reject the BU if B flag is set -+ */ -+ MDBG("BULK Reg., but not supported yet.\n"); -+ status = IP6_MH_BAS_MCOA_BULK_FAILED; -+ goto send_nack; -+ } -+ if (bce_exists && !bce_exists->bid) { -+ /* MCoA -+ * The BCE has a BID = 0, this means no MCoA -+ * are registered. We delete the entry and set -+ * BA status to 144. -+ * New registratration is done later -+ */ -+ MDBG("BID option but BCE has no BID\n"); -+ MDBG("Delete BCE and register new one.\n"); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); -+ status_bid = IP6_MH_BAS_CONFLICT_BINDING; -+ } -+ } else /* No BUI option in BU */ { -+ if(tsisset(lft) && bce_exists && bce_exists->bid) { -+ /* MCoA -+ * A BCE exists with a BID != 0 but no BUI -+ * sub-option are set in the BU: we delete -+ * all existing entries for this HoA. New -+ * registration is done later. -+ */ -+ MDBG("No BID option but BCE has BID.\n"); -+ MDBG("Delete all BCE and register new one.\n"); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); -+ } -+ } -+ -+ bce = bcache_get(out.src, out.dst, bid); - if (bce) { - if (bce->type != BCE_NONCE_BLOCK) { - /* H-bit or R-bit mismatch, flags changed */ -@@ -873,7 +1151,7 @@ restart: - goto send_nack; - } - /* else get rid of it */ -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - } - } else if (!tsisset(lft)) { - status = IP6_MH_BAS_NOT_HA; -@@ -895,6 +1173,10 @@ restart: - out.src, arg->bu, arg->len); - if (status >= IP6_MH_BAS_UNSPECIFIED) - goto send_nack; -+ -+ if(status_bid) -+ status = status_bid; -+ - /* lifetime may be further decreased by local policy */ - if (conf.pmgr.max_binding_life(out.dst, out.bind_coa, out.src, - arg->bu, arg->len, &lft, &tmp)) { -@@ -916,24 +1198,38 @@ restart: - bce->type = BCE_DAD; - bce->cleanup = NULL; - bce->link = home_ifindex; -- -+ bce->bid = bid; -+ bce->priority = bid_priority; -+ if(bce_exists) -+ bce->xfrm_create = 0; -+ else -+ bce->xfrm_create = 1; -+ -+ /* MCoA: Initialize the routing table used by the BCE */ -+ if(mcoa_ha_init_rt_table(bce) < 0) { -+ free(bce); -+ bce = NULL; -+ status = IP6_MH_BAS_INSUFFICIENT; -+ goto send_nack; -+ } - if (bcache_add_homereg(bce) < 0) { - free(bce); - bce = NULL; - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -- if (!(arg->flags & HA_BU_F_SKIP_DAD)) { -+ /* MCoA: Do DAD only if no entries yet for this HoA */ -+ if (!(arg->flags & HA_BU_F_SKIP_DAD) && !bce_exists) { - /* Do DAD for home address */ - if (ndisc_do_dad(home_ifindex, out.dst, - bu_flags & IP6_MH_BU_LLOCAL) < 0) { -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - bce = NULL; - status = IP6_MH_BAS_DAD_FAILED; - goto send_nack; - } - } -- bce = bcache_get(out.src, out.dst); -+ bce = bcache_get(out.src, out.dst, bid); - if (!bce) { - BUG("BCE deleted before DAD completed!"); - status = IP6_MH_BAS_UNSPECIFIED; -@@ -965,6 +1261,7 @@ restart: - bce->seqno = seqno; - bce->flags = bu_flags; - bce->lifetime = lft; -+ - if (new) { - if (tunnel_add(out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { -@@ -979,7 +1276,8 @@ restart: - - bce->cleanup = home_cleanup; - -- if (route_add(bce->link, RT6_TABLE_MIP6, -+ /* MCoA: The route is added in the table given by the BCE */ -+ if (route_add(bce->link, bce->table, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, - NULL) < 0) { -@@ -987,16 +1285,23 @@ restart: - goto send_nack; - } - -- if (proxy_nd_start(bce->link, out.dst, out.src, -- bu_flags) < 0) { -- status = IP6_MH_BAS_INSUFFICIENT; -- goto send_nack; -+ /* MCoA: Do Proxy ND only if no entries yet for this HoA */ -+ if (!bce_exists) { -+ if (proxy_nd_start(bce->link, out.dst, -+ out.src, bu_flags) < 0) { -+ status = IP6_MH_BAS_INSUFFICIENT; -+ goto send_nack; -+ } - } - bce->type = BCE_HOMEREG; - bcache_complete_homereg(bce); - } else { - bce->old_coa = bce->coa; - bce->coa = *out.bind_coa; -+ if (tsisset(lft)) { -+ bce->bid = bid; -+ bce->priority = bid_priority; -+ } - if (tunnel_mod(bce->tunnel, out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { - if (p.ba_status >= IP6_MH_BAS_UNSPECIFIED) -@@ -1006,15 +1311,24 @@ restart: - goto send_nack; - } - /* Now update the MNP list in the BCE */ -- prefix_list_free(&bce->mob_net_prefixes); -- list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -- -+ /* MCoA: the update is done only if this is not a -+ * deregistration BU, otherwise MNPs are erased from the BCE -+ * (the dereg BU does not have any MNP option), thus there -+ * is a problem to update the fwmark MNP rules -+ */ -+ if (tsisset(lft)) { -+ prefix_list_free(&bce->mob_net_prefixes); -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ } - bcache_update_expire(bce); - } - /* bce is always valid here */ - bcache_release_entry(bce); - if (!tsisset(lft)) -- bcache_delete(out.src, out.dst); -+ /* MCoA: We delete one specific entry (bid is set) -+ * or all entries for this HoA (if bid is set to 0) -+ */ -+ bcache_delete(out.src, out.dst, bid); - - if ((bu_flags & IP6_MH_BU_KEYM) && - conf.pmgr.use_keymgm(out.dst, out.src)) -@@ -1035,12 +1349,16 @@ restart: - * have a binding before sending this Binding Update, - * discard the connections to the home address. */ - } -- if (status < IP6_MH_BAS_UNSPECIFIED && bu_flags & IP6_MH_BU_MR) -+ if ((status < IP6_MH_BAS_UNSPECIFIED -+ || status == IP6_MH_BAS_CONFLICT_BINDING) -+ && bu_flags & IP6_MH_BU_MR) - ba_flags |= IP6_MH_BA_MR; - - if (!(arg->flags & HA_BU_F_SKIP_BA)) -- mh_send_ba(&out, status, ba_flags, seqno, &lft, NULL, iif); -- if (new && tsisset(lft)) -+ mh_send_ba(&out, status, ba_flags, seqno, &lft, -+ bid, bid_priority, NULL, iif); -+ /* 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); - out: - free(arg); -@@ -1060,10 +1378,12 @@ send_nack: - send_nack: - if (bce) { - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - } - if (!(arg->flags & HA_BU_F_SKIP_BA)) -- mh_send_ba_err(&out, status, 0, seqno, NULL, iif); -+ /* MCoA: Specify the BID and BID priority to the BAck */ -+ mh_send_ba_err(&out, status, 0, seqno, bid, -+ bid_priority, NULL, iif); - goto out; - } - -@@ -1089,12 +1409,13 @@ int ha_recv_bu_main(const struct ip6_mh - - arg = malloc(sizeof(struct ha_recv_bu_args) + len); - if (!arg) { -- if (bce_exists(out.src, out.dst)) -- bcache_delete(out.src, out.dst); -+ if (bce_exists(out.src, out.dst, MCOA_NO_BID)) -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba_err(&out, IP6_MH_BAS_INSUFFICIENT, 0, -- ntohs(bu->ip6mhbu_seqno), NULL, iif); -+ ntohs(bu->ip6mhbu_seqno), 0, 0, -+ NULL, iif); - return -ENOMEM; - } - arg->src = *out.src; -@@ -1166,8 +1487,9 @@ int ha_init(void) - return -1; - if (mpd_ha_init() < 0) - return -1; -+ /* MCoA: Rule to the default table (RT6_TABLE_MIP6) */ - if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0) < 0) - return -1; - icmp6_handler_reg(ND_ROUTER_ADVERT, &ha_ra_handler); -@@ -1185,7 +1507,7 @@ void ha_cleanup(void) - pthread_mutex_unlock(&bu_worker_mutex); - bcache_flush(); - rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0); - mpd_ha_cleanup(); - dhaad_ha_cleanup(); -diff -r 82fcd4bea972 src/hash.c ---- a/src/hash.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/hash.c Fri Jan 11 17:02:25 2008 +0100 -@@ -47,6 +47,7 @@ struct hash_entry { - struct hash_entry { - struct in6_addr *our_addr; /* pointer to our_addr in data */ - struct in6_addr *peer_addr; /* pointer to peer_addr in data */ -+ uint16_t *bid; /* pointer to bid in data, can be NULL */ - struct hash_entry *next; - void *data; - }; -@@ -78,7 +79,7 @@ static uint32_t calc_hash1(int s, const - } - - static int match2(struct hash_entry *h, const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, uint16_t bid) - { - assert(h); - assert(our_addr && h->our_addr); -@@ -89,9 +90,15 @@ static int match2(struct hash_entry *h, - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); - printf("our_addr %s\n", inet_ntop(AF_INET6, our_addr, s, sizeof(s))); - printf("h->our_addr %s\n", inet_ntop(AF_INET6, h->our_addr, s, sizeof(s))); -+ printf("bid %d\n", bid); -+ if(h->bid != NULL) -+ printf("h->bid %d\n", *(h->bid)); -+ else -+ printf("h->bid is NULL\n"); - #endif - if (IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr) && -- IN6_ARE_ADDR_EQUAL(h->our_addr, our_addr)) { -+ IN6_ARE_ADDR_EQUAL(h->our_addr, our_addr) && -+ (bid == 0 || (h->bid != NULL && bid == *(h->bid)))) { - return 1; - } - return 0; -@@ -99,7 +106,7 @@ static int match2(struct hash_entry *h, - } - - static int match1(struct hash_entry *h, const struct in6_addr *dummy, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, uint16_t bid) - { - assert(h); - assert(h->peer_addr && peer_addr); -@@ -107,8 +114,14 @@ static int match1(struct hash_entry *h, - char s[INET6_ADDRSTRLEN]; - printf("match1: peer %s\n", inet_ntop(AF_INET6, peer_addr, s, sizeof(s))); - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); -+ printf("bid %d\n", bid); -+ if(h->bid != NULL) -+ printf("h->bid %d\n", *(h->bid)); -+ else -+ printf("h->bid is NULL\n"); - #endif -- if (!IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr)) -+ if (!IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr) || -+ (bid !=0 && h->bid != NULL && bid != *(h->bid))) - return 0; - return 1; - } -@@ -155,7 +168,8 @@ void hash_cleanup(struct hash *h) - - void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct hash_entry *hptr = NULL; - -@@ -165,7 +179,7 @@ void *hash_get(const struct hash *h, - hptr = h->hash_buckets[h->calc_hash(h->buckets, our_addr , peer_addr)]; - - while(hptr) { -- if (h->match(hptr, our_addr, peer_addr)) -+ if (h->match(hptr, our_addr, peer_addr, bid)) - return hptr->data; - hptr = hptr->next; - } -@@ -173,7 +187,8 @@ void *hash_get(const struct hash *h, - } - - int hash_add(const struct hash *h, void *data, -- struct in6_addr *our_addr, struct in6_addr *peer_addr) -+ struct in6_addr *our_addr, struct in6_addr *peer_addr, -+ uint16_t *bid) - { - struct hash_entry *hptr = NULL, *new; - uint32_t hash_ind; -@@ -185,17 +200,19 @@ int hash_add(const struct hash *h, void - assert(peer_addr); - - if ((new = (struct hash_entry *)malloc(sizeof(struct hash_entry))) == NULL) { -- dbg("out of memeory\n"); -+ dbg("out of memory\n"); - return -ENOMEM; - } - new->our_addr = our_addr; - new->peer_addr = peer_addr; - new->data = data; -+ new->bid = bid; - hash_ind = h->calc_hash(h->buckets, our_addr, peer_addr); - hptr = h->hash_buckets[hash_ind]; - if (hptr) { - while (hptr->next){ -- if (h->match(hptr, our_addr, peer_addr)) { -+ if (h->match(hptr, our_addr, peer_addr, -+ (bid) ? (*bid) : 0)) { - free(new); - return -EEXIST; - } -@@ -231,9 +248,35 @@ int hash_iterate(const struct hash *h, i - return 0; - } - -+int hash_iterate_in(const struct hash *h, -+ const struct in6_addr *peer_addr, -+ int (*func)(void *, void *), -+ void *arg) -+{ -+ int err = 0; -+ int i; -+ struct hash_entry *hptr, *nptr; -+ -+ assert(func); -+ -+ for (i=0; i < h->buckets; i++) { -+ if((hptr = h->hash_buckets[i]) != NULL) { -+ while(hptr) { -+ nptr = hptr->next; -+ if (IN6_ARE_ADDR_EQUAL(hptr->peer_addr, peer_addr) -+ && (err = func(hptr->data, arg))) -+ return err; -+ hptr = nptr; -+ } -+ } -+ } -+ return 0; -+} -+ - void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct hash_entry *hptr, *pptr, *head; - int hash_ind; -@@ -247,7 +290,7 @@ void hash_delete(const struct hash *h, - - pptr = hptr = head; - while (hptr) { -- if (h->match(hptr, our_addr, peer_addr)){ -+ if (h->match(hptr, our_addr, peer_addr, bid)){ - if (hptr != head) - pptr->next = hptr->next; - else { -diff -r 82fcd4bea972 src/hash.h ---- a/src/hash.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/hash.h Fri Jan 11 17:02:25 2008 +0100 -@@ -20,7 +20,9 @@ struct hash { - int buckets; - int type; - uint32_t (*calc_hash)(int, const struct in6_addr *, const struct in6_addr *); -- int (*match)(struct hash_entry *, const struct in6_addr *, const struct in6_addr *); -+ int (*match)(struct hash_entry *, const struct in6_addr *, -+ const struct in6_addr *, uint16_t); -+ - struct hash_entry **hash_buckets; - }; - -@@ -37,19 +39,24 @@ int hash_init(struct hash *h, int type, - */ - void hash_cleanup(struct hash *h); - /* -- * Get data stored in a hash entry based on one or two addresses, depending on type of hash -+ * Get data stored in a hash entry based on one or two addresses and the bid, -+ * depending on type of hash. bid=0 means we do not use bid as a search key. - */ - void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) ; -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - /* Iterate through the hash and call func for every entry */ - - int hash_iterate(const struct hash *h, int (*func)(void *data, void *arg), void *arg); -+int hash_iterate_in(const struct hash *h, const struct in6_addr *peer_addr, -+ int (*func)(void *, void *), void *arg); - - /* Add a hash entry to hash */ - int hash_add(const struct hash *h, void *data, -- struct in6_addr *our_addr, struct in6_addr *peer_addr); -+ struct in6_addr *our_addr, struct in6_addr *peer_addr, -+ uint16_t *bid); - - /* - *Delete entry from hash -@@ -57,6 +64,7 @@ int hash_add(const struct hash *h, void - - void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - #endif /* _HASH_H */ -diff -r 82fcd4bea972 src/mh.c ---- a/src/mh.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mh.c Fri Jan 11 17:02:25 2008 +0100 -@@ -77,6 +77,7 @@ int mh_opts_dup_ok[] = { - 0, /* Nonce Index */ - 0, /* Binding Auth Data */ - 1, /* Mobile Network Prefix */ -+ 1 /* Binding Unique Identifier */ - }; - - #define __MH_SENTINEL (IP6_MH_TYPE_MAX + 1) -@@ -443,6 +444,41 @@ int mh_create_opt_mob_net_prefix(struct - return 0; - } - -+/* MCoA -+ * mh_create_opt_bid - Create a Binding Unique Identifier Option -+ * MCoA TODO1: need to be adapted for BULK registration -+ */ -+int mh_create_opt_bid(struct iovec *iov, uint16_t bid, -+ uint8_t priority, uint8_t bid_flags) -+{ -+ int optlen = sizeof(struct ip6_mh_opt_bid); -+ struct ip6_mh_opt_bid *opt_bid; -+ 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_bid = (struct ip6_mh_opt_bid *)data; -+ -+ opt_bid->ip6mobid_type = IP6_MHOPT_BID; -+ opt_bid->ip6mobid_len = 4; -+ opt_bid->ip6mobid_bid = htons(bid); -+ opt_bid->ip6mobid_priority = priority; -+ opt_bid->ip6mobid_reserved |= bid_flags; -+ -+ data += sizeof(struct ip6_mh_opt_bid); -+ MDBG("BUI sub-option created with BID = %d and priority %d\n", -+ bid, priority); -+ -+ return 0; -+} -+ - static size_t mh_length(struct iovec *vec, int count) - { - size_t len = 0; -@@ -487,6 +523,9 @@ static int mh_try_pad(const struct iovec - case IP6_MHOPT_MOB_NET_PRFX: - pad = optpad(8, 4, len); /* 8n+4 */ - break; -+ case IP6_MHOPT_BID: -+ pad = optpad(2, 0, len); /* 2n */ -+ break; - } - if (pad > 0) { - create_opt_pad(&out[n++], pad); -@@ -497,9 +536,10 @@ static int mh_try_pad(const struct iovec - out[n].iov_base = in[m].iov_base; - n++; - } -- if (count == 1) { -+ if (count == 1 || len%8 != 0) { - pad = optpad(8, 0, len); - create_opt_pad(&out[n++], pad); -+ MDBG("Added %d bytes for padding\n", pad); - } - - return n; -@@ -984,11 +1024,14 @@ void mh_send_brr(struct in6_addr *mn_add - - void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, -- const struct timespec *lifetime, const uint8_t *key, int iif) -+ const struct timespec *lifetime, -+ const uint16_t bid, -+ const uint8_t priority, -+ const uint8_t *key, int iif) - { - int iovlen = 1; - struct ip6_mh_binding_ack *ba; -- struct iovec mh_vec[2]; -+ struct iovec mh_vec[3]; - - MDBG("status %d\n", status); - -@@ -1012,6 +1055,9 @@ void mh_send_ba(const struct in6_addr_bu - } - if (key) - mh_create_opt_auth_data(&mh_vec[iovlen++]); -+ /* MCoA: Create Binding Unique Identifier Option if needed */ -+ if (bid) -+ mh_create_opt_bid(&mh_vec[iovlen++], bid, priority, 0); - mh_send(addrs, mh_vec, iovlen, key, iif); - free_iov_data(mh_vec, iovlen); - } -@@ -1058,8 +1104,11 @@ int mh_bu_parse(struct ip6_mh_binding_up - return -1; - if (!IN6_ARE_ADDR_EQUAL(out_addrs->bind_coa, peer_addr)) { - /* check that there is no circular reference */ -- if (bce_exists(our_addr, out_addrs->bind_coa)) -+ if (bce_exists(our_addr, out_addrs->bind_coa, -+ MCOA_NO_BID)) { -+ MDBG("Circular reference found in BC\n"); - return -1; -+ } - tssetsec(*lifetime, ntohs(bu->ip6mhbu_lifetime) << 2); - } - } -diff -r 82fcd4bea972 src/mh.h ---- a/src/mh.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mh.h Fri Jan 11 17:02:25 2008 +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_MOB_NET_PRFX -+#define IP6_MHOPT_MAX IP6_MHOPT_BID - - struct in6_addr_bundle { - struct in6_addr *src; -@@ -43,14 +43,20 @@ void mh_send_ba(const struct in6_addr_bu - void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, - const struct timespec *lifetime, -+ const uint16_t bid, -+ const uint8_t priority, - const uint8_t *key, int iif); - - static inline void mh_send_ba_err(const struct in6_addr_bundle *addrs, - uint8_t status, uint8_t flags, -- uint16_t seqno, const uint8_t *key, int iif) -+ uint16_t seqno, -+ const uint16_t bid, -+ const uint8_t priority, -+ const uint8_t *key, int iif) - { - struct timespec zero = { 0, 0 }; -- mh_send_ba(addrs, status, flags, seqno, &zero, key, iif); -+ mh_send_ba(addrs, status, flags, seqno, &zero, -+ bid, priority, key, iif); - } - - void mh_send_be(struct in6_addr *dst, -@@ -78,6 +84,9 @@ struct list_head; - - int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, - struct list_head *mnps); -+ -+int mh_create_opt_bid(struct iovec *iov, uint16_t bid, uint8_t priority, -+ uint8_t bid_flags); - - static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) -diff -r 82fcd4bea972 src/mipv6.h ---- a/src/mipv6.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mipv6.h Fri Jan 11 17:02:25 2008 +0100 -@@ -23,6 +23,7 @@ - /* Constants below have no explicit names in the spec. */ - - #define MAX_BINDING_LIFETIME (0xffff << 2) /* seconds */ -+#define MCOA_NO_BID 0 /* BID is null */ - - /* Maximum time for a binding to be unused for CN to still send a BRR - * before the binding expires */ -diff -r 82fcd4bea972 src/mn.c ---- a/src/mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -35,6 +35,8 @@ - #include <errno.h> - #include <time.h> - #include <unistd.h> -+#include <sys/types.h> -+#include <signal.h> - - #include <netinet/icmp6.h> - #include <netinet/ip6mh.h> -@@ -94,10 +96,44 @@ const struct timespec min_valid_bu_lifet - const struct timespec min_valid_bu_lifetime_ts = - { MIN_VALID_BU_LIFETIME, 0 }; - -+struct flag_hoa_args { -+ struct home_addr_info *target; -+ struct bulentry *bule; -+ int flag; -+}; -+ - static int pending_bas = 0; - - static void mn_send_home_bu(struct home_addr_info *hai); - static int mn_ext_tunnel_ops(int request, int old_if, int new_if, void *data); -+static int flag_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg); -+static int mcoa_iface_rules_add(int iif, struct home_addr_info *hai); -+static struct bulentry* mcoa_iface_rules_del(int iif, -+ struct home_addr_info *hai, -+ int replace); -+static void mcoa_mn_rules_del(struct home_addr_info *hinfo); -+static int nemo_mr_rules_add(struct home_addr_info *hinfo); -+static void nemo_mr_rules_del(struct home_addr_info *hinfo); -+ -+static int mcoa_mn_init_rt_table(struct bulentry *bule) -+{ -+ /* MCoA TODO2 -+ * At the moment, the routing table number -+ * is the BID number. BID must be between -+ * BCE_TABLE_MIN and BCE_TABLE_MAX -+ */ -+ assert(bule); -+ -+ /* If BID is not assigned, default table is taken */ -+ if (!bule->bid) -+ return (bule->table = RT6_TABLE_MIP6); -+ -+ if (bule->bid >= BULE_TABLE_MIN && bule->bid <= BULE_TABLE_MAX) -+ return (bule->table = bule->bid); -+ -+ MDBG("Routing Table index is out of range"); -+ return -1; -+} - - static int mn_block_rule_del(struct home_addr_info *hai) - { -@@ -108,9 +144,9 @@ static int mn_block_rule_del(struct home - return ret; - } - -- if ((ret = rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, -- &hai->hoa.addr, 128, &in6addr_any, 0, -- FIB_RULE_FIND_SADDR)) < 0) -+ if ((ret = rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, 0, -+ RTN_BLACKHOLE, &hai->hoa.addr, 128, &in6addr_any, -+ 0, FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to delete blackhole rule.\n"); - else - hai->home_block &= ~HOME_ADDR_RULE_BLOCK; -@@ -126,9 +162,9 @@ static int mn_block_rule_add(struct home - MDBG("blackhole is already set.\n"); - return ret; - } -- if ((ret = rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, -- &hai->hoa.addr, 128, &in6addr_any, 0, -- FIB_RULE_FIND_SADDR)) < 0) -+ if ((ret = rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ 0, RTN_BLACKHOLE, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to add blackhole rule.\n"); - else - hai->home_block |= HOME_ADDR_RULE_BLOCK; -@@ -156,7 +192,10 @@ static void bule_invalidate(struct bulen - struct home_addr_info *hai = e->home; - struct in6_addr hoa, peer_addr; - int type = e->type; -+ int rules = e->rules; -+ int if_coa = e->if_coa; - uint16_t flags = e->flags; -+ uint16_t bid = e->bid; - - if (type != BUL_ENTRY) - return; -@@ -173,7 +212,7 @@ static void bule_invalidate(struct bulen - if (hai->at_home) - return; - -- e = create_bule(&hoa, &peer_addr); -+ e = create_bule(&hoa, &peer_addr, hai->reg_mcoa?bid:0); - - if (e == NULL) - return; -@@ -185,6 +224,19 @@ static void bule_invalidate(struct bulen - e->lifetime = NON_MIP_CN_LTIME_TS; - e->delay = NON_MIP_CN_LTIME_TS; - e->callback = bul_expire; -+ e->priority = get_prio_from_bid(e->bid); -+ e->mcoa_dereg = 0; -+ /* MCoA: No tunnels are linked to this BULE anymore */ -+ e->if_tunnel = 0; -+ /* MCoA: We prevent MIPL to install rules for this entry */ -+ e->rules = 1; -+ mcoa_mn_init_rt_table(e); -+ -+ /* MCoA: Erase rules corresponding to this BULE */ -+ /* TODO2: this should be done when bul is deleted */ -+ if(hai->reg_mcoa && rules) -+ mcoa_iface_rules_del(if_coa, hai, 1); -+ - if (bul_add(e) < 0) - bul_delete(e); - } -@@ -279,7 +331,10 @@ static void mn_recv_param_prob(const str - pthread_rwlock_wrlock(&mn_lock); - if (mn_rr_error_check(laddr, raddr, &addr)) - laddr = &addr; -- e = bul_get(NULL, laddr, raddr); -+ /* MCoA TODO1 -+ * All bule with same laddr, raddr should be invalidated -+ */ -+ e = bul_get(NULL, laddr, raddr, get_bid_from_ifindex(iif)); - if (e != NULL) { - if (e->flags & IP6_MH_BU_HOME) { - if (!conf.UseMnHaIPsec && -@@ -328,6 +383,19 @@ static int mn_send_bu_msg(struct bulentr - } - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; -+ /* MCoA TODO1: to update according to latest draft -+ * Binding Unique Identifier Option -+ * For deregistration, BUI option is sent only -+ * when some specific entry needs to be deleted. -+ * If all entries are deleted, no need to send BUI -+ */ -+ if ((bu->ip6mhbu_lifetime || !bule->mcoa_dereg) -+ && hai->reg_mcoa && bule->bid -+ && mh_create_opt_bid(&iov[iov_ind++], bule->bid, -+ bule->priority, 0) < 0) { -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } - 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++], -@@ -353,7 +421,29 @@ static int mn_send_bu_msg(struct bulentr - addrs.remote_coa = NULL; - addrs.bind_coa = &bule->coa; - -+ /* MCoA -+ * before sending BU, if !bule->rules then -+ * add rule from HoA to HA in table bule->table -+ * This to be able to send a BU if no rules are in -+ * the RPDB (eg. because of the Reliability option) -+ */ -+ if(bule->home->reg_mcoa && !bule->rules) -+ /* MCoA: Rule for HoA to HA from the MN */ -+ rule_add(NULL, bule->table, -+ IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, 0, RTN_UNICAST, -+ &bule->home->hoa.addr, 128, &bule->peer_addr, 128, -+ FIB_RULE_FIND_SADDR); -+ - ret = mh_send(&addrs, iov, iov_ind, bind_key, bule->if_coa); -+ -+ /* MCoA -+ * Delete the previously installed rule -+ */ -+ if(bule->home->reg_mcoa && !bule->rules) -+ rule_del(NULL, bule->table, -+ IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, 0, RTN_UNICAST, -+ &bule->home->hoa.addr, 128, &bule->peer_addr, 128, -+ FIB_RULE_FIND_SADDR); - - if (ret <= 0) - MDBG("mh_send failed ret: %d\n", ret); -@@ -363,15 +453,35 @@ static int mn_send_bu_msg(struct bulentr - return ret; - } - -+struct mn_addr *mcoa_get_current_coa(struct home_addr_info *hai, int iif) -+{ -+ struct list_head *l; -+ -+ if(!hai->reg_mcoa) -+ return hai->current_coa; -+ -+ 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 coa_entry; -+ } -+ -+ return NULL; -+} -+ - static int mn_get_home_lifetime(struct home_addr_info *hai, -- struct timespec *lifetime, int dereg) -+ struct timespec *lifetime, -+ int iif, int dereg) - { - if (!hai->at_home && !dereg) { -- struct mn_addr *coa = &hai->primary_coa; -+ /* MCoA: Pick up the CoA from the correct iface */ -+ struct mn_addr *coa = mcoa_get_current_coa(hai, iif); - struct timespec now; - unsigned long coa_lft; - unsigned long hoa_lft; - -+ assert(coa); - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, -@@ -403,16 +513,20 @@ static int mn_get_ro_lifetime(struct hom - if (!hai->at_home && !dereg) { - struct bulentry *e; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) { - MDBG("No valid home registration"); - } else { - struct timespec now; -- struct mn_addr *coa = &hai->primary_coa; -+ struct mn_addr *coa = hai->current_coa; - unsigned long coa_lft; - unsigned long home_lft; - -+ assert(coa); - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, -@@ -432,6 +546,21 @@ static int mn_get_ro_lifetime(struct hom - return 1; - } - -+/* MCoA -+ * Deregister a specific bule -+ */ -+static int mn_dereg_bule(struct bulentry *bule) -+{ -+ if (bule->type != NON_MIP_CN_ENTRY) { -+ bule->seq++; -+ bule->mcoa_dereg = 0; -+ tsclear(bule->lifetime); -+ mn_send_bu_msg(bule); -+ } -+ bul_delete(bule); -+ return 0; -+} -+ - static int mn_dereg(void *vbule, void *arg) - { - struct bulentry *bule = vbule; -@@ -445,7 +574,20 @@ static int mn_dereg(void *vbule, void *a - } - bule->seq++; - tsclear(bule->lifetime); -- mn_send_bu_msg(bule); -+ /* MCoA -+ * When a MN wants to deregister Multiple CoA, -+ * one BU is enough to deregister all the CoA -+ */ -+ if(bule->home->reg_mcoa && bule->mcoa_dereg) { -+ mn_send_bu_msg(bule); -+ /* MCoA -+ * Flag the other entries that match the -+ * peer address (to avoid sending multiple -+ * BUs) -+ */ -+ mcoa_bule_dereg(bule, 0); -+ } else if (!bule->home->reg_mcoa) -+ mn_send_bu_msg(bule); - } - bul_delete(bule); - return 0; -@@ -486,8 +628,9 @@ static int bu_lft_check(struct bulentry - int dereg; - - if (bule->flags & IP6_MH_BU_HOME) -- dereg = mn_get_home_lifetime(bule->home, &bule->lifetime, 0); -- else -+ dereg = mn_get_home_lifetime(bule->home, &bule->lifetime, -+ bule->if_coa, 0); -+ else - dereg = mn_get_ro_lifetime(bule->home, &bule->lifetime, - bule->dereg); - -@@ -544,6 +687,7 @@ static void bu_refresh(struct tq_elem *t - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); - int expired; -+ int iif = bule->if_coa; - MDBG("Bul refresh type: %d\n", bule->type); - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); -@@ -554,6 +698,10 @@ static void bu_refresh(struct tq_elem *t - - bule->seq++; - bule->callback = bu_resend; -+ /* MCoA : Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(iif) == 0) -+ mcoa_iface_rules_del(iif, bule->home, 1); - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - -@@ -626,14 +774,53 @@ static int mv_hoa(struct ifaddrmsg *ifa, - return 0; - } - --int nemo_mr_tnl_routes_add(struct home_addr_info *hai, int ifindex) -+/* -+ * Copy home address between two interfaces -+ */ -+static int cp_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) -+{ -+ struct mv_hoa_args *mha = arg; -+ struct home_addr_info *hai = mha->target; -+ struct mn_addr *hoa = &hai->hoa; -+ int err; -+ struct timespec now; -+ uint32_t preferred = PREFIX_LIFETIME_INFINITE; -+ uint32_t valid = PREFIX_LIFETIME_INFINITE; -+ int plen = (mha->if_next == hai->if_tunnel ? 128 : hai->plen); -+ -+ clock_gettime(CLOCK_REALTIME, &now); -+ -+ if (hai->lladdr_comp && rta_tb[IFA_CACHEINFO] != NULL) { -+ struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); -+ mn_update_hoa_lifetime(hoa, &now, -+ ci->ifa_valid, ci->ifa_prefered); -+ valid = ci->ifa_valid; -+ preferred = ci->ifa_prefered; -+ } -+ if (mha->if_next == ifa->ifa_index) -+ return 0; -+ -+ MDBG("Copy HoA %x:%x:%x:%x:%x:%x:%x:%x/%d from iface %d to %d\n", -+ NIP6ADDR(&hoa->addr), plen, ifa->ifa_index, mha->if_next); -+ -+ err = addr_add(&hoa->addr, plen, -+ ifa->ifa_flags|IFA_F_HOMEADDRESS, -+ ifa->ifa_scope, mha->if_next, preferred, valid); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+int nemo_mr_tnl_routes_add(struct home_addr_info *hai, -+ int ifindex, int rtable) - { - struct list_head *l; - struct prefix_list_entry *pe; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ if (route_add(ifindex, rtable, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, - &in6addr_any, 0, NULL) < 0) { -@@ -646,7 +833,7 @@ undo: - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - if (p == pe) - break; -@@ -654,44 +841,47 @@ undo: - return -1; - } - --static int mn_tnl_state_add(struct home_addr_info *hai, int ifindex, int all) -+static int mn_tnl_state_add(struct home_addr_info *hai, -+ int ifindex, int all, int rtable) - { - int err = 0; - if (hai->home_reg_status != HOME_REG_NONE) { - if ((err = mn_ro_pol_add(hai, ifindex, all)) < 0) - return err; -- if ((err = route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, 0, -+ if ((err = route_add(ifindex, rtable, RTPROT_MIP, 0, - IP6_RT_PRIO_MIP6_OUT, &in6addr_any, 0, - &in6addr_any, 0, NULL)) < 0) { - mn_ro_pol_del(hai, ifindex, all); - } - } - if (hai->mob_rtr && -- (err = nemo_mr_tnl_routes_add(hai, ifindex)) < 0) { -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ (err = nemo_mr_tnl_routes_add(hai, ifindex, rtable)) < 0) { -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } - return err; - } - --static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, int ifindex) -+static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, -+ int ifindex, int rtable) - { - struct list_head *l; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - } - } - --static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, int all) -+static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, -+ int all, int rtable) - { - if (hai->home_reg_status != HOME_REG_NONE) { - if (hai->mob_rtr) -- nemo_mr_tnl_routes_del(hai, ifindex); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ nemo_mr_tnl_routes_del(hai, ifindex, rtable); -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } -@@ -715,8 +905,18 @@ static void mn_pol_ext_cleanup(struct bu - static void mn_pol_ext_cleanup(struct bulentry *bule) - { - MDBG("\n"); -- mpd_cancel_mps(&bule->hoa, &bule->peer_addr); -- mn_tnl_state_del(bule->home, bule->home->if_tunnel, 0); -+ /* MCoA -+ * MPS is canceled only if the BULE is the last entry -+ * for the HoA, or when at home -+ */ -+ if (mcoa_bule_count(bule) == 0 || bule->home->at_home) -+ mpd_cancel_mps(&bule->hoa, &bule->peer_addr); -+ if (bule->home->reg_mcoa) -+ mn_tnl_state_del(bule->home, bule->if_tunnel, 0, -+ bule->table); -+ else -+ mn_tnl_state_del(bule->home, bule->home->if_tunnel, -+ 0, bule->table); - - if (conf.UseMnHaIPsec) { - mn_ipsec_tnl_update(&bule->peer_addr, &bule->hoa, bule); -@@ -730,12 +930,13 @@ static int process_first_home_bu(struct - struct timespec *lifetime) - { - int err = 0; -+ assert(hai->current_coa); - bule->type = BUL_ENTRY; - bule->flags = (IP6_MH_BU_HOME | IP6_MH_BU_ACK | - hai->lladdr_comp | hai->mob_rtr); - bule->coa_changed = -1; -- bule->coa = hai->primary_coa.addr; -- bule->if_coa = hai->primary_coa.iif; -+ bule->coa = hai->current_coa->addr; -+ bule->if_coa = hai->current_coa->iif; - bule->lifetime = *lifetime; - bule->delay = conf.InitialBindackTimeoutFirstReg_ts; - bule->callback = bu_resend; -@@ -744,10 +945,47 @@ static int process_first_home_bu(struct - bule->ext_cleanup = mn_pol_ext_cleanup; - bule->home = hai; - bule->consecutive_resends = 0; -+ bule->priority = get_prio_from_bid(bule->bid); - - hai->home_reg_status = HOME_REG_UNCERTAIN; - -- if ((err = mn_tnl_state_add(hai, hai->if_tunnel, 0)) < 0) -+ /* MCoA: MCoA requires one tunnel per CoA. Need to create a new one */ -+ if (bule->if_tunnel == 0 -+ && hai->reg_mcoa -+ && get_bid_from_ifindex(hai->current_coa->iif)) { -+ MDBG("Creating new tunnel for iface %d (BID %d)\n", -+ hai->current_coa->iif, -+ get_bid_from_ifindex(hai->current_coa->iif)); -+ bule->if_tunnel = tunnel_add(&hai->hoa.addr, -+ &hai->ha_addr, -+ hai->current_coa->iif, -+ NULL, NULL); -+ if (bule->if_tunnel <= 0) { -+ MDBG("Failed to create MN-HA tunnel\n"); -+ return -1; -+ } else { -+ MDBG("MN-HA tunnel created (iface tnl = %d)\n", -+ bule->if_tunnel); -+ struct flag_hoa_args arg; -+ arg.target = hai; -+ arg.flag = 1; -+ arg.bule = bule; -+ if (addr_do(&hai->hoa.addr, 128, -+ bule->if_tunnel, &arg, -+ flag_hoa) < 0) { -+ MDBG("addr_do failed for tunnel %d\n", -+ bule->if_tunnel); -+ return -1; -+ } -+ } -+ } else if (bule->if_tunnel == 0) -+ /* MCoA -+ * If MCoA is not used, then initialise the tunnel -+ * number to the one in hai -+ */ -+ bule->if_tunnel = hai->if_tunnel; -+ -+ if ((err = mn_tnl_state_add(hai, bule->if_tunnel, 0, bule->table)) < 0) - MDBG("Failed to initialize new bule for HA\n"); - else - MDBG("New bule for HA\n"); -@@ -781,14 +1019,18 @@ static void mn_send_home_bu(struct home_ - movement_t type_movement = MIP6_TYPE_MOVEMENT_UNKNOWN; - - TRACE; -+ assert(hai->current_coa); - - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - MDBG("HA not set for home link\n"); - return; - } -- mn_get_home_lifetime(hai, &lifetime, 0); -+ mn_get_home_lifetime(hai, &lifetime, hai->current_coa->iif, 0); - -- if ((bule = bul_get(hai, NULL, &hai->ha_addr)) == NULL) { -+ if ((bule = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID)) == NULL) { - assert(!hai->at_home); - /* Create new bul entry for HA */ - if (!tsisset(lifetime)) { -@@ -807,14 +1049,22 @@ static void mn_send_home_bu(struct home_ - mn_change_ha(hai); - return; - } -- bule = create_bule(&hai->hoa.addr, &hai->ha_addr); -+ bule = create_bule(&hai->hoa.addr, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - if (bule == NULL) - return; -- if (process_first_home_bu(bule, hai, &lifetime) < 0 || -+ if (mcoa_mn_init_rt_table(bule) < 0 || -+ process_first_home_bu(bule, hai, &lifetime) < 0 || - bul_add(bule) < 0) { - bul_delete(bule); - return; - } -+ /* MCoA: Check for interface reliability */ -+ if(get_reliable_from_ifindex(bule->if_coa) > 0) -+ /* MCoA: Add the rules */ -+ mcoa_iface_rules_add(hai->current_coa->iif, hai); - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - MDBG("New bule for HA\n"); - } else if (bule->type == BUL_ENTRY) { -@@ -829,8 +1079,8 @@ static void mn_send_home_bu(struct home_ - } - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - } else { -- bule->coa = hai->primary_coa.addr; -- bule->if_coa = hai->primary_coa.iif; -+ bule->coa = hai->current_coa->addr; -+ bule->if_coa = hai->current_coa->iif; - - /* Rate limiting home registration binding updates - is necessary for multihomed MNs */ -@@ -850,6 +1100,10 @@ static void mn_send_home_bu(struct home_ - bule->callback = bu_resend; - } - bule->seq++; -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_del(bule->if_coa, bule->home, 1); - pre_bu_bul_update(bule); - MDBG("Bule for HA exists. Updating it.\n"); - } else { -@@ -885,10 +1139,13 @@ static void mn_send_home_bu(struct home_ - &bule->hoa, bule); - } - } -+ /* MCoA: Update the current routing table */ -+ hai->table = bule->table; - /* Before bul_iterate, tunnel modification should be done. */ -- tunnel_mod(hai->if_tunnel, &hai->primary_coa.addr, &hai->ha_addr, -- hai->primary_coa.iif, mn_ext_tunnel_ops, hai); -- -+ bule->if_tunnel = tunnel_mod(bule->if_tunnel, &hai->current_coa->addr, -+ &hai->ha_addr, hai->current_coa->iif, -+ mn_ext_tunnel_ops, hai); -+ hai->if_tunnel = bule->if_tunnel; - bule->last_coa = bule->coa; - bule->coa_changed = 0; - -@@ -1017,14 +1274,87 @@ static int mn_chk_bauth(struct ip6_mh_bi - return -1; - } - -+static int mn_disable_mcoa(struct bulentry *bule) -+{ -+/* -+ struct bulentry *bule_del; -+ struct home_addr_info *hai; -+ struct flag_hoa_args arg; -+ struct list_head *l, *tmp; -+ struct net_iface *best_iface = NULL; -+*/ -+ -+ /* MCoA TODO1: At the moment we simply exit */ -+ MDBG("HA does not accept MCoA registration. Check "\ -+ "your HA or change your MR configuration\n"); -+ kill(0, SIGINT); -+ return 0; -+ -+/* -+ assert(bule); -+ hai = bule->home; -+ mcoa_mn_rules_del(hai); -+ while((bule_del = bul_get(hai, NULL, -+ &bule->peer_addr, MCOA_NO_BID))) -+ bul_delete(bule_del); -+ -+ hai->if_tunnel = tunnel_add(&hai->hoa.addr, &hai->ha_addr, -+ hai->if_home, NULL, NULL); -+ if (hai->if_tunnel <= 0) { -+ MDBG("failed to create MN-HA tunnel\n"); -+ goto clean_err; -+ } -+ -+ arg.target = hai; -+ arg.flag = 1; -+ if (addr_do(&hai->hoa.addr, 128, hai->if_tunnel, -+ &arg, flag_hoa) < 0) -+ goto clean_err; -+ -+ nemo_mr_rules_del(hai); -+ hai->reg_mcoa = 0; -+ nemo_mr_rules_add(hai); -+ if (rule_add(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_MIP6_HOA_OUT, 0, -+ RTN_UNICAST, &hai->hoa.addr, -+ 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) -+ goto clean_err; -+ -+ list_for_each(l, &conf.net_ifaces) { -+ struct net_iface *iface = NULL; -+ iface = list_entry(l, struct net_iface, list); -+ if (!best_iface -+ || iface->mn_if_bidprio > best_iface->mn_if_bidprio) -+ best_iface = iface; -+ } -+ list_for_each_safe(l, tmp, &conf.net_ifaces) { -+ struct net_iface *iface = NULL; -+ iface = list_entry(l, struct net_iface, list); -+ if (iface != best_iface) { -+ MDBG("Deleting iface %d\n", iface->ifindex); -+ list_del(l); -+ } -+ } -+ return 1; -+ -+clean_err: -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ tunnel_del(hai->if_tunnel, NULL, NULL); -+ -+ return 0; -+*/ -+} -+ - static void mn_recv_ba(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) - { - struct ip6_mh_binding_ack *ba; -+ struct ip6_mh_opt_bid *bui; - struct mh_options mh_opts; - struct bulentry *bule; - struct timespec now, ba_lifetime, br_adv; -- uint16_t seqno; -+ uint16_t seqno, bid; - - TRACE; - -@@ -1036,25 +1366,32 @@ static void mn_recv_ba(const struct ip6_ - ba = (struct ip6_mh_binding_ack *)mh; - - pthread_rwlock_wrlock(&mn_lock); -- bule = bul_get(NULL, in->dst, in->src); -+ -+ /* 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; -+ -+ bule = bul_get(NULL, in->dst, in->src, bid); - if (!bule || bule->type != BUL_ENTRY) { - MDBG("Got BA without corresponding BUL entry " - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " -- "with coa %x:%x:%x:%x:%x:%x:%x:%x\n", -+ "with coa %x:%x:%x:%x:%x:%x:%x:%x" -+ "and bid %d\n", - NIP6ADDR(in->src), - NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? -- in->local_coa : &in6addr_any)); -+ in->local_coa : &in6addr_any), -+ bid); - pthread_rwlock_unlock(&mn_lock); - return; - } - dbg("Got BA from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " -- "with coa %x:%x:%x:%x:%x:%x:%x:%x and status %d\n", -+ "with coa %x:%x:%x:%x:%x:%x:%x:%x, bid %d and status %d\n", - NIP6ADDR(in->src), NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? in->local_coa : &in6addr_any), -- ba->ip6mhba_status); -+ bid, ba->ip6mhba_status); - dbg("Dumping corresponding BULE\n"); - dbg_func(bule, dump_bule); - /* First check authenticator */ -@@ -1076,6 +1413,17 @@ static void mn_recv_ba(const struct ip6_ - return; - } - } -+ /* MCoA: Check if BID matches */ -+ if (bule->bid && !bui) { -+ /* The BACK did not have any BID suboption whereas -+ * we sent a BU with a BID option. MCoA is disabled -+ * on the node. -+ */ -+ MDBG("Got BA with no BID option, disabling MCoA registration.\n"); -+ mn_disable_mcoa(bule); -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - bule->do_send_bu = 0; - bule->consecutive_resends = 0; - clock_gettime(CLOCK_REALTIME, &now); -@@ -1086,11 +1434,18 @@ static void mn_recv_ba(const struct ip6_ - bule->seq = seqno + 1; - if (bule->flags & IP6_MH_BU_HOME) - mn_get_home_lifetime(bule->home, -- &bule->lifetime, 0); -+ &bule->lifetime, -+ bule->if_coa, -+ 0); - else - mn_get_ro_lifetime(bule->home, - &bule->lifetime, 0); - bule->callback = bu_resend; -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_del(bule->if_coa, -+ bule->home, 1); - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - bule->delay = conf.InitialBindackTimeoutReReg_ts; -@@ -1137,6 +1492,10 @@ static void mn_recv_ba(const struct ip6_ - tssetsec(ba_lifetime, ntohs(ba->ip6mhba_lifetime) << 2); - br_adv = ba_lifetime; - tsadd(bule->lastsent, ba_lifetime, bule->hard_expire); -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_add(bule->if_coa, bule->home); - if (!(bule->flags & IP6_MH_BU_HOME) || !conf.OptimisticHandoff) - post_ba_bul_update(bule); - if (bule->flags & IP6_MH_BU_HOME) { -@@ -1266,11 +1625,6 @@ struct home_addr_info *mn_get_home_addr_ - return NULL; - } - --struct flag_hoa_args { -- struct home_addr_info *target; -- int flag; --}; -- - static int flag_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) - { - /* -@@ -1279,13 +1633,18 @@ static int flag_hoa(struct ifaddrmsg *if - - struct flag_hoa_args *fhoa = arg; - struct home_addr_info *hai = fhoa->target; -+ struct bulentry *bule = fhoa->bule; - struct mn_addr *hoa = &hai->hoa; - struct in6_addr *addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - struct timespec now; - uint32_t preferred; - uint32_t valid; -- int err; -- int plen = (ifa->ifa_index == hai->if_tunnel ? 128 : hai->plen); -+ int err, plen; -+ -+ if (hai->reg_mcoa && bule != NULL) -+ plen = (ifa->ifa_index == bule->if_tunnel ? 128 : hai->plen); -+ else -+ plen = (ifa->ifa_index == hai->if_tunnel ? 128 : hai->plen); - - clock_gettime(CLOCK_REALTIME, &now); - -@@ -1321,6 +1680,220 @@ static int flag_hoa(struct ifaddrmsg *if - return 0; - } - -+static int mcoa_iface_dflt_hoa_rule_del(struct bulentry *bule, -+ struct bulentry *best_bule, -+ struct home_addr_info *hai, -+ int replace) -+{ -+ /* MCoA: Delete the default HoA rule */ -+ rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ -+ /* MCoA -+ * Do not replace the default rules -+ * if there are no other best bule -+ */ -+ if(best_bule && best_bule != bule && replace) { -+ if (rule_add(NULL, best_bule->bid, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) -+ return -1; -+ } -+ return 0; -+} -+ -+static void mcoa_iface_dflt_mnp_rules_del(struct bulentry *bule, -+ struct bulentry *best_bule, -+ struct home_addr_info *hai, -+ struct prefix_list_entry *p, -+ int replace) -+{ -+ /* 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, -+ &in6addr_any, 0, 0); -+ -+ /* MCoA -+ * Do not replace the default rules -+ * if there are no other best bule -+ */ -+ if(best_bule && best_bule != bule && replace) { -+ rule_add(NULL, best_bule->bid, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ } -+} -+ -+static struct bulentry* mcoa_iface_rules_del(int iif, -+ struct home_addr_info *hai, -+ int replace) -+{ -+ uint16_t bid = hai->reg_mcoa?get_bid_from_ifindex(iif):MCOA_NO_BID; -+ uint8_t prio_tmp = 0; -+ struct bulentry *bule, *best_bule = NULL; -+ struct list_head *l; -+ int delete_dflt_mnp = 0; -+ -+ bule = bul_get(hai, NULL, &hai->ha_addr, bid); -+ if (!hai->reg_mcoa || (bule && !bule->rules)) -+ return NULL; -+ -+ /* MCoA: Delete rule for HoA traffic from the MN */ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ -+ bul_iterate_in(&hai->ha_addr, bul_highest_priority, -+ &best_bule); -+ if(bule && best_bule == bule) { -+ delete_dflt_mnp = 1; -+ /* MCoA: search for the next best BULE */ -+ prio_tmp = bule->priority; -+ bule->priority = 0; -+ bul_iterate_in(&hai->ha_addr, -+ bul_highest_priority, &best_bule); -+ bule->priority = prio_tmp; -+ /* MCoA: delete the default HoA rule */ -+ mcoa_iface_dflt_hoa_rule_del(bule, best_bule, hai, replace); -+ } -+ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ /* MCoA: Delete MNP rule */ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ if(delete_dflt_mnp) { -+ /* MCoA: Delete default MNP rule */ -+ mcoa_iface_dflt_mnp_rules_del(bule, best_bule, -+ hai, p, replace); -+ } -+ } -+ -+ if (bule) { -+ bule->rules = 0; -+ MDBG("MNP and HoA rules deleted for iface %d bid %d\n", -+ iif, bule->bid); -+ } -+ -+ return bule; -+} -+ -+static void mcoa_mn_rules_del(struct home_addr_info *hinfo) -+{ -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mcoa) { -+ struct mn_addr *iface = NULL; -+ iface = list_entry(l, struct mn_addr, list); -+ mcoa_iface_rules_del(iface->iif, hinfo, 0); -+ } -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hinfo->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ if (hinfo->at_home && hinfo->reg_mcoa) { -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } -+} -+ -+static int mcoa_iface_rules_add(int iif, struct home_addr_info *hai) -+{ -+ uint16_t bid = hai->reg_mcoa?get_bid_from_ifindex(iif):MCOA_NO_BID; -+ struct bulentry *bule, *best_bule = NULL; -+ struct prefix_list_entry *pe = NULL; -+ struct list_head *l; -+ uint8_t prio; -+ -+ bule = bul_get(hai, NULL, &hai->ha_addr, bid); -+ if (!bid || !hai->reg_mcoa || !bule || (bule && bule->rules)) -+ return 0; -+ -+ prio = get_prio_from_bid(bid); -+ -+ /* MCoA: Rule for HoA traffic from the MN */ -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) -+ goto undo; -+ -+ bul_iterate_in(&hai->ha_addr, bul_highest_priority, -+ &best_bule); -+ -+ if (!best_bule || prio >= best_bule->priority) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) -+ goto undo; -+ } -+ -+ /* MCoA: Rule for forwarded traffic from the NEMO */ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { -+ pe = p; -+ goto undo; -+ } -+ /* MCoA -+ * Add default rules if the bule has the highest -+ * priority -+ */ -+ if (!best_bule || prio >= best_bule->priority) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) -+ goto undo; -+ } -+ } -+ -+ bule->rules = 1; -+ MDBG("MNP and HoA Rules added for interface %d.\n", iif); -+ return 0; -+ -+undo: -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static void nemo_mr_rules_del(struct home_addr_info *hinfo) - { - struct list_head *l; -@@ -1328,11 +1901,17 @@ static void nemo_mr_rules_del(struct hom - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ if (hinfo->reg_mcoa) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } else -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, -+ 0, 0); - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - } - } -@@ -1346,19 +1925,21 @@ static int nemo_mr_rules_add(struct home - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); - if (rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, - &p->ple_prefix, p->ple_plen, 0) < 0) { - pe = p; - goto undo; - } -- if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, -- &in6addr_any, 0, 0) < 0) { -+ if (!hinfo->reg_mcoa -+ && rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -- &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0); - pe = p; - goto undo; - } -@@ -1368,17 +1949,25 @@ undo: - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ if (!hinfo->reg_mcoa) { -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - if (p == pe) - break; - } - return -1; - } -+ -+struct mcoa_tnl_id { -+ struct list_head list; -+ int tnl_id; -+}; - - static void clean_home_addr_info(struct home_addr_info *hai) - { -@@ -1390,17 +1979,24 @@ static void clean_home_addr_info(struct - nemo_mr_rules_del(hai); - arg.target = hai; - arg.flag = 0; -- addr_do(&hai->hoa.addr, plen, -- hai->hoa.iif, &arg, flag_hoa); -+ /* MCoA: Flag HoA on the tunnel iface is not necessary here */ -+ if (!hai->reg_mcoa) -+ addr_do(&hai->hoa.addr, plen, -+ hai->hoa.iif, &arg, flag_hoa); - bul_iterate(&hai->bul, mn_dereg, NULL); -- bul_home_cleanup(&hai->bul); -- -+ /* MCoA: Delete all mn rules */ -+ if (hai->reg_mcoa) -+ mcoa_mn_rules_del(hai); - mn_block_rule_del(hai); - -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, -- &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR); -- tunnel_del(hai->if_tunnel, NULL, NULL); -+ if (!hai->reg_mcoa) { -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ tunnel_del(hai->if_tunnel, NULL, NULL); -+ } -+ bul_home_cleanup(&hai->bul); - dhaad_stop(hai); - free(hai); - } -@@ -1448,6 +2044,11 @@ static struct home_addr_info *hai_copy(s - &hai->mob_net_prefixes) < 0) - goto mutex_undo; - -+ INIT_LIST_HEAD(&hai->mcoa); -+ if (hai->reg_mcoa && -+ prefix_list_copy(&conf_hai->mcoa, &hai->mcoa) < 0) -+ goto mutex_undo; -+ - INIT_LIST_HEAD(&hai->ro_policies); - if (rpl_copy(&conf_hai->ro_policies, &hai->ro_policies) < 0) - goto mnp_undo; -@@ -1493,17 +2094,22 @@ static int conf_home_addr_info(struct ho - MDBG("HA address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&hai->ha_addr)); - } -- hai->if_tunnel = tunnel_add(&hai->hoa.addr, &hai->ha_addr, -- hai->if_home, NULL, NULL); -+ /* MCoA: tunnel is created only if MCoA registration is not used */ -+ if(!hai->reg_mcoa) { -+ hai->if_tunnel = tunnel_add(&hai->hoa.addr, -+ &hai->ha_addr, -+ hai->if_home, NULL, NULL); - -- if (hai->if_tunnel <= 0) { -- MDBG("failed to create MN-HA tunnel\n"); -- goto clean_err; -- } -- if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, -- &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) { -- goto clean_err; -+ if (hai->if_tunnel <= 0) { -+ MDBG("failed to create MN-HA tunnel\n"); -+ goto clean_err; -+ } -+ if (rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) { -+ goto clean_err; -+ } - } - - if (mn_block_rule_add(hai) < 0) -@@ -1524,16 +2130,25 @@ static int conf_home_addr_info(struct ho - PREFIX_LIFETIME_INFINITE, - PREFIX_LIFETIME_INFINITE); - -- arg.target = hai; -- arg.flag = 1; -+ /* MCoA */ -+ if(!hai->reg_mcoa) { -+ arg.target = hai; -+ arg.flag = 1; - -- if (addr_do(&hai->hoa.addr, 128, -- hai->if_tunnel, &arg, flag_hoa) < 0) { -- goto clean_err; -+ if (addr_do(&hai->hoa.addr, 128, -+ hai->if_tunnel, &arg, flag_hoa) < 0) { -+ goto clean_err; -+ } - } - if (hai->mob_rtr && nemo_mr_rules_add(hai) < 0) { - goto clean_err; - } -+ /* MCoA TODO1 -+ * For Home-CoA support, hai->at_home must be initialized to 0 -+ * if(hai->reg_mcoa) hai->at_home = 0; -+ * BUT Home-CoA solution seems to be deprecated by the no-NDP -+ * solution -+ */ - hai->at_home = hai->hoa.iif == hai->if_home; - pthread_rwlock_wrlock(&mn_lock); - list_add(&hai->list, &home_addr_list); -@@ -1635,7 +2250,11 @@ int mn_update_home_prefix(struct home_ad - if (!hai->at_home) { - struct bulentry *e; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ /* MCoA TODO1 -+ * Do the same for all entries that match &hai->ha_addr -+ */ -+ e = bul_get(hai, NULL, &hai->ha_addr, MCOA_NO_BID); -+ - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return -ENOENT; - -@@ -1668,8 +2287,9 @@ static int mn_get_ro_coa(const struct in - return ret; - hai = mn_get_home_addr(hoa); - if (hai) { -- *coa = hai->primary_coa.addr; -- ret = hai->primary_coa.iif; -+ assert(hai->current_coa); -+ *coa = hai->current_coa->addr; -+ ret = hai->current_coa->iif; - } else { - MDBG("Failed to find a home address info\n"); - ret = -1; -@@ -1683,14 +2303,14 @@ static inline void linklocal_rt_rules_de - static inline void linklocal_rt_rules_del(void) - { - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); - } - - static inline int linklocal_rt_rules_add(void) - { - return rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); - } - -@@ -1705,12 +2325,13 @@ static int mn_ext_tunnel_ops(int request - mha.if_next = new_if; - mha.target = hai; - -+ /* MCoA: Update state for the correct table (hai->table) */ - if (hai->hoa.iif == old_if && -- (mn_tnl_state_add(hai, new_if, 1) || -+ (mn_tnl_state_add(hai, new_if, 1, hai->table) || - addr_do(&hai->hoa.addr, 128, old_if, &mha, mv_hoa) < 0)) - goto undo; - -- mn_tnl_state_del(hai, old_if, 1); -+ mn_tnl_state_del(hai, old_if, 1, hai->table); - hai->if_tunnel = new_if; - return 0; - undo: -@@ -1718,28 +2339,52 @@ undo: - - if (hai->hoa.iif == new_if) - addr_do(&hai->hoa.addr, 128, new_if, &mha, mv_hoa); -- mn_tnl_state_del(hai, new_if, 1); -+ mn_tnl_state_del(hai, new_if, 1, hai->table); - return -1; - } - - static int mn_move(struct home_addr_info *hai) - { - struct mv_hoa_args mha; -+ struct list_head *l; - - mha.target = hai; - - TRACE; -+ assert(hai->current_coa); - - if (hai->at_home) { - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - struct bulentry *e; - MDBG("in home net\n"); -+ /* MCoA -+ * If we are in the home network, add a rule to -+ * RT6_TABLE_MIP6 to allow routing of the packets from -+ * the MNNs (routes in RT6_TABLE_MIP6 are -+ * added/deleted in movement.c/md_update_router_stats, -+ * __md_free_router) and the MR. -+ */ -+ if (hai->reg_mcoa) { -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } - if (hai->home_reg_status == HOME_REG_NONE && -- (e = bul_get(hai, NULL, &hai->ha_addr)) != NULL && -+ (e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID)) -+ != NULL && - e->flags & IP6_MH_BU_HOME && e->type != BUL_ENTRY) - bul_delete(e); -- if (hai->hoa.iif != hai->primary_coa.iif) { -- mha.if_next = hai->primary_coa.iif; -+ if (hai->hoa.iif != hai->current_coa->iif) { -+ mha.if_next = hai->current_coa->iif; - addr_do(&hai->hoa.addr, plen, - hai->hoa.iif, &mha, mv_hoa); - if (hai->home_reg_status == HOME_REG_NONE) { -@@ -1760,10 +2405,33 @@ static int mn_move(struct home_addr_info - hai->pend_ba = 0; - pending_bas--; - } -+ /* MCoA -+ * When in a foreign network, delete the -+ * rules to RT6_TABLE_MIP6 -+ */ -+ if (hai->reg_mcoa) { -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } - if (hai->hoa.iif != hai->if_tunnel) { - mha.if_next = hai->if_tunnel; -- addr_do(&hai->hoa.addr, hai->plen, -- hai->hoa.iif, &mha, mv_hoa); -+ /* MCoA -+ * HoA is moved if we do not use MCoA, -+ * HoA is copied if we use MCoA -+ */ -+ if (hai->reg_mcoa) -+ addr_do(&hai->hoa.addr, hai->plen, -+ hai->hoa.iif, &mha, cp_hoa); -+ else -+ addr_do(&hai->hoa.addr, hai->plen, -+ hai->hoa.iif, &mha, mv_hoa); - } - do_handoff(hai); - } -@@ -1951,6 +2619,7 @@ static int mn_do_dad(struct home_addr_in - struct in6_addr solicit; - int type = FLUSH_ALL; - -+ assert(hai->current_coa); - if ((sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) - return ret; - -@@ -1963,22 +2632,22 @@ static int mn_do_dad(struct home_addr_in - sizeof(struct icmp6_filter)); - - ipv6_addr_solict_mult(&hai->hoa.addr, &solicit); -- if_mc_group(sock, hai->primary_coa.iif, &in6addr_all_nodes_mc, -+ if_mc_group(sock, hai->current_coa->iif, &in6addr_all_nodes_mc, - IPV6_JOIN_GROUP); -- if_mc_group(sock, hai->primary_coa.iif, &solicit, IPV6_JOIN_GROUP); -+ if_mc_group(sock, hai->current_coa->iif, &solicit, IPV6_JOIN_GROUP); - - if (hai->home_reg_status == HOME_REG_NONE) { - if (hai->lladdr_comp) { - struct in6_addr lladdr; - ipv6_addr_llocal(&hai->hoa.addr, &lladdr); - if (mn_addr_do_dad(sock, NULL, &lladdr, 64, -- hai->primary_coa.iif, 0) < 0) { -+ hai->current_coa->iif, 0) < 0) { - MDBG("Link-local DAD failed!\n"); - goto err; - } - } - if (mn_addr_do_dad(sock, hai, &hai->hoa.addr, hai->plen, -- hai->primary_coa.iif, 0) < 0) { -+ hai->current_coa->iif, 0) < 0) { - MDBG("HoA DAD failed!\n"); - goto err; - } -@@ -1986,7 +2655,7 @@ static int mn_do_dad(struct home_addr_in - mn_send_home_na(hai); - ret = mn_move(hai); - } else if (!mn_addr_do_dad(sock, hai, &hai->hoa.addr, -- hai->plen, hai->primary_coa.iif, 1)) { -+ hai->plen, hai->current_coa->iif, 1)) { - ret = mn_move(hai); - } - out: -@@ -2009,15 +2678,19 @@ static inline void mn_update_coa_lifetim - - static void mn_coa_updated(struct home_addr_info *hai) - { -+ assert(hai->current_coa); - if (!hai->at_home) { - struct bulentry *e; - struct mn_addr *coa; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return; - -- coa = &hai->primary_coa; -+ coa = hai->current_coa; - - MDBG2("preferred_time %u valid_life %u\n", - coa->preferred_time.tv_sec, -@@ -2075,6 +2748,10 @@ static struct md_inet6_iface *mn_get_ifa - list_for_each(l, iface_list) { - struct md_inet6_iface *iface; - iface = list_entry(l, struct md_inet6_iface, list); -+ /* MCoA TODO1 -+ * If MCoA is used, MCoA preference must be used instead -+ * of interfaces preference -+ */ - if (mn_verify_iface(iface) && - (best_iface == NULL || - (best_iface)->preference > iface->preference || -@@ -2119,6 +2796,106 @@ static struct md_coa *mn_get_coa(const s - return best_coa; - } - -+static int mcoa_mn_make_ho_verdict(const struct movement_event *me, -+ const struct home_addr_info *hai, -+ struct md_router **next_rtr, -+ struct md_coa **next_coa) -+{ -+ /* MCoA -+ * The handoff algorithm is different from -+ * mn_make_ho_verdict because we do not perform vertical -+ * handover, but only horizontal handovers. -+ */ -+ struct md_router *rtr; -+ struct md_coa *coa = NULL; -+ int force = 0; -+ -+ /* MCoA TODO1 -+ * For Home-CoA support, remove this if(){} -+ * BUT Home-CoA seems to be deprecated -+ */ -+ if (me->iface != NULL && -+ (rtr = md_get_first_router(&me->iface->default_rtr)) != NULL && -+ mn_is_at_home(&rtr->prefixes, &hai->home_prefix, hai->home_plen)) { -+ *next_rtr = rtr; -+ *next_coa = NULL; -+ return MN_HO_RETURN_HOME; -+ } -+ switch (me->event_type) { -+ case ME_DHAAD: -+ force = 1; -+ break; -+ case ME_IFACE_DOWN: -+ case ME_LINK_DOWN: -+ case ME_RTR_EXPIRED: -+ break; -+ case ME_RTR_NEW: -+ assert(!list_empty(&me->iface->default_rtr)); -+ case ME_LINK_UP: -+ assert(me->iface != NULL); -+ break; -+ case ME_RTR_BACK: -+ case ME_RTR_UPDATED: -+ assert(me->iface != NULL); -+ assert(!list_empty(&me->iface->default_rtr)); -+ -+ *next_coa = md_get_coa(&me->iface->coas, -+ &hai->current_coa->addr); -+ if (*next_coa == NULL) -+ break; -+ *next_rtr = md_get_first_router(&me->iface->default_rtr); -+ return MN_HO_REESTABLISH; -+ case ME_COA_NEW: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ break; -+ case ME_COA_EXPIRED: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ -+ if (IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, -+ &me->coa->addr)) -+ break; -+ return MN_HO_IGNORE; -+ case ME_COA_LFT_DEC: -+ case ME_COA_LFT_INC: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ -+ if (!IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, -+ &me->coa->addr)) { -+ return MN_HO_IGNORE; -+ } -+ -+ *next_coa = me->coa; -+ return MN_HO_CHECK_LIFETIME; -+ default: -+ return MN_HO_IGNORE; -+ } -+ if (!mn_verify_iface(me->iface)) -+ return MN_HO_INVALIDATE; -+ -+ coa = mn_get_coa(hai, me->iface->ifindex, -+ &hai->current_coa->addr, &me->iface->coas); -+ -+ if (coa == NULL) -+ return MN_HO_INVALIDATE; -+ -+ if (!force && -+ IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->current_coa->addr)) -+ return MN_HO_IGNORE; -+ -+ if (list_empty(&me->iface->default_rtr)) -+ return MN_HO_IGNORE; -+ -+ *next_rtr = md_get_first_router(&me->iface->default_rtr); -+ *next_coa = coa; -+ return MN_HO_PROCEED; -+} -+ - static int mn_make_ho_verdict(const struct movement_event *me, - const struct home_addr_info *hai, - struct md_router **next_rtr, -@@ -2127,9 +2904,11 @@ static int mn_make_ho_verdict(const stru - struct md_inet6_iface *old_iface = NULL, *new_iface = NULL; - struct md_router *rtr; - struct md_coa *coa = NULL; -- int pref_iif = hai->primary_coa.iif; /* prefer current CoA interface */ -+ int pref_iif; - int force = 0; - -+ assert(hai->current_coa); -+ pref_iif = hai->current_coa->iif; /* prefer current CoA interface */ - if (me->iface != NULL && - (rtr = md_get_first_router(&me->iface->default_rtr)) != NULL && - mn_is_at_home(&rtr->prefixes, &hai->home_prefix, hai->home_plen)) { -@@ -2170,7 +2949,7 @@ static int mn_make_ho_verdict(const stru - return MN_HO_IGNORE; - - *next_coa = md_get_coa(&old_iface->coas, -- &hai->primary_coa.addr); -+ &hai->current_coa->addr); - if (*next_coa == NULL) - break; - *next_rtr = md_get_first_router(&old_iface->default_rtr); -@@ -2187,7 +2966,7 @@ static int mn_make_ho_verdict(const stru - - if (old_iface == NULL || - (old_iface == me->iface && -- IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, -+ IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, - &me->coa->addr))) - break; - return MN_HO_IGNORE; -@@ -2201,7 +2980,7 @@ static int mn_make_ho_verdict(const stru - break; - - if (old_iface != me->iface || -- !IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, -+ !IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, - &me->coa->addr)) - return MN_HO_IGNORE; - -@@ -2216,13 +2995,13 @@ static int mn_make_ho_verdict(const stru - return MN_HO_INVALIDATE; - - coa = mn_get_coa(hai, new_iface->ifindex, -- &hai->primary_coa.addr, &new_iface->coas); -+ &hai->current_coa->addr, &new_iface->coas); - - if (coa == NULL) - return MN_HO_INVALIDATE; - - if (!force && new_iface == old_iface && -- IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->primary_coa.addr)) -+ IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->current_coa->addr)) - return MN_HO_IGNORE; - - if (list_empty(&new_iface->default_rtr)) -@@ -2231,6 +3010,100 @@ static int mn_make_ho_verdict(const stru - *next_rtr = md_get_first_router(&new_iface->default_rtr); - *next_coa = coa; - return MN_HO_PROCEED; -+} -+ -+static void mcoa_mn_chk_ho_verdict(struct home_addr_info *hai, -+ const struct movement_event *event) -+{ -+ struct md_router *rtr = NULL; -+ struct md_coa *coa = NULL; -+ struct bulentry *bule; -+ int move_home = 0; -+ int active_coa = 0; -+ -+ if ((bule = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(event->iface->ifindex) -+ :MCOA_NO_BID))) -+ active_coa = mcoa_bule_count(bule); -+ -+ if (event->event_type == ME_COA_EXPIRED && -+ IN6_ARE_ADDR_EQUAL(&event->coa->addr, &hai->hoa.addr)) -+ return; -+ -+ hai->current_coa = mcoa_get_current_coa(hai, event->iface->ifindex); -+ if (hai->current_coa == NULL) -+ return; -+ -+ hai->verdict = mcoa_mn_make_ho_verdict(event, hai, &rtr, &coa); -+ MDBG2("Verdict %d for iface %d\n", -+ hai->verdict, hai->current_coa->iif); -+ -+ if (hai->verdict == MN_HO_IGNORE) -+ return; -+ -+ if (hai->verdict == MN_HO_INVALIDATE) { -+ /* MCoA -+ * Unless this is the last available interface -+ * Rules related to this iface are deleted, -+ * BULE is deleted, and deregistration BU is sent -+ */ -+ if (active_coa > 1 -+ && (bule = mcoa_iface_rules_del(hai->current_coa->iif, -+ hai, 1))) -+ /* MCoA TODO2 -+ * Send a deregistration BU -+ * Is it the correct place to do that? -+ * because when BACK is received, BULE has -+ * already been deleted -+ * (actually BAck cannot be received at the BULE's CoA -+ * because the iface is down...) -+ */ -+ mn_dereg_bule(bule); -+ hai->current_coa = NULL; -+ return; -+ } -+ if (rtr != NULL) -+ move_home = mn_home_rtr_chk(hai, rtr); -+ -+ if (hai->verdict == MN_HO_CHECK_LIFETIME) { -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ mn_coa_updated(hai); -+ } else if (hai->verdict == MN_HO_REESTABLISH) { -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ mn_coa_updated(hai); -+ } else { -+ switch (hai->verdict) { -+ case MN_HO_PROCEED: -+ hai->current_coa->addr = coa->addr; -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ /* MCoA -+ * Rules related to this iface are added if needed -+ */ -+ mcoa_iface_rules_add(hai->current_coa->iif, hai); -+ break; -+ case MN_HO_RETURN_HOME: -+ hai->current_coa->addr = hai->hoa.addr; -+ mcoa_iface_rules_del(hai->current_coa->iif, hai, 1); -+ break; -+ default: -+ return; -+ } -+ if (hai->at_home && !hai->pend_ba) { -+ /* check if router is HA */ -+ if (hai->home_reg_status != HOME_REG_NONE && -+ rtr_addr_chk(rtr, &hai->ha_addr)) { -+ mn_move(hai); -+ } else if (hai->home_reg_status != HOME_REG_NONE || -+ move_home) { -+ int type = FLUSH_FAILED; -+ mn_do_dad(hai, 0); -+ if (hai->home_reg_status == HOME_REG_NONE) -+ bul_iterate(&hai->bul, -+ _bul_flush, &type); -+ } -+ } -+ } - } - - static void mn_chk_ho_verdict(struct home_addr_info *hai, -@@ -2244,35 +3117,36 @@ static void mn_chk_ho_verdict(struct hom - IN6_ARE_ADDR_EQUAL(&event->coa->addr, &hai->hoa.addr)) - return; - -+ assert(hai->current_coa); - hai->verdict = mn_make_ho_verdict(event, hai, &rtr, &coa); - - if (hai->verdict == MN_HO_IGNORE) - return; - - if (hai->verdict == MN_HO_INVALIDATE) { -- hai->primary_coa.iif = 0; -+ hai->current_coa->iif = 0; - return; - } - if (rtr != NULL) - move_home = mn_home_rtr_chk(hai, rtr); - - if (hai->verdict == MN_HO_CHECK_LIFETIME) { -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ mn_update_coa_lifetime(hai->current_coa, coa); - mn_coa_updated(hai); - } else if (hai->verdict == MN_HO_REESTABLISH) { -- hai->primary_coa.iif = coa->ifindex; -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ hai->current_coa->iif = coa->ifindex; -+ mn_update_coa_lifetime(hai->current_coa, coa); - mn_coa_updated(hai); - } else { - switch (hai->verdict) { - case MN_HO_PROCEED: -- hai->primary_coa.iif = coa->ifindex; -- hai->primary_coa.addr = coa->addr; -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ hai->current_coa->iif = coa->ifindex; -+ hai->current_coa->addr = coa->addr; -+ mn_update_coa_lifetime(hai->current_coa, coa); - break; - case MN_HO_RETURN_HOME: -- hai->primary_coa.iif = rtr->ifindex; -- hai->primary_coa.addr = hai->hoa.addr; -+ hai->current_coa->iif = rtr->ifindex; -+ hai->current_coa->addr = hai->hoa.addr; - break; - default: - return; -@@ -2311,14 +3185,20 @@ int mn_movement_event(struct movement_ev - return 0; - } - dhaad_stop(hai); -- mn_chk_ho_verdict(hai, event); -+ if (hai->reg_mcoa) -+ mcoa_mn_chk_ho_verdict(hai, event); -+ else -+ mn_chk_ho_verdict(hai, event); - } else { - if (event->event_type == ME_COA_EXPIRED) - mn_rr_delete_co(&event->coa->addr); - list_for_each(lh, &home_addr_list) { - hai = list_entry(lh, - struct home_addr_info, list); -- mn_chk_ho_verdict(hai, event); -+ if (hai->reg_mcoa) -+ mcoa_mn_chk_ho_verdict(hai, event); -+ else -+ mn_chk_ho_verdict(hai, event); - } - } - } -@@ -2397,7 +3277,9 @@ void mn_start_ro(struct in6_addr *cn, st - "from %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(cn), NIP6ADDR(hoa)); - -- bule = bul_get(NULL, hoa, cn); -+ bule = bul_get(NULL, hoa, cn, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(iif):MCOA_NO_BID); - - if (bule) { - /* If BUL entry exists, RR is done or in progress */ -@@ -2405,7 +3287,9 @@ void mn_start_ro(struct in6_addr *cn, st - return; - } - -- bule = create_bule(hoa, cn); -+ bule = create_bule(hoa, cn, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(iif):MCOA_NO_BID); - if (!bule) { - MDBG("Malloc failed at starting of RO\n"); - pthread_rwlock_unlock(&mn_lock); -@@ -2419,6 +3303,18 @@ void mn_start_ro(struct in6_addr *cn, st - bule->coa_changed = -1; - bule->home = hai; - bule->rr.state = RR_NOT_STARTED; -+ bule->priority = get_prio_from_bid(bule->bid); -+ /* MCoA TODO2 -+ * At the moment we prevent MIPL from installing rules for -+ * this entry -+ */ -+ bule->rules = 1; -+ /* MCoA TODO2 -+ * Support for CN -+ * The table index must be filled with -+ * mcoa_mn_init_rt_table(bule) -+ */ -+ bule->table = RT6_TABLE_MIP6; - - mn_reset_ro_bule(bule); - -@@ -2451,7 +3347,10 @@ static void mn_recv_brr(const struct ip6 - hoa = in->dst; - pthread_rwlock_wrlock(&mn_lock); - /* Do we have BUL entry for cn? If not, drop. */ -- if ((e = bul_get(NULL, hoa, cn)) == NULL) { -+ /* MCoA TODO2 -+ * get BID from BRR BUI option -+ */ -+ if ((e = bul_get(NULL, hoa, cn, get_bid_from_ifindex(iif))) == NULL) { - pthread_rwlock_unlock(&mn_lock); - return; - } -@@ -2499,7 +3398,11 @@ static void mn_recv_be(const struct ip6_ - hoa = in->dst; - - /* Do we have BUL entry for cn? If not, drop. */ -- if ((e = bul_get(NULL, hoa, cn)) == NULL || e->type != BUL_ENTRY) -+ /* MCoA TODO2 -+ * get BID from BUI option in BERROR -+ */ -+ if ((e = bul_get(NULL, hoa, cn, get_bid_from_ifindex(iif))) == NULL -+ || e->type != BUL_ENTRY) - goto out; - - clock_gettime(CLOCK_REALTIME, &now); -diff -r 82fcd4bea972 src/mn.h ---- a/src/mn.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mn.h Fri Jan 11 17:02:25 2008 +0100 -@@ -52,6 +52,7 @@ struct ha_candidate_list { - #define NEMO_FWD_BLOCK 0x10 - - struct mn_addr { -+ struct list_head list; - struct in6_addr addr; - int iif; - struct timespec timestamp; -@@ -75,7 +76,8 @@ struct home_addr_info { - uint8_t home_plen; - struct in6_addr home_prefix; - struct hash bul; /* Binding Update List */ -- struct mn_addr primary_coa; -+ struct mn_addr *current_coa; /* MCoA: pointer to a member of mcoa */ -+ struct list_head mcoa; /* MCoA: list of all active CoAs */ - struct list_head ro_policies; - struct ha_candidate_list ha_list; - struct in6_addr ha_addr; -@@ -84,9 +86,11 @@ struct home_addr_info { - int if_tunnel; - int if_home; - int if_block; -+ int table; /* MCoA: routing table number where routes are stored */ - short hwalen; - uint8_t altcoa; - uint16_t mob_rtr; -+ uint8_t reg_mcoa; - char name[IF_NAMESIZE]; - int mnp_count; - struct list_head mob_net_prefixes; -diff -r 82fcd4bea972 src/movement.c ---- a/src/movement.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/movement.c Fri Jan 11 17:02:25 2008 +0100 -@@ -165,7 +165,7 @@ static void md_prefix_rule_del(struct pr - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, -- RTN_UNICAST, &prefix, p->ple_plen, -+ 0, RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); - } - -@@ -312,10 +312,10 @@ static void md_expire_router(struct md_i - - static void md_block_rule_del(struct md_inet6_iface *iface) - { -- rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK_HOA, 0, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); -- rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -- &in6addr_any, 128, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, 0, -+ RTN_UNICAST, &in6addr_any, 128, &in6addr_any, 0, 0); - iface->iface_flags &= ~MD_BLOCK_TRAFFIC; - } - -@@ -1290,7 +1290,7 @@ static void md_prefix_rule_add(struct pr - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_add(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, -- RTN_UNICAST, &prefix, p->ple_plen, -+ 0, RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); - } - -@@ -1361,13 +1361,13 @@ static int md_block_rule_add(struct md_i - iface->iface_flags |= MD_BLOCK_TRAFFIC; - /* Allow DAD probes and RS messages */ - rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &in6addr_any, 128, &in6addr_any, 0, 0); - /* drop outgoing global traffic until DAD has been performed - on CoA to make routing and tunnel end-point updates atomic - during handoff */ - return rule_add(NULL, 0, -- IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, -+ IP6_RULE_PRIO_MIP6_BLOCK_HOA, 0, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); - } - -diff -r 82fcd4bea972 src/mpdisc_ha.c ---- a/src/mpdisc_ha.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mpdisc_ha.c Fri Jan 11 17:02:25 2008 +0100 -@@ -68,7 +68,7 @@ static inline struct mpa_entry *mpa_get( - const struct in6_addr *hoa) - - { -- return hash_get(&mpa_hash, ha, hoa); -+ return hash_get(&mpa_hash, ha, hoa, 0); - } - - /* HA functions */ -@@ -214,7 +214,7 @@ void mpd_cancel_mpa(const struct in6_add - pthread_mutex_lock(&mpa_lock); - e = mpa_get(ha, hoa); - if (e != NULL) { -- hash_delete(&mpa_hash, &e->ha, &e->hoa); -+ hash_delete(&mpa_hash, &e->ha, &e->hoa, 0); - if (tsisset(e->delay)) - del_task(&e->tqe); - free(e); -@@ -239,7 +239,7 @@ int mpd_start_mpa(const struct in6_addr - memset(e, 0, sizeof(struct mpa_entry)); - e->ha = *ha; - e->hoa = *hoa; -- if (hash_add(&mpa_hash, e, &e->ha, &e->hoa)) { -+ if (hash_add(&mpa_hash, e, &e->ha, &e->hoa, NULL)) { - free(e); - goto out; - } -diff -r 82fcd4bea972 src/mpdisc_mn.c ---- a/src/mpdisc_mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mpdisc_mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -65,7 +65,7 @@ static inline struct mps_entry *mps_get( - static inline struct mps_entry *mps_get(const struct in6_addr *hoa, - const struct in6_addr *ha) - { -- return hash_get(&mps_hash, hoa, ha); -+ return hash_get(&mps_hash, hoa, ha, 0); - } - - #ifdef ENABLE_VT -@@ -116,7 +116,7 @@ void mpd_cancel_mps(const struct in6_add - e = mps_get(hoa, ha); - if (e != NULL) { - dbg("canceling MPS\n"); -- hash_delete(&mps_hash, &e->hoa, &e->ha); -+ hash_delete(&mps_hash, &e->hoa, &e->ha, 0); - if (tsisset(e->delay)) - del_task(&e->tqe); - free(e); -@@ -175,7 +175,7 @@ int mpd_schedule_first_mps(const struct - memset(e, 0, sizeof(struct mps_entry)); - e->hoa = *hoa; - e->ha = *ha; -- if (hash_add(&mps_hash, e, &e->hoa, &e->ha)) { -+ if (hash_add(&mps_hash, e, &e->hoa, &e->ha, NULL)) { - free(e); - goto out; - } -diff -r 82fcd4bea972 src/ndisc.h ---- a/src/ndisc.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/ndisc.h Fri Jan 11 17:02:25 2008 +0100 -@@ -21,6 +21,7 @@ static inline short nd_get_l2addr_len(un - return 1; - /* supported virtual devices */ - case ARPHRD_SIT: -+ return 4; - case ARPHRD_TUNNEL6: - case ARPHRD_PPP: - case ARPHRD_IPGRE: -diff -r 82fcd4bea972 src/policy.c ---- a/src/policy.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/policy.c Fri Jan 11 17:02:25 2008 +0100 -@@ -47,6 +47,25 @@ pthread_rwlock_t policy_lock; - pthread_rwlock_t policy_lock; - struct hash policy_bind_acl_hash; - int def_bind_policy = IP6_MH_BAS_PROHIBIT; -+ -+/** -+ * default_mcoa_reg - Check if MCoA reg is allowed -+ * @remote_hoa: remote MN's home address -+ * -+ * Returns 0 if not allowed, 1 if allowed. -+ **/ -+int default_mcoa_reg(const struct in6_addr *remote_hoa) -+{ -+ struct policy_bind_acl_entry *acl; -+ int ret = 1; -+ -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa, 0); -+ if (!conf.HaAcceptMCoAReg || (acl && !acl->mcoa_reg)) -+ ret = 0; -+ pthread_rwlock_unlock(&policy_lock); -+ return ret; -+} - - /** - * default_best_iface - select best interface during handoff -@@ -148,7 +167,7 @@ int default_discard_binding(const struct - return IP6_MH_BAS_MR_OP_NOT_PERMITTED; - - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa, 0); - if (acl != NULL) { - ret = acl->bind_policy; - if (ret < IP6_MH_BAS_UNSPECIFIED && -@@ -213,8 +232,16 @@ int default_accept_inet6_iface(int iif) - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - if (nif->ifindex == iif) { -- if (is_if_mn(nif)) -- return nif->mn_if_preference; -+ if (is_if_mn(nif)) { -+ /* MCoA -+ * Return the BID Priority if the -+ * interface preference is 0 -+ */ -+ if(nif->mn_if_preference) -+ return nif->mn_if_preference; -+ else -+ return nif->mn_if_bidprio; -+ } - return 0; - } - } -@@ -259,7 +286,7 @@ int default_get_mnp_count(const struct i - int ret = 0; - struct policy_bind_acl_entry *acl; - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa, 0); - if (acl != NULL) - ret = acl->mnp_count; - pthread_rwlock_unlock(&policy_lock); -@@ -275,7 +302,7 @@ int default_get_mnps(const struct in6_ad - struct policy_bind_acl_entry *acl; - - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa, 0); - if (acl != NULL) { - struct list_head *l; - list_for_each(l, &acl->mob_net_prefixes) { -@@ -314,7 +341,7 @@ static int policy_bind_acl_add(struct po - static int policy_bind_acl_add(struct policy_bind_acl_entry *acl) - { - int err; -- err = hash_add(&policy_bind_acl_hash, acl, NULL, &acl->hoa); -+ err = hash_add(&policy_bind_acl_hash, acl, NULL, &acl->hoa, NULL); - if (!err) { - list_del(&acl->list); - } -diff -r 82fcd4bea972 src/policy.h ---- a/src/policy.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/policy.h Fri Jan 11 17:02:25 2008 +0100 -@@ -6,7 +6,13 @@ - #include <netinet/in.h> - #include "list.h" - --#define POL_MN_IF_DEF_PREFERENCE 5 -+/* MCoA -+ * Changed POL_MN_IF_DEF_PREFERENCE from 5 to 0 -+ */ -+#define POL_MN_IF_DEF_PREFERENCE 0 -+#define POL_MN_IF_DEF_BID 0 -+#define POL_MN_IF_DEF_BID_PRIORITY 0 -+#define POL_MN_IF_DEF_RELIABLE 1 - - struct ip6_mh_binding_update; - struct nd_router_advert; -@@ -17,9 +23,18 @@ struct policy_bind_acl_entry { - struct in6_addr hoa; - int plen; - int bind_policy; -+ int mcoa_reg; - int mnp_count; - struct list_head mob_net_prefixes; - }; -+ -+/** -+ * default_mcoa_reg - Check if MCoA registration is allowed -+ * @remote_hoa: remote MN's home address -+ * -+ * Returns 0 if not allowed, 1 if allowed. -+ **/ -+int default_mcoa_reg(const struct in6_addr *remote_hoa); - - /** - * default_best_iface - select best interface during handoff -diff -r 82fcd4bea972 src/retrout.c ---- a/src/retrout.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/retrout.c Fri Jan 11 17:02:25 2008 +0100 -@@ -151,7 +151,7 @@ static struct rrlentry *rre_create(int t - rre->own2 = *own2; - rre->iif = iif; - -- if (hash_add(&rrl_hash, rre, &rre->own1, &rre->peer) < 0) { -+ if (hash_add(&rrl_hash, rre, &rre->own1, &rre->peer, NULL) < 0) { - rrl_delete(rre); - return NULL; - } -@@ -168,7 +168,7 @@ static struct rrlentry *rrl_get(int type - - assert(our_addr); - -- rre = (struct rrlentry *)hash_get(&rrl_hash, our_addr, peer_addr); -+ rre = (struct rrlentry *)hash_get(&rrl_hash, our_addr, peer_addr, 0); - - if (rre != NULL && rre->type != type) - return NULL; -@@ -188,7 +188,7 @@ static void rrl_delete(struct rrlentry * - TRACE; - - del_task(&rre->tqe); -- hash_delete(&rrl_hash, &rre->own1, &rre->peer); -+ hash_delete(&rrl_hash, &rre->own1, &rre->peer, 0); - - if (rre->type == COT_ENTRY) { - struct list_head *list, *n; -@@ -629,7 +629,7 @@ int mn_rr_error_check(const struct in6_a - const struct in6_addr *peer, - struct in6_addr *hoa) - { -- struct rrlentry *rre = hash_get(&rrl_hash, own, peer); -+ struct rrlentry *rre = hash_get(&rrl_hash, own, peer, 0); - - if (rre == NULL || !rre->wait) - return 0; -@@ -694,7 +694,11 @@ static void mn_recv_cot(const struct ip6 - struct addr_holder *ah; - - ah = list_entry(list, struct addr_holder, list); -- bule = bul_get(NULL, &ah->addr, cn_addr); -+ /* MCoA TODO2 -+ * MCoA does not work with RR -+ * At the moment the first entry that match is chosen -+ */ -+ bule = bul_get(NULL, &ah->addr, cn_addr, MCOA_NO_BID); - - if (bule == NULL || bule->type != BUL_ENTRY || - !IN6_ARE_ADDR_EQUAL(&rre_co->own1, &bule->coa)) { -@@ -774,7 +778,11 @@ static void mn_recv_hot(const struct ip6 - pthread_rwlock_unlock(&mn_lock); - return; - } -- bule = bul_get(NULL, home_addr, cn_addr); -+ /* MCoA TODO2 -+ * MCoA does not work with RR -+ * At the moment the first entry that match is chosen -+ */ -+ bule = bul_get(NULL, home_addr, cn_addr, MCOA_NO_BID); - - if (bule == NULL || bule->type != BUL_ENTRY) { - rrl_delete(rre_ho); -diff -r 82fcd4bea972 src/rtnl.c ---- a/src/rtnl.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/rtnl.c Fri Jan 11 17:02:25 2008 +0100 -@@ -299,7 +299,7 @@ int route_del(int oif, uint8_t table, ui - } - - static int rule_mod(const char *iface, int cmd, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { -@@ -331,6 +331,8 @@ static int rule_mod(const char *iface, i - addattr_l(n, sizeof(buf), RTA_SRC, src, sizeof(*src)); - if (priority) - addattr32(n, sizeof(buf), RTA_PRIORITY, priority); -+ if (fwmark) -+ addattr32(n, sizeof(buf), RTA_PROTOINFO, fwmark); - if (iface) - addattr_l(n, sizeof(buf), RTA_IIF, iface, strlen(iface) + 1); - -@@ -349,12 +351,12 @@ static int rule_mod(const char *iface, i - * negative otherwise. - **/ - int rule_add(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { - return rule_mod(iface, RTM_NEWRULE, table, -- priority, action, -+ priority, fwmark, action, - src, src_plen, dst, dst_plen, flags); - } - -@@ -370,12 +372,12 @@ int rule_add(const char *iface, uint8_t - * otherwise. - **/ - int rule_del(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { - return rule_mod(iface, RTM_DELRULE, table, -- priority, action, -+ priority, fwmark, action, - src, src_plen, dst, dst_plen, flags); - } - -diff -r 82fcd4bea972 src/rtnl.h ---- a/src/rtnl.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/rtnl.h Fri Jan 11 17:02:25 2008 +0100 -@@ -17,11 +17,14 @@ - #define IP6_RT_PRIO_ADDRCONF 256 - - #define IP6_RULE_PRIO_MIP6_MNP_IN 1000 --#define IP6_RULE_PRIO_MIP6_HOA_OUT 1001 --#define IP6_RULE_PRIO_MIP6_COA_OUT 1002 --#define IP6_RULE_PRIO_MIP6_BLOCK 1003 --#define IP6_RULE_PRIO_MIP6_BLOCK_HOA 1004 --#define IP6_RULE_PRIO_MIP6_FWD 1005 -+#define IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA 1001 -+#define IP6_RULE_PRIO_MIP6_HOA_OUT 1002 -+#define IP6_RULE_PRIO_MIP6_COA_OUT 1003 -+#define IP6_RULE_PRIO_MIP6_BLOCK 1004 -+#define IP6_RULE_PRIO_MIP6_BLOCK_HOA 1005 -+#define IP6_RULE_PRIO_MIP6_FWD_FWM 1006 -+#define IP6_RULE_PRIO_MIP6_FWD_MCOA 1007 -+#define IP6_RULE_PRIO_MIP6_FWD 1008 - - static inline int rtnl_route_open(struct rtnl_handle *rth, - unsigned subscriptions) -@@ -74,12 +77,12 @@ int route_del(int oif, uint8_t table, ui - const struct in6_addr *gateway); - - int rule_add(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags); - - int rule_del(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen,int flags); - -diff -r 82fcd4bea972 src/scan.l ---- a/src/scan.l Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/scan.l Fri Jan 11 17:02:25 2008 +0100 -@@ -137,7 +137,15 @@ MnDiscardHaParamProb { return MNDISCARD - MnDiscardHaParamProb { return MNDISCARDHAPARAMPROB; } - OptimisticHandoff { return OPTIMISTICHANDOFF; } - HaAcceptMobRtr { return HAACCEPTMOBRTR; } -+HaAcceptMCoAReg { return HAACCEPTMCOAREG; } -+MCoAReg { return MCOAREG; } -+NoMCoAReg { return NOMCOAREG; } - IsMobRtr { return ISMOBRTR; } -+Bid { return BID; } -+BidPriority { return BIDPRIORITY; } -+Reliable { return RELIABLE; } -+RegMultipleCoA { return REGMULTIPLECOA; } -+IfMultipleCoA { return IFMULTIPLECOA; } - HaServedPrefix { return HASERVEDPREFIX; } - HomePrefix { return HOMEPREFIX; } - MobRtrUseExplicitMode { return MOBRTRUSEEXPLICITMODE; } -diff -r 82fcd4bea972 src/tunnelctl.c ---- a/src/tunnelctl.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/tunnelctl.c Fri Jan 11 17:02:25 2008 +0100 -@@ -157,7 +157,7 @@ static int __tunnel_del(struct mip6_tnl - if (tnl->users == 0) { - struct ifreq ifr; - list_del(&tnl->list); -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - strcpy(ifr.ifr_name, tnl->parm.name); - if ((res = ioctl(tnl_fd, SIOCDELTUNNEL, &ifr)) < 0) { - TDBG("SIOCDELTUNNEL failed status %d %s\n", -@@ -249,7 +249,7 @@ static struct mip6_tnl *__tunnel_add(str - TDBG("no device called %s\n", tnl->parm.name); - goto err; - } -- if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) -+ if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr, NULL) < 0) - goto err; - - list_add_tail(&tnl->list, &tnl_list); -@@ -287,7 +287,7 @@ int tunnel_add(struct in6_addr *local, - int res; - - pthread_mutex_lock(&tnl_lock); -- if ((tnl = hash_get(&tnl_hash, local, remote)) != NULL) { -+ if ((tnl = hash_get(&tnl_hash, local, remote, 0)) != NULL) { - tnl->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count increased to %d\n", -@@ -339,9 +339,10 @@ static int __tunnel_mod(struct mip6_tnl - errno, strerror(errno)); - return -1; - } -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - memcpy(&tnl->parm, &parm, sizeof(struct ip6_tnl_parm)); -- if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) { -+ if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, -+ &tnl->parm.raddr, NULL) < 0) { - free(tnl); - return -1; - } -@@ -387,7 +388,7 @@ int tunnel_mod(int ifindex, - old = get_tnl(ifindex); - assert(old != NULL); - -- if ((new = hash_get(&tnl_hash, local, remote)) != NULL) { -+ if ((new = hash_get(&tnl_hash, local, remote, 0)) != NULL) { - if (new != old) { - new->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " -@@ -448,7 +449,7 @@ static int tnl_cleanup(void *data, void - { - struct mip6_tnl *tnl = (struct mip6_tnl *) data; - list_del(&tnl->list); -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - free(tnl); - return 0; - } -diff -r 82fcd4bea972 src/vt.c ---- a/src/vt.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/vt.c Fri Jan 11 17:02:25 2008 +0100 -@@ -428,6 +428,12 @@ static int bul_vt_dump(void *data, void - fprintf(vh->vh_stream, " last_coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bule->last_coa)); - -+ if (bule->bid) { -+ fprintf(vh->vh_stream, " BID %d", bule->bid); -+ fprintf(vh->vh_stream, " BidPriority %d", -+ bule->priority); -+ } -+ - fprintf(vh->vh_stream, "\n"); - - if (!(bule->flags & IP6_MH_BU_HOME)) { -@@ -579,6 +585,11 @@ static int bcache_vt_dump(void *data, vo - - fprintf(vh->vh_stream, " coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->coa)); -+ -+ if (bce->bid) { -+ fprintf(vh->vh_stream, " BID %d", bce->bid); -+ fprintf(vh->vh_stream, " BidPriority %d", bce->priority); -+ } - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) - fprintf(vh->vh_stream, " nonce %u", bce->nonce_coa); -diff -r 82fcd4bea972 src/xfrm.c ---- a/src/xfrm.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/xfrm.c Fri Jan 11 17:02:25 2008 +0100 -@@ -56,7 +56,7 @@ - #include "conf.h" - #include "ipsec.h" - --#define XFRM_DEBUG_LEVEL 1 -+#define XFRM_DEBUG_LEVEL 2 - - #if XFRM_DEBUG_LEVEL >= 1 - #define XDBG dbg -@@ -1555,7 +1555,7 @@ static int xfrm_bule_bce_update(const st - int res = -1; - pthread_rwlock_rdlock(&mn_lock); - if ((hai = mn_get_home_addr(our_addr)) != NULL) { -- if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { -+ if ((e = bul_get(hai, NULL, peer_addr, MCOA_NO_BID)) != NULL) { - if (e->type == BUL_ENTRY && - !_xfrm_add_bule_bce(our_addr, peer_addr, replace)) - res = 0; -@@ -1582,30 +1582,34 @@ int xfrm_add_bce(const struct in6_addr * - int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, -- int replace) -+ int replace, -+ int create) - { - struct xfrm_selector sel; - - /* Create policy for outbound RO data traffic */ -- set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); -- if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, replace, 0)){ -- /* -- * WORKAROUND -- * In some cases, MN fail to add it because of the state -- * inserted by kernel when notifying aquire. So,update it. -- */ -- if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, 1, 0)) -- return -1; -- } -- set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); -- if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, replace, 0)){ -- /* -- * WORKAROUND -- * In some cases, MN fail to add it because of the state -- * inserted by kernel when notifying aquire. So,update it. -- */ -- if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, 1, 0)) -- return -1; -+ if (create || replace) { -+ set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); -+ if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, replace, 0)){ -+ /* -+ * WORKAROUND -+ * In some cases, MN fail to add it because of the state -+ * inserted by kernel when notifying aquire. So,update it. -+ */ -+ if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, 1, 0)) -+ return -1; -+ } -+ -+ set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); -+ if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, replace, 0)){ -+ /* -+ * WORKAROUND -+ * In some cases, MN fail to add it because of the state -+ * inserted by kernel when notifying aquire. So,update it. -+ */ -+ if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, 1, 0)) -+ return -1; -+ } - } - if (is_mn() && !xfrm_bule_bce_update(our_addr, peer_addr, replace)) - return 0; -@@ -1614,7 +1618,8 @@ int xfrm_add_bce(const struct in6_addr * - _ha_mn_ipsec_pol_mod, NULL) < 0) - return -1; - } -- _xfrm_add_bce(our_addr, peer_addr, replace); -+ if (create || replace) -+ _xfrm_add_bce(our_addr, peer_addr, replace); - return 0; - } - -@@ -1643,7 +1648,7 @@ void xfrm_del_bce(const struct in6_addr - /* for MN-MN communications, checking BUL to insert RO policy */ - pthread_rwlock_rdlock(&mn_lock); - if ((hai = mn_get_home_addr(our_addr)) != NULL) { -- if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { -+ if ((e = bul_get(hai, NULL, peer_addr, MCOA_NO_BID)) != NULL) { - if (e->type == BUL_ENTRY) - _xfrm_add_bule_bce(our_addr, peer_addr, 0); - } -@@ -1736,7 +1741,7 @@ static int _xfrm_bce_reset(struct bulent - static int _xfrm_bce_reset(struct bulentry *bule) - { - /* for MN - MN communication */ -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, MCOA_NO_BID); - int res = 0; - if (!bce) - return 0; -@@ -1754,21 +1759,34 @@ static int _xfrm_del_bule_data(struct bu - static int _xfrm_del_bule_data(struct bulentry *bule) - { - struct xfrm_selector sel; -+ int bule_exists = mcoa_bule_count(bule); - int prio; - -- set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); -- xfrm_state_del(IPPROTO_DSTOPTS, &sel); -+ /* MCoA -+ * XFRM states are deleted only when the last BULE for -+ * the same peer is deleted, or when returning home -+ */ -+ if (!bule_exists || !bule->home->reg_mcoa || bule->home->at_home) { -+ XDBG2("Last entry for the peer, deleting XFRM states\n"); -+ set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); -+ xfrm_state_del(IPPROTO_DSTOPTS, &sel); -+ } - - if (bule->home->home_reg_status != HOME_REG_NONE && - mn_has_cn_ro_pol(bule)) { - struct xfrm_user_tmpl tmpl; - create_trig_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -+ /* MCoA: replaced bule->home->if_tunnel with bule->if_tunnel */ - set_selector(&bule->peer_addr, &bule->hoa, -- 0, 0, 0, bule->home->if_tunnel, &sel); -+ 0, 0, 0, bule->if_tunnel, &sel); - xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, MIP6_PRIO_RO_TRIG, &tmpl, 1); -- } else -- _mn_bule_ro_pol_del(bule, bule->home->if_tunnel); -+ } else if(!bule_exists || !bule->home->reg_mcoa || bule->home->at_home) { -+ /* MCoA: policies deleted only if this is the last BULE -+ * for the same peer, or when returning home */ -+ /* MCoA: replaced bule->home->if_tunnel with bule->if_tunnel */ -+ _mn_bule_ro_pol_del(bule, bule->if_tunnel); -+ } - - if (!(bule->flags & IP6_MH_BU_HOME)) - _xfrm_bce_reset(bule); -@@ -1779,20 +1797,25 @@ static int _xfrm_del_bule_data(struct bu - /* MN - CN/HA case, BU out */ - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -- if (bule->flags & IP6_MH_BU_ACK) { -+ if ((bule->flags & IP6_MH_BU_ACK) -+ && (!bule_exists || !bule->home->reg_mcoa -+ || bule->home->at_home)) { - set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, - IP6_MH_TYPE_BACK, 0, 0, &sel); - if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, NULL, 0)) - return -1; - } -- set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -- IP6_MH_TYPE_BU, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, NULL, 0)) -- return -1; -+ if (!bule_exists || !bule->home->reg_mcoa -+ || bule->home->at_home) { -+ set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -+ IP6_MH_TYPE_BU, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, NULL, 0)) -+ return -1; -+ bule->xfrm_state &= ~BUL_XFRM_STATE_DATA; -+ } - -- bule->xfrm_state &= ~BUL_XFRM_STATE_DATA; - return 0; - } - -@@ -1817,7 +1840,14 @@ void xfrm_del_bule(struct bulentry *bule - { - if (bule->xfrm_state & BUL_XFRM_STATE_DATA) - _xfrm_del_bule_data(bule); -- _xfrm_del_bule_sig(bule); -+ /* MCoA -+ * XFRM policies are deleted only when the last BULE for the -+ * same peer is deleted, or when returning home -+ */ -+ if (mcoa_bule_count(bule) == 0 || bule->home->at_home) { -+ XDBG2("Last entry for the peer, deleting XFRM policies\n"); -+ _xfrm_del_bule_sig(bule); -+ } - } - - /* before sending BU, MN should insert policy/state only for BU/BA */ -@@ -1829,14 +1859,26 @@ int xfrm_pre_bu_add_bule(struct bulentry - int rdata = bule->xfrm_state & BUL_XFRM_STATE_DATA; - int prio; - int exist = 0; -+ int bule_count = mcoa_bule_count(bule); - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -- xfrm_block_link(hai); -- if (hai->mob_rtr && !(hai->home_block & NEMO_FWD_BLOCK)) -- xfrm_block_fwd(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); -+ if (!hai->reg_mcoa) -+ xfrm_block_link(hai); -+ else -+ xfrm_block_bule_link(bule); -+ if (hai->mob_rtr) { -+ if (!hai->reg_mcoa && -+ !(hai->home_block & NEMO_FWD_BLOCK)) -+ xfrm_block_fwd(hai); -+ else if (hai->reg_mcoa && -+ !(bule->home_block & NEMO_FWD_BLOCK)) -+ bule_block_fwd(bule); -+ } - } - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (rdata) -@@ -1850,25 +1892,32 @@ int xfrm_pre_bu_add_bule(struct bulentry - return -1; - } - /* MN - CN/HA case, BU out */ -- prio = (bule->flags & IP6_MH_BU_HOME ? -- MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -- if (bule->flags & IP6_MH_BU_ACK) { -- create_rh_tmpl(&tmpl); -- set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, -- IP6_MH_TYPE_BACK, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_IN, -+ if (bule_count == 1) { -+ /* MCoA -+ * If another BULE already exists for this HoA/HA addr -+ * we do not need to install the policies once again -+ */ -+ prio = (bule->flags & IP6_MH_BU_HOME ? -+ MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -+ if (bule->flags & IP6_MH_BU_ACK) { -+ create_rh_tmpl(&tmpl); -+ set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, -+ IP6_MH_TYPE_BACK, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_IN, -+ XFRM_POLICY_ALLOW, prio, &tmpl, 1)) -+ return -1; -+ } -+ create_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -+ set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -+ IP6_MH_TYPE_BU, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, &tmpl, 1)) - return -1; - } -- create_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -- set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -- IP6_MH_TYPE_BU, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, &tmpl, 1)) -- return -1; - - if (!(bule->flags & IP6_MH_BU_HOME)) { -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, -+ MCOA_NO_BID); - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bce(&bule->hoa, &bule->peer_addr, 1)) { -@@ -1879,11 +1928,16 @@ int xfrm_pre_bu_add_bule(struct bulentry - exist = 1; - } - } -- if(!exist &&_mn_bule_ro_pol_add(bule, bule->home->if_tunnel, rdata)) -+ /* MCoA: Replaced bule->home->if_tunnel with bule->if_tunnel */ -+ if(!exist && bule_count == 1 -+ && _mn_bule_ro_pol_add(bule, bule->if_tunnel, rdata)) - return -1; - set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); - /* XXX: acquired state is already inserted */ -- if (!(bule->flags & IP6_MH_BU_HOME)) { -+ /* MCoA: Add the states if there is only 1 BCE for the peer, -+ * otherwise just update the CoA -+ */ -+ if (!(bule->flags & IP6_MH_BU_HOME) || mcoa_bule_count(bule) > 1) { - XDBG2("%s: original rdata = %d\n", __FUNCTION__, rdata); - rdata = 1; - } -@@ -1902,15 +1956,20 @@ int xfrm_post_ba_mod_bule(struct bulentr - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); -+ if (bule->home_block & NEMO_FWD_BLOCK) -+ bule_unblock_fwd(bule); - } - /* check if XFRM policies and states have already been cleaned up */ - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) - return 0; - - if (!(bule->flags & IP6_MH_BU_HOME)) { -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, -+ MCOA_NO_BID); - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bule_bce(&bule->hoa, -@@ -1925,11 +1984,27 @@ int xfrm_post_ba_mod_bule(struct bulentr - } - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_DATA : MIP6_PRIO_RO_BULE_DATA); -- set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, -- bule->home->if_tunnel, &sel); -- create_dstopt_tmpl(&tmpls[0], &bule->peer_addr, &bule->hoa); -- ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, tmpls, 1); -+ -+ /* MCoA: Replaced bule->home->if_tunnel with bule->if_tunnel */ -+ set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, -+ bule->if_tunnel, &sel); -+ -+ /* MCoA TODO1: to update according to the latest draft. -+ * When MCoA is used, do not use HAO dest. option -+ * for traffic from the MN/MR to the HA. Tunnel packets -+ * instead. -+ */ -+ if(bule->home->reg_mcoa) { -+ ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, -+ NULL, 0); -+ } else { -+ create_dstopt_tmpl(&tmpls[0], &bule->peer_addr, &bule->hoa); -+ ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, -+ tmpls, 1); -+ } -+ - if (ret) - XDBG("failed to insert outbound policy\n"); - -@@ -2126,6 +2201,31 @@ void xfrm_cleanup(void) - xfrm_cn_cleanup(); - } - -+/* blocking all payload packets from MN via a specific interface */ -+int xfrm_block_bule_link(struct bulentry *bule) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ bule->home_block |= HOME_LINK_BLOCK; -+ /* allow MN to send NA messages */ -+ /* RK: such policy is already installed in xfrm_cn_init at startup, -+ * so we update it (update field to 1) */ -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_NEIGHBOR_ADVERT, 0, bule->if_coa, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 1 /* update */, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, -+ MIP6_PRIO_HOME_SIG_ANY, NULL, 0))) -+ return ret; -+ -+ /* block any packets from HoA to the CN */ -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, bule->if_coa, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, -+ XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ - /* blocking all payload packets from MN */ - int xfrm_block_link(struct home_addr_info *hai) - { -@@ -2141,6 +2241,21 @@ int xfrm_block_link(struct home_addr_inf - MIP6_PRIO_HOME_BLOCK, NULL, 0))) - return ret; - return ret; -+} -+ -+void xfrm_unblock_bule_link(struct bulentry *bule) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, bule->if_coa, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -+ /* RK: instead of deleting the policy, update it to its previous state -+ * (the one installed in xfrm_cn_init) */ -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_NEIGHBOR_ADVERT, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, 1 /* update */, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, -+ MIP6_PRIO_NO_RO_SIG_ANY, NULL, 0) < 0) -+ XDBG("Could not update NA policy\n"); -+ bule->home_block &= ~HOME_LINK_BLOCK; - } - - void xfrm_unblock_link(struct home_addr_info *hai) -diff -r 82fcd4bea972 src/xfrm.h ---- a/src/xfrm.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/xfrm.h Fri Jan 11 17:02:25 2008 +0100 -@@ -51,7 +51,8 @@ int xfrm_add_bce(const struct in6_addr * - int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, -- int replace); -+ int replace, -+ int create); - - void xfrm_del_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); -@@ -82,7 +83,9 @@ int cn_wildrecv_bu_pol_add(void); - int cn_wildrecv_bu_pol_add(void); - void cn_wildrecv_bu_pol_del(void); - -+int xfrm_block_bule_link(struct bulentry *bule); - int xfrm_block_link(struct home_addr_info *hai); -+void xfrm_unblock_bule_link(struct bulentry *bule); - void xfrm_unblock_link(struct home_addr_info *hai); - - int xfrm_block_hoa(struct home_addr_info *hai); diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch deleted file mode 100755 index 50da24d540..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch +++ /dev/null @@ -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); - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz deleted file mode 100755 index 940362a1b530c14ae9105ecac74edb387ab8c724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398552 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 z%0A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 bfAin`H~-Cl^WXgUm;U}gmtOqE02m(tVN@zX -- GitLab