http://www.intel.com/design/network/swsup/np_sla/ixp400.htm
http://www.intel.com/design/network/products/npfamily/ixp425swr1.htm

                      INTEL SOFTWARE LICENSE AGREEMENT
           IMPORTANT - READ BEFORE COPYING, INSTALLING OR USING.

   DO NOT USE OR LOAD THIS SOFTWARE OR ANY ASSOCIATED MATERIALS
   (COLLECTIVELY, THE "SOFTWARE") UNTIL YOU HAVE CAREFULLY READ THE
   FOLLOWING TERMS AND CONDITIONS. BY LOADING OR USING THE SOFTWARE, YOU
   AS AN INDIVIDUAL AND ON BEHALF OF YOUR EMPLOYER ("YOU") AGREE TO THE
   TERMS OF THIS AGREEMENT.
   IF YOU DO NOT WISH TO SO AGREE, DO NOT INSTALL OR USE THE SOFTWARE.
   LICENSE: Subject to the terms and conditions of this Agreement
   including without limitation the restrictions below, Intel Corporation
   ("Intel") grants to you the following non-exclusive, non-transferable,
   non-assignable, royalty-free copyright licenses in the Software:
   * "Redistributable Code" includes all Software EXCEPT for the software
   contained in the subdirectory "ixp425_xscale_sw/src/adsl". Subject to
   the terms and conditions of this Agreement, You may reproduce, create
   derivative works of, and distribute Redistributable Code, in
   executable or source form, ONLY with, or as part of, Your Product (as
   defined below), subject to the restrictions set forth in this
   Agreement. Distribution for any other purpose or in any other manner
   is prohibited under this license.
   * If you have downloaded the version of IXP400 Software with
   encryption Software, all Software contained in the
   ixp425AccessLibraryWithCrypto_x_y.zip (Where x and y represent the
   specific version number of the software) is also Redistributable Code
   EXCEPT for the software contained in the subdirectory
   "ixp425_xscale_sw/src/adsl." Note that all Software in the
   ixp425AccessLibraryWithCrypto_x_y.zip file is subject to the U.S.
   Export Administration Regulations and other U.S. law, and You are
   responsible for compliance with such laws and regulations.
   * "Non-Redistributable Code" includes the Software contained in the
   ixp425AccessLibrary_x_y.zip and ixp425AccessLibraryWithCrypto_x_y.zip
   subdirectory "ixp425_xscale_sw/src/adsl." Subject to the terms and
   conditions of this Agreement, You may reproduce and create derivative
   works of Non-Redistributable Code, and distribute such derivative
   works only in executable form and ONLY with, or as part of, Your
   Product, subject to the restrictions set forth in this Agreement.
   Redistributable Code may NOT be redistributed to third parties in
   source code form, and may NOT be distributed if such distribution
   would obligate You, under an open source agreement or otherwise, to
   make source code available to third parties. If you desire to
   redistribute the Non-Redistributable Source Code, please contact Intel
   to request information.
   "Your Product" must be: (1) a hardware product that includes an Intel
   network processor ("Your Hardware Product"); and/or (2) software that
   runs on or interfaces with an Intel network processor; and which also
   includes a substantial amount of software functionality, software
   modifications and/or hardware that differentiates it from the Software
   as provided by Intel ("Your Software Product").
   RESTRICTIONS:
   Any authorized distribution of the Software and/or derivative works
   thereof is also subject to the following conditions: You: (i) enter
   into a written agreement (enforceable "shrink-wrap" or "click to
   accept" licenses are permissible) with the entity or person to whom
   you are distributing such Software that are least as restrictive as
   the terms and conditions you enter into with your licensees for
   distribution of your software; (ii) are solely responsible for any
   warranty, update or support obligation, or other liability that may
   arise from Your distribution of Software and/or derivative works;
   (iii) will not make any statement that your product is warranted,
   "certified," or that its performance is guaranteed, by Intel; (iv)
   will not use Intel's name or trademarks to market your product without
   written permission of an authorized representative of Intel; (v) shall
   prohibit disassembly and reverse engineering of any executable
   Software and/or derivative works thereof; (vi) shall indemnify, hold
   harmless, and defend Intel (including its officers, employees,
   directors, subsidiaries, representatives, affiliates and agents) and
   Intel's suppliers from and against any claims or lawsuits, including
   attorney's fees and expenses, that arise or result from your
   distribution of any Software or derivative works thereof, including
   any liabilities arising from any permitted distribution under any open
   source license.
   OPEN SOURCE SOFTWARE RESTRICTIONS. Unless expressly permitted
   elsewhere in this license, You may not combine or distribute the
   Software with Open Source Software (as defined below) or with software
   developed using Open Source Software (e.g., tools) in a manner that
   subjects Intel or any portion of the Software provide by Intel
   hereunder to any license obligations of such Open Source Software.
   "Open Source Software" means any software licensed under terms
   requiring that other software combined or distributed with such
   software: (i) be disclosed or distributed in source code form; (ii) be
   licensed on terms inconsistent with the terms of this Agreement.
   NO SUPPORT UNDER THIS LICENSE AGREEMENT. Intel has no obligation to
   support the Software under this Agreement.
   EXPORT. You shall NOT export, either directly or indirectly, any
   product, service or technical data or system incorporating Software
   without first obtaining any required license or other approval from
   the U. S. Department of Commerce or any other agency or department of
   the United States Government. In the event any Software is exported
   from the United States or re-exported from a foreign destination by
   You, You shall ensure that the distribution and export/re-export or
   import of the Software is in compliance with all laws, regulations,
   orders, or other restrictions of the U.S. Export Administration
   Regulations and the appropriate foreign government. You shall NOT
   export/re-export any technical data, process, product, or service,
   directly or indirectly, to any country for which the United States
   government or any agency thereof or the foreign government from where
   it is shipping requires an export license, or other governmental
   approval, without first obtaining such license or approval.
   OWNERSHIP OF SOFTWARE AND INTELLECTUAL PROPERTY. Title to all copies
   of the Software and any intellectual property therein remains with
   Intel or its suppliers. The Software is copyrighted and protected by
   the laws of the United States and other countries, and by
   international treaty provisions. You may not remove any copyright
   notices from the Software. Intel may make changes to the Software, or
   to items referenced therein, at any time without notice, but is not
   obligated to support or update the Software. Except as otherwise
   expressly provided, Intel grants no express or implied right under
   Intel patents, copyrights, trademarks, or other intellectual property
   rights. You may not transfer the Software.
   DISCLAIMER OF WARRANTIES. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY
   EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING WARRANTIES OF
   MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE.
   Intel does not warrant or assume responsibility for the accuracy or
   completeness of any information, text, graphics, links or other items
   contained within the Software.
   LIMITATION OF LIABILITY. IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE
   LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST
   PROFITS, BUSINESS INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF
   THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF INTEL HAS BEEN
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS
   PROHIBIT EXCLUSION OR LIMITATION OF LIABILITY FOR IMPLIED WARRANTIES
   OR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE LIMITATION MAY
   NOT APPLY TO YOU. YOU MAY ALSO HAVE OTHER LEGAL RIGHTS THAT VARY FROM
   JURISDICTION TO JURISDICTION.
   TERMINATION OF THIS AGREEMENT. Intel may terminate this Agreement at
   any time if you violate its terms. Upon termination, you will
   immediately destroy the Software or return all copies of the Software
   to Intel.
   APPLICABLE LAWS. Any claims arising under or relating to this
   Agreement shall be governed by the internal substantive laws of the
   State of Delaware or federal courts located in Delaware, without
   regard to principles of conflict of laws. Each Party hereby agrees to
   jurisdiction and venue in the courts of the State of Delaware for all
   disputes and litigation arising under or relating to this Agreement.
   The Parties agree that the United Nations Convention on Contracts for
   the International Sale of Goods is specifically excluded from
   application to this Agreement. The Parties consent to the personal
   jurisdiction of the above courts. In the event any proceeding or
   lawsuit is brought by Intel or You in connection with this Agreement,
   the prevailing Party in such proceeding shall be entitled to receive
   its costs, expert witness fees and reasonable attorneys' fees,
   including costs and fees on appeal. It is understood and agreed that,
   notwithstanding any other provisions of this Agreement, breach of the
   "License" or "Distribution" sections of this Agreement by You will
   cause Intel irreparable damage for which recovery of money damages
   would be inadequate, and that Intel therefore shall be entitled to
   obtain timely injunctive relief to protect this Intel's rights under
   this Agreement in addition to any and all remedies available at law.
   GOVERNMENT RESTRICTED RIGHTS. The Software is a "commercial item" as
   that term is defined in 48 C.F.R. 2.101, consisting of "commercial
   computer software" and "commercial computer software documentation" as
   such terms are used in 48 C.F.R. 12.212. Consistent with 48 C.F.R.
   12.212 and 48 C.F.R 227.7202-1 through 227.7202-4, You will provide
   the Software to U.S. Government as an End User only pursuant to the
   terms and conditions therein. You shall provide the Software to
   foreign governments in an equivalent manner as described in this
   Section.
   REVERSE ENGINEERING. You may not reverse-assemble, reverse-compile, or
   otherwise reverse-engineer any software provided solely in executable
   form.
   ENTIRE AGREEMENT; MODIFICATION. This Agreement constitutes the entire
   agreement between You and Intel and supersedes in their entirety any
   and all oral or written agreements previously existing between You and
   Intel with respect to the subject matter hereof. For the avoidance of
   doubt, this Agreement shall in no way supersede any terms and
   conditions of any third-party software license agreement.
