add freeipmi source
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
Maintainer:
|
||||
Albert Chu <chu11@llnl.gov>
|
||||
|
||||
Developers:
|
||||
Albert Chu <chu11@llnl.gov>
|
||||
Anand Babu <ab@zresearch.com>
|
||||
Anand Avati <avati@zresearch.com>
|
||||
Balamurugan <bala@zresearch.com>
|
||||
Ian Zimmerman <itz@buug.org>
|
||||
Raghavendra <raghavendra@zresearch.com>
|
||||
|
||||
Patch Contributions:
|
||||
Dmitry Frolov <frolov@riss-telecom.ru>
|
||||
Ingo van Lil <inguin@gmx.de>
|
||||
Levi Pearson <lpearson@lnxi.com>
|
||||
Tom Zimmerman <tzimmerman@lnxi.com>
|
||||
Phil Knirsch <pknirsch@redhat.com>
|
||||
Jan Forch <Jan.Forch@sun.com>
|
||||
Fillod Stephane <stephane.fillod@grassvalley.com>
|
||||
Holger Liebig <holger.liebig@ts.fujitsu.com>
|
||||
Dan Lukes <dan+freeipmi@obluda.cz>
|
||||
Arnaud Quette <arnaud.quette@free.fr>
|
||||
Diego Elio Pettenò <flameeyes@flameeyes.eu>
|
||||
Kaiwang Chen <kaiwang.chen@gmail.com>
|
||||
Jan Safranek <jsafrane@redhat.com>
|
||||
Thomas Renninger <trenn@suse.de>
|
||||
Dave Love <fx@gnu.org>
|
||||
Dan Lukes <dan+freeipmi@obluda.cz>
|
||||
Shashi Dande <Shashi.Dande@hp.com>
|
||||
Markus Blank-Burian <burian@muenster.de>
|
||||
David Binderman <dcb314@hotmail.com>
|
||||
Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Ales Ledvinka <aledvink@redhat.com>
|
||||
Klaus Kaempf <kkaempf@suse.de>
|
||||
Dick Detweiler <Dick.Detweiler@Emerson.com>
|
||||
Dave Walker <DaveWalker@ubuntu.com>,
|
||||
Claudio Cesar Sanchez Tejeda <demonccc@gmail.com>
|
||||
Mark Rusk <mark.rusk@hp.com>
|
||||
And probably others ...
|
||||
|
||||
Package Maintainers:
|
||||
Dmitry Frolov <frol@nov.net> - FreeBSD
|
||||
Phil Knirsch <pknirsch@redhat.com> - Redhat & Fedora
|
||||
Jan Safranek <jsafrane@redhat.com> - Redhat & Fedora
|
||||
Yaroslav Halchenko <debian@onerussian.com> - Debian
|
||||
|
||||
Contrib Contributions:
|
||||
Kaiwang Chen <kaiwang.chen@gmail.com>
|
||||
|
||||
Web Site:
|
||||
Anand Babu <ab@zresearch.com>
|
||||
|
||||
Evaluation/Testing/Reverse Engineering:
|
||||
Joseph Ruscio <ruscio@californiadigital.com>
|
||||
Shuichi Ihara <ihara@sun.com>
|
||||
Ryan Cox <ryan_cox@byu.edu>
|
||||
and others ...
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,674 @@
|
||||
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>.
|
||||
@@ -0,0 +1,35 @@
|
||||
The file libfreeipmi/driver/freeipmi_bmc_intf.h is from ipmitool
|
||||
(http://sourceforge.net/projects/ipmitool) and comes with the
|
||||
following license.
|
||||
|
||||
----
|
||||
Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
Redistribution of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
Redistribution in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
Neither the name of Sun Microsystems, Inc. or the names of
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
This software is provided "AS IS," without a warranty of any kind.
|
||||
ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
|
||||
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
|
||||
SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
|
||||
FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
|
||||
OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
|
||||
SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
|
||||
OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
|
||||
PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
|
||||
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
|
||||
EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
----
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,45 @@
|
||||
Copyright (C) 2004-2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-155913
|
||||
|
||||
This file is part of Bmc-watchdog, a base management controller (BMC)
|
||||
watchdog timer management tool. For details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Bmc-Watchdog is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Bmc-Watchdog is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Bmc-Watchdog; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,46 @@
|
||||
Copyright (C) 2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-232183
|
||||
|
||||
This file is part of Ipmi-fru, a tool used for retrieving motherboard
|
||||
field replaceable unit (FRU) information. For details, see
|
||||
http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmi-fru is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Ipmi-fru is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmi-fru; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,45 @@
|
||||
Copyright (C) 2006-2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-221226
|
||||
|
||||
This file is part of Ipmiconsole, a set of IPMI 2.0 SOL libraries and
|
||||
utilities. For details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmiconsole is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Ipmiconsole is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmiconsole; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,45 @@
|
||||
Copyright (C) 2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-228523
|
||||
|
||||
This file is part of Ipmidetect, tools and libraries for detecting
|
||||
IPMI nodes in a cluster. For details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmidetect is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Ipmidetect is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmidetect; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,46 @@
|
||||
Copyright (C) 2006-2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-222073
|
||||
|
||||
This file is part of Ipmimonitoring, an IPMI sensor monitoring
|
||||
library. For details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmimonitoring is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
Ipmimonitoring is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmimonitoring; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,45 @@
|
||||
Copyright (C) 2003-2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-155448
|
||||
|
||||
This file is part of Ipmiping, tools for pinging IPMI and RMCP compliant
|
||||
remote systems. For details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmiping is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Ipmiping is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmiping; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,45 @@
|
||||
Copyright (C) 2003-2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-155698
|
||||
|
||||
This file is part of Ipmipower, a remote power control utility. For
|
||||
details, see http://www.llnl.gov/linux/.
|
||||
|
||||
Ipmipower is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Ipmipower is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Ipmipower; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,24 @@
|
||||
This work was produced at the Lawrence Livermore National Laboratory
|
||||
(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between
|
||||
the U.S. Department of Energy (DOE) and Lawrence Livermore National
|
||||
Security, LLC (LLNS) for the operation of LLNL.
|
||||
|
||||
This work was prepared as an account of work sponsored by an agency of
|
||||
the United States Government. Neither the United States Government nor
|
||||
Lawrence Livermore National Security, LLC nor any of their employees,
|
||||
makes any warranty, express or implied, or assumes any liability or
|
||||
responsibility for the accuracy, completeness, or usefulness of any
|
||||
information, apparatus, product, or process disclosed, or represents
|
||||
that its use would not infringe privately-owned rights.
|
||||
|
||||
Reference herein to any specific commercial products, process, or
|
||||
services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or Lawrence Livermore
|
||||
National Security, LLC. The views and opinions of authors expressed
|
||||
herein do not necessarily state or reflect those of the Untied States
|
||||
Government or Lawrence Livermore National Security, LLC, and shall
|
||||
not be used for advertising or product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution, and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,46 @@
|
||||
Copyright (C) 2007 The Regents of the University of California.
|
||||
Produced at Lawrence Livermore National Laboratory.
|
||||
Written by Albert Chu <chu11@llnl.gov>
|
||||
UCRL-CODE-227589
|
||||
|
||||
This file is part of pstdout, a library used to launch and manage the
|
||||
standard output of multiple threads. For details, see
|
||||
http://www.llnl.gov/linux/.
|
||||
|
||||
Pstdout is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
Pstdout is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Pstdout; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
This notice is required to be provided under our contract with the
|
||||
U.S. Department of Energy (DOE). This work was produced at the
|
||||
University of California, Lawrence Livermore National Laboratory under
|
||||
Contract No. W-7405-ENG-48 with the DOE.
|
||||
|
||||
Neither the United States Government nor the University of California
|
||||
nor any of their employees, makes any warranty, express or implied, or
|
||||
assumes any liability or responsibility for the accuracy,
|
||||
completeness, or usefulness of any information, apparatus, product, or
|
||||
process disclosed, or represents that its use would not infringe
|
||||
privately-owned rights.
|
||||
|
||||
Also, reference herein to any specific commercial products, process,
|
||||
or services by trade name, trademark, manufacturer or otherwise does
|
||||
not necessarily constitute or imply its endorsement, recommendation,
|
||||
or favoring by the United States Government or the University of
|
||||
California. The views and opinions of authors expressed herein do not
|
||||
necessarily state or reflect those of the United States Government or
|
||||
the University of California, and shall not be used for advertising or
|
||||
product endorsement purposes.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification are specified in the file "COPYING".
|
||||
@@ -0,0 +1,236 @@
|
||||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
This file is free documentation; the Free Software Foundation gives
|
||||
unlimited permission to copy, distribute and modify it.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. (Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.)
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You only need
|
||||
`configure.ac' if you want to change it or regenerate `configure' using
|
||||
a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that the
|
||||
`configure' script does not know about. Run `./configure --help' for
|
||||
details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not support the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a
|
||||
time in the source code directory. After you have installed the
|
||||
package for one architecture, use `make distclean' before reconfiguring
|
||||
for another architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out automatically,
|
||||
but needs to determine by the type of machine the package will run on.
|
||||
Usually, assuming the package is built to be run on the _same_
|
||||
architectures, `configure' can figure that out, but if it prints a
|
||||
message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share, you
|
||||
can create a site shell script called `config.site' that gives default
|
||||
values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script). Here is a another example:
|
||||
|
||||
/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
|
||||
configuration-related scripts to be executed by `/bin/bash'.
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,270 @@
|
||||
FreeIPMI - Copyright (C) 2003-2015 FreeIPMI Core Team
|
||||
|
||||
FreeIPMI
|
||||
--------
|
||||
|
||||
FreeIPMI provides in-band and out-of-band IPMI software based on the
|
||||
IPMI v1.5/2.0 specification.
|
||||
|
||||
What is IPMI?
|
||||
-------------
|
||||
|
||||
The IPMI specification defines a set of interfaces for platform
|
||||
management. It is utilized by a wide variety of vendors for system
|
||||
management on motherboards. The features of IPMI that most users will
|
||||
be interested in are sensor monitoring, remote power control,
|
||||
serial-over-LAN (SOL), and system debugging. The FreeIPMI tools and
|
||||
libraries listed below should provide users with the ability to access
|
||||
and utilize these features.
|
||||
|
||||
Getting Started with IPMI
|
||||
-------------------------
|
||||
|
||||
IPMI can be used in-band (i.e. running on a machine locally) or
|
||||
out-of-band (i.e. connecting remotely).
|
||||
|
||||
Most FreeIPMI tools can operate in-band by using one of the in-band
|
||||
drivers included. These in-band drivers include a userspace KCS
|
||||
interface driver, a SSIF driver through the Linux SSIF device
|
||||
(i.e. /dev/i2c-0), the OpenIPMI Linux kernel driver (i.e. /dev/ipmi0),
|
||||
the Sun/Solaris BMC driver (i.e. /dev/bmc), and the Intel DCMI/MEI
|
||||
driver (i.e. /dev/dcmi). If your system requires the use of installed
|
||||
drivers, those appropriate modules must be installed ahead of time.
|
||||
However, most systems should automatically load these drivers when
|
||||
appropriate.
|
||||
|
||||
Under most scenarios, the FreeIPMI tools should automatically discover
|
||||
which in-band interface to use and the proper settings to use. Users
|
||||
may execute the tools on the command line to begin using them. Some
|
||||
motherboards may require you to determine driver type, addresses,
|
||||
paths, etc. on your own and pass them as command line options to the
|
||||
tools. You may use ipmi-locate(8) to help determine this information.
|
||||
Other tools such as dmidecode(8) may also provide this information.
|
||||
|
||||
To use IPMI out-of-band with tools such as ipmipower(8) or
|
||||
ipmi-sensors(8), the remote machine's BMC must first be configured for
|
||||
out of band communication. Typically, this involves setting a
|
||||
username, password, IP address, MAC address, and a few other
|
||||
parameters. This can be done using the tool ipmi-config(8).
|
||||
Additional information on how to configure with ipmi-config(8) can be
|
||||
found in the ipmi-config.conf(5) manpage. Some vendors may
|
||||
pre-configure their motherboards with default values so that
|
||||
ipmi-config(8) can be used remotely to configure the machine. However,
|
||||
most of the time, the BMC must be configured in-band before
|
||||
out-of-band access can be allowed (for example, the correct IP address
|
||||
and MAC address must be configured).
|
||||
|
||||
In order to remotely connect to a machine, you typically must specify
|
||||
the host, username, and password for the tool in order to connect.
|
||||
Depending on configuration settings, a K_g key, privilege level,
|
||||
authentication type, cipher suite id, or protocol version may need to
|
||||
be specified.
|
||||
|
||||
Some vendors may have not implemented IPMI properly and a workaround
|
||||
must be specified into FreeIPMI to ensure the tool can execute
|
||||
properly. For example, a fair number of vendors have populated their
|
||||
FRU records with invalid checksums. To properly ignore these set of
|
||||
checksums a 'skipchecks' workaround has been added to ipmi-fru(8).
|
||||
Please see each of the tool manpages to see a list of available
|
||||
workarounds.
|
||||
|
||||
Additional information, examples, and general trouble-shooting can be
|
||||
found in each of the tool manpages.
|
||||
|
||||
General Use
|
||||
-----------
|
||||
|
||||
The primary tools that most users of FreeIPMI will be interested in
|
||||
for system management are the following:
|
||||
|
||||
Ipmi-sensors
|
||||
|
||||
A tool to read IPMI sensor readings to aid in system monitoring.
|
||||
|
||||
Ipmi-sel
|
||||
|
||||
A tool to read and manage IPMI System Event Log (SEL) records to aid
|
||||
in system debugging.
|
||||
|
||||
Ipmipower
|
||||
|
||||
A tool for remote power control.
|
||||
|
||||
Ipmiconsole
|
||||
|
||||
A tool for Serial-over-Lan (SOL) console access.
|
||||
|
||||
Many other tools and libraries are listed below that cover additional
|
||||
features and areas of IPMI.
|
||||
|
||||
Additional information, examples, and general trouble-shooting can be
|
||||
found in each of the tool manpages.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
In order to avoid typing in a long list of command line options to
|
||||
specify IPMI communication requirements everytime a command is
|
||||
executed (e.g. driver paths, usernames, passwords, etc.), an
|
||||
alternate set of default values can be set for most FreeIPMI
|
||||
tools in the FreeIPMI configuration file. See freeipmi.conf(5)
|
||||
for more information.
|
||||
|
||||
HPC Support
|
||||
-----------
|
||||
|
||||
Much of FreeIPMI was written with HPC support in mind. Ipmi-config(8)
|
||||
comes with file input/output support so that configuration can be
|
||||
copied and verified across nodes in a cluster. Most tools (like
|
||||
ipmipower(8) and ipmi-sensors(8)) come with hostrange support so
|
||||
multiple hosts can be specified on the command line at the same time
|
||||
and IPMI can be executed against the hosts in parallel. See tool
|
||||
manpages for more information. Also see the document
|
||||
freeipmi-hostrange.txt for detailed usage and explanation.
|
||||
Ipmi-sensors(8) and the libipmimonitoring(3) library support the
|
||||
ability to interpret sensor readings as well as just reporting them.
|
||||
By mapping sensor readings into NOMINAL, WARNING, or CRITICAL states,
|
||||
it makes monitoring sensors easier across large numbers of nodes.
|
||||
|
||||
Development
|
||||
-----------
|
||||
|
||||
For information on the libraries that can be used to program IPMI
|
||||
applications with, please see, please see libfreeipmi(3),
|
||||
libipmiconsole(3), libipmimonitoring(3), and libipmidetect(3). Or
|
||||
see the document freeipmi-libraries.txt.
|
||||
|
||||
Project Tools
|
||||
-------------
|
||||
|
||||
The following tools are distributed and supported by FreeIPMI.
|
||||
|
||||
Bmc-info
|
||||
|
||||
A tool to read information about a BMC such as device version numbers,
|
||||
device support, and globally unique IDs (guids).
|
||||
|
||||
Bmc-watchdog
|
||||
|
||||
A tool/daemon to manage a BMC Watchdog. This tool is typically used
|
||||
for system timeout management and automatic system restarts in the
|
||||
event of a system crash.
|
||||
|
||||
Ipmi-chassis
|
||||
|
||||
A tool to manage/monitor a chassis, such as chassis power,
|
||||
identification (i.e. LED control), and status.
|
||||
|
||||
Ipmi-fru
|
||||
|
||||
A tool to read field replaceable unit (FRU) information from a
|
||||
motherboard/machine.
|
||||
|
||||
Ipmi-sel
|
||||
|
||||
A tool to read and manage IPMI System Event Log (SEL) records. SEL
|
||||
records store system event information and may be useful for debugging
|
||||
problems.
|
||||
|
||||
Ipmi-sensors
|
||||
|
||||
A tool to read IPMI sensor readings and sensor data repository (SDR)
|
||||
information.
|
||||
|
||||
Ipmipower
|
||||
|
||||
A tool for remote power control.
|
||||
|
||||
Ipmiconsole
|
||||
|
||||
A tool for Serial-over-Lan (SOL) console access.
|
||||
|
||||
Ipmi-config
|
||||
|
||||
A tool to configure BMC and IPMI information. In can be used to
|
||||
configured usernames, passwords, networking information, security,
|
||||
Serial-over-LAN (SOL), Platform Event Filtering (PEF), boot devices,
|
||||
power restoration policy, sensor thresholds, sensor events, and many
|
||||
more configuration options.
|
||||
|
||||
Ipmi-raw
|
||||
|
||||
A tool that provides hex input/output of IPMI commands.
|
||||
|
||||
Ipmi-locate
|
||||
|
||||
A tool that can probe for information about the location of a BMC
|
||||
device, such as device addresses.
|
||||
|
||||
Ipmi-pet
|
||||
|
||||
A tool to parse and interpret Platform Event Traps (PET).
|
||||
|
||||
Ipmi-dcmi
|
||||
|
||||
A tool to perform Data Center Manageability Interface (DCMI) IPMI
|
||||
extension commands. Supports extensions for asset management and
|
||||
power usage management.
|
||||
|
||||
Bmc-device
|
||||
|
||||
A tool to perform advanced BMC commands, such as resetting the BMC,
|
||||
configuring ACPI, configuring SDR/SEL time, manually generating
|
||||
events, re-arming sensors, and configuring manufacturer settings.
|
||||
|
||||
Ipmiping
|
||||
|
||||
An IPMI ping tool for debugging.
|
||||
|
||||
Rmcpping
|
||||
|
||||
A RMCP ping tool for debugging.
|
||||
|
||||
Ipmi-oem
|
||||
|
||||
An IPMI tool for OEM specific commands.
|
||||
|
||||
Ipmidetect/Ipmidetectd
|
||||
|
||||
A tool and daemon for IPMI node detection.
|
||||
|
||||
Ipmiseld
|
||||
|
||||
A daemon that regularly polls the SEL and stores the events to the
|
||||
local syslog.
|
||||
|
||||
Additional information, examples, and general trouble-shooting can be
|
||||
found in each of the tool manpages.
|
||||
|
||||
Project Libraries
|
||||
-----------------
|
||||
|
||||
The following libraries are distributed and supported by FreeIPMI.
|
||||
|
||||
Libfreeipmi
|
||||
|
||||
A C library that includes KCS, SSIF, OpenIPMI Linux, and Solaris BMC
|
||||
drivers, IPMI 1.5 and IPMI 2.0 LAN communication interfaces, IPMI
|
||||
packet building utilities, IPMI command utilities, and utilities for
|
||||
reading/interpreting/managing IPMI.
|
||||
|
||||
Libipmiconsole
|
||||
|
||||
A library for Serial-over-Lan (SOL) console access. SOL console
|
||||
access is abstracted into a file descriptor interface, so users may
|
||||
read and write console data through a file descriptor.
|
||||
|
||||
Libipmimonitoring
|
||||
|
||||
A library for sensor monitoring that abstracts away most IPMI details.
|
||||
|
||||
Libipmidetect
|
||||
|
||||
A library for IPMI node detection.
|
||||
|
||||
Help, Questions, etc.
|
||||
---------------------
|
||||
|
||||
Please send comments, help, and questions to the freeipmi mailing
|
||||
lists, freeipmi-users@gnu.org and freeipmi-devel@gnu.org. Or see
|
||||
our webpage at http://www.gnu.org/software/freeipmi/.
|
||||
@@ -0,0 +1,6 @@
|
||||
Local FreeIPMI argp modified from argp-standalone-1.3. Many
|
||||
configure.ac autoconfing for the local argp library taken from
|
||||
argp-standalone as well.
|
||||
|
||||
argp-standalone taken from glibc from Neil Moller.
|
||||
http://www.lysator.liu.se/~nisse/misc/
|
||||
@@ -0,0 +1,107 @@
|
||||
Building/Install from source
|
||||
----------------------------
|
||||
|
||||
The instructions below (modified from the INSTALL file) should
|
||||
work for most people.
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for. If your system
|
||||
requires additional packages and/or libraries in order for FreeIPMI
|
||||
to be built, appropriate messages should be displayed. These
|
||||
packages and/or libraries should be installed and `./configure' should
|
||||
be executed again.
|
||||
|
||||
2. Once `./configure' has succeeded, type `make' to compile the
|
||||
package.
|
||||
|
||||
3. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
You may need to be root in order for files to be installed into
|
||||
the proper locations on your system.
|
||||
|
||||
By default files will typically be installed in /usr/local (binaries
|
||||
in /usr/local/bin, libraries in /usr/local/lib, configuration files in
|
||||
/usr/local/etc/, etc.). To install into the more common locations
|
||||
such as /usr/bin, /usr/lib/, /etc, etc. the options passed into
|
||||
`./configure' must be adjusted.
|
||||
|
||||
The following set of options and settings are suitable for most Linux
|
||||
systems.
|
||||
|
||||
--prefix=/usr --exec-prefix=/usr --sysconfdir=/etc
|
||||
--localstatedir=/var --mandir=/usr/share/man
|
||||
|
||||
Your mileage may vary depending on your system.
|
||||
|
||||
If you install the binaries or libraries in non-standard locations
|
||||
(e.g. /usr/local or /opt), you may have to update other system
|
||||
configuration to find the files and libraries. For example, in Linux
|
||||
you may need to update your PATH or LD_LIBRARY_PATH environment
|
||||
variables. Or you may need to update your /etc/ld.so.conf files and
|
||||
run ldconfig(8) to find libraries globally. This is highly dependent
|
||||
on your operating system.
|
||||
|
||||
Building RPMs
|
||||
-------------
|
||||
|
||||
For most people you can build RPMs one of two ways.
|
||||
|
||||
From the source:
|
||||
|
||||
rpmbuild -ta freeipmi-X.Y.Z.tar.gz
|
||||
|
||||
From the source rpm:
|
||||
|
||||
rpmbuild --rebuild freeipmi-X.Y.Z-1.src.rpm
|
||||
|
||||
Depending on your default RPM build environment, you may need to be root
|
||||
in order for RPMs to be stored in the default locations.
|
||||
|
||||
After the RPMs are built, you may install them the normal way:
|
||||
|
||||
rpm -i freeipmi-X.Y.Z.ARCH.rpm
|
||||
|
||||
Additional configure options
|
||||
----------------------------
|
||||
|
||||
The following configure options are available to users for more unique
|
||||
compilation requirements and environments.
|
||||
|
||||
--without-encryption
|
||||
|
||||
This option disables compilation of encryption support in FreeIPMI.
|
||||
Most notably, this disables encryption support when doing out of band
|
||||
IPMI 2.0 communication.
|
||||
|
||||
This option may be particularly useful in embedded environments that
|
||||
do not have the libraries needed to compile encryption support.
|
||||
|
||||
--with-dont-check-for-root
|
||||
|
||||
When running tools inband, root access is normally required. In some
|
||||
systems, this may not be desired. This options removes the check for
|
||||
root access in FreeIPMI tools.
|
||||
|
||||
--without-random-device
|
||||
|
||||
This option disables checks and use of /dev/urandom and /dev/random.
|
||||
This may be required for embededded systems without these devices.
|
||||
|
||||
--with-pkgconfig-dir
|
||||
|
||||
This option can configure an alternate default pkgconfig directory.
|
||||
|
||||
--with-bmc-watchdog-logfile
|
||||
|
||||
This option can configure an alternate default bmc-watchdog log
|
||||
directory.
|
||||
|
||||
--with-ipmi-monitoring-sdr-cache-dir
|
||||
|
||||
This option can configure an alternate default libipmimonitoring SDR
|
||||
cache directory.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
The Linux OpenIPMI driver is often loaded via the /etc/init.d/ipmi
|
||||
setup script. If your distribution/environment does not have this
|
||||
script, the following script can be used to load/unload the driver.
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
/sbin/modprobe ipmi_devintf
|
||||
|
||||
maj=`cat /proc/devices | awk '/ipmidev/{print $1}'`
|
||||
if [ -c /dev/ipmi0 ]
|
||||
then
|
||||
rm -f /dev/ipmi0
|
||||
/bin/mknod /dev/ipmi0 c $maj 0
|
||||
else
|
||||
/bin/mknod /dev/ipmi0 c $maj 0
|
||||
fi
|
||||
|
||||
/sbin/modprobe ipmi_si
|
||||
|
||||
# do stuff
|
||||
|
||||
/sbin/rmmod ipmi_si
|
||||
/sbin/rmmod ipmi_devintf
|
||||
/sbin/rmmod ipmi_msghandler
|
||||
|
||||
@@ -0,0 +1,398 @@
|
||||
*** - priority for future major release
|
||||
XXX - priority for future minor release
|
||||
ooo - priority code cleanup that should be done
|
||||
|
||||
branches to merge
|
||||
-----------------
|
||||
|
||||
to test
|
||||
-------
|
||||
ipmi-oem get/set bmc services for intels2600jf
|
||||
|
||||
FreeIPMI FAQ/documentation
|
||||
--------------------------
|
||||
|
||||
FreeIPMI general
|
||||
----------------
|
||||
- oem extensions
|
||||
- test/check handle firmware versions
|
||||
- document firmware versions in docs/ or mans/?
|
||||
- build system
|
||||
- single Makefile, so parallel build faster?
|
||||
- consider moving #defines to #enums globally for easier debugging w/
|
||||
gdb
|
||||
- event handling api/mechanism
|
||||
- loop/try again on NODE_BUSY errors (***)
|
||||
- treat more like network busy than error?
|
||||
- option for alternate behavior?
|
||||
- update text documents to texinfo (ooo)
|
||||
- OEM extensions generalized
|
||||
- generalize "+" syntax in ipmipower to all FreeIPMI tools?
|
||||
- or use extra option?
|
||||
- audit/cleanup memsets, use sizeof() when appropriate
|
||||
|
||||
FreeIPMI new stuff
|
||||
------------------
|
||||
- ASF - maybe support base protocol stuff like rmcp?
|
||||
- picmg hpm/hpmi.1 standard - defines ipmi firmware update stuff
|
||||
- http://www.picmg.org/v2internal/specifications.htm
|
||||
- pmbus.org
|
||||
- doable via FreeIPMI? Can pass through Smbus to PmBus to do power control monitoring?
|
||||
- server simulator
|
||||
- support testing at scale
|
||||
- test larger set of corner cases, possibilities, workarounds, etc.
|
||||
- different SDR combos
|
||||
- different SEL entries
|
||||
- all permutations of sensors, etc.
|
||||
- config tools for (***)
|
||||
- intel node manager (***)
|
||||
- maybe not? Intel NM does not configure via a standard
|
||||
checkout/commit fashion. Policies are created, then removed.
|
||||
In addition, policies must be disabled before they can be
|
||||
reconfigured.
|
||||
|
||||
some of these mechanisms could be hidden (i.e. if user changed
|
||||
any configuration, disable policy, then re-configure it, then
|
||||
re-enable it), but some would require blatant assumptions, such
|
||||
as number of policies to output into the --checkout .conf file.
|
||||
- firmware firewall
|
||||
- other config options in ipmi-oem
|
||||
- inventec mac/shared nic stuff
|
||||
- will reboot BMC, is big problem
|
||||
- fru library like libipmimonitoring
|
||||
- ipmi proxy
|
||||
- capture lan and do inband, maybe useful if you have dedicated port
|
||||
that can't be seen by the network, and you don't have enough switch
|
||||
ports to have both plugged up to the network.
|
||||
- OCP IPMI extensions
|
||||
- FRU record
|
||||
- command extensions
|
||||
|
||||
FreeIPMI maybe stuff
|
||||
--------------------
|
||||
redo ipmipower/ipmiconole using phi accrual failure detector algorithm?
|
||||
|
||||
library general
|
||||
---------------
|
||||
- merge all libs into one? would aid debian packaging.
|
||||
- make package layout simpler?
|
||||
- make .so-naming consistent?
|
||||
- merge all except libipmidetect?
|
||||
|
||||
libfreeipmi
|
||||
-----------
|
||||
- forwarded command support (errata 35b)
|
||||
- support serial interface?
|
||||
- have funcs that return buflen return ssize_t?, input should be
|
||||
size_t and void *? like read(), write()?
|
||||
- xRC4
|
||||
- on Quanta S99Q/Dell FS12-TY
|
||||
- Began on branches/xrc, from the branch ChangeLog
|
||||
- xRC has been dropped for the time being. After researching xRC,
|
||||
ultimately the current architecture of all of FreeIPMI is
|
||||
ill-suited for it. As a stream based encryption, too much
|
||||
architecture of FreeIPMI has been based on individual packets
|
||||
being sent/recved/encrypted/decrypted independently of each other.
|
||||
Most of xRC implementation is doable with some hacks. For
|
||||
example, the initialization vector and data offsets could be
|
||||
passed as in/out parameters to the assemble/disassemble packet
|
||||
functions. The Krc could be re-generated as needed if the
|
||||
initialization vector had been noticed to change (or data offset
|
||||
== 0). However, the deal break was an "out-of-band" requirement
|
||||
for implementation of the suspend/resume payload encryption. In
|
||||
particular, if a packet from the BMC that had a new initialization
|
||||
vector was dropped on the network, the client would need to send a
|
||||
"suspend/resume payload encryption" packet to tell the BMC to
|
||||
start over again before doing a resend. Architecturally, this was
|
||||
the part that would have been VERY difficult to implement across
|
||||
FreeIPMI as the client would suddenly be required to understand
|
||||
the assemble/disassemble subtleties underneath and send the packet
|
||||
on its own.
|
||||
|
||||
libfreeipmi-fiid
|
||||
----------------
|
||||
- rearch for speed to not use strings, use macros + strings in internal. So something like:
|
||||
{1, FOO_MACRO, "FIELD_NAME", FLAGS}
|
||||
so avoid string compares for get/set/compare/etc., but have available for debug output.
|
||||
|
||||
libfreeipmi-driver
|
||||
------------------
|
||||
- kcs/ssif/etc
|
||||
- how to deal with servers w/ multiple BMCs (***)
|
||||
- need knew inband option on tools?
|
||||
- ssif userspace implementation
|
||||
- see ipmiutil for example
|
||||
|
||||
|
||||
libfreeipmi-api
|
||||
---------------
|
||||
--fail-if-ipmi-not-detected
|
||||
- would need inband flag - discover vs. not-discover on locate
|
||||
- Ultimately impossible to do correctly, vendor need not store
|
||||
anything in acpi/smbios/etc.
|
||||
- User can use ipmi-locate if they really want to probe?
|
||||
|
||||
libfreeipmi-interpret
|
||||
---------------------
|
||||
- handle sensor/sel events outside of spec - configurable in some way?
|
||||
- some vendors have extra bits not in spec
|
||||
- handle sensor/sel events differently for different sensors on same
|
||||
motherboard
|
||||
- e.g.
|
||||
SENSORFAULT | State Deasserted
|
||||
SENSOROK | State Asserted
|
||||
- need mechanism to specify record ids/sensor number/entity/generator?
|
||||
- some sensor interpretations dependent on sensor number, way to add?
|
||||
- QSSCS4R SMI Timeout & Power Throttled sensors
|
||||
- same event-type/sensor-type/etc., but different interpretation??
|
||||
|
||||
libfreeipmi-sdr
|
||||
---------------
|
||||
|
||||
libfreeipmi-fru
|
||||
---------------
|
||||
|
||||
libfreeipmi-sel
|
||||
---------------
|
||||
- cleanup parsing functions
|
||||
|
||||
libipmiconsole
|
||||
--------------
|
||||
- "learn" workarounds function - to figure out workaround flags for user support simultaneous SOL sessions
|
||||
- very hard, almost impossible to do??
|
||||
- "check" function, to see if session currently running
|
||||
- engine_submit() - try and move initialization/setup code into engine
|
||||
to reduce time spent in engine_submit(), this is the core loop used by
|
||||
conman and other console software. (***)
|
||||
- use conditional signals w/ garbage collector
|
||||
- should work, it's not like the poll loop from before
|
||||
- buffer character input chars and send in chunks as necessary (nagle like)
|
||||
- perhaps ~100ms of character data to reduce packets send?
|
||||
- as far as I can tell, most ssh implementations send 1 char at a time,
|
||||
to most users that libipmiconsole will get similar interaction.
|
||||
|
||||
libipmimonitoring
|
||||
-----------------
|
||||
- select sensors via sensor name?
|
||||
- deal w/ motherboards with slightly different SDRs
|
||||
- but some mobos have sensor name == each other, so what is the purpose?
|
||||
- would need to also add sensor number with it??
|
||||
- also to deal w/ probability SDR's change on some mobos
|
||||
- how specify record ids w/ sharing
|
||||
- entity sensor names
|
||||
|
||||
tools common
|
||||
------------
|
||||
- entity ids 0x41, 0x42, are "identical" to other entries
|
||||
- should map them together for --entity-id-names output in
|
||||
ipmi-sensors and ipmi-sel?
|
||||
- hostrange exclude hosts option
|
||||
- not really necessary in FreeIPMI? in pdsh, the reason you really
|
||||
need this is because you can do -a (all) or -g (genders
|
||||
attribute/netgroups attribute).
|
||||
- if user inputs hostname of localhost, do inband not outofband?
|
||||
- config via environment variables too - like config file?
|
||||
- config file - support workarounds/etc. for heterogenous clusters
|
||||
- maybe?
|
||||
- workaround-flags BLAH hosts[1-3]
|
||||
- workaround-flags FOO hosts[5-9]
|
||||
- read/store username/password/k_g out of file encrypted so it's not
|
||||
sitting there in the clear
|
||||
- convenience function to loop infinite times necessary to expand (***)
|
||||
hostrange until done.
|
||||
- i.e. node[0-4]-[3-10]
|
||||
- hack is in ipmipower right now for 2s, no where else supported
|
||||
|
||||
ipmi-sensors
|
||||
------------
|
||||
- split vendor files into motherboard files? Is getting big.
|
||||
- option to check sensor thresholds manually instead of event bitmask
|
||||
- some mobos seem to set flags incorrectly
|
||||
- column for sensor number?
|
||||
- useful for shared sensor output?
|
||||
- how to select specific shared sensor on commad line, can't do normally (***)
|
||||
- i.e. perhaps need to do record-id and something else, like
|
||||
-r 5.2 to indicate record id 5 and offset 2.
|
||||
- issue for libipmimonitoring too?
|
||||
- remove shared sensor option
|
||||
- make default like it should be
|
||||
- this really ties to many other shared sensor issues
|
||||
- do not error out on unexpected sensor_read errors, move on? (***)
|
||||
- i.e. unexpected completion code error?
|
||||
- require rework of sensor-read lib? How detect session timeout, etc.
|
||||
- make 'discretereading' on by default?
|
||||
- it does not appear that to be illegal by IPMI spec.
|
||||
|
||||
ipmi-sel
|
||||
--------
|
||||
- binary search like mechanism to make --display faster
|
||||
- support kernel panic OEM event 0xF0
|
||||
- can't make work, is just my motherboard? Or perhaps specific panics, not test panics?
|
||||
- redhat doesn't enable by default, probably don't need to worry about this much
|
||||
- see http://cateee.net/lkddb/web-lkddb/IPMI_PANIC_STRING.html
|
||||
- see http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html
|
||||
- non-uncommon for motherboards to output events both directions of
|
||||
crossing threshold. Can be confusing b/c assert/deassert not output
|
||||
by default. Should alter output in these cases?
|
||||
- --delete-date-range (***)
|
||||
- ganglia plugin?
|
||||
- nagios plugin?
|
||||
|
||||
ipmipower
|
||||
--------
|
||||
- mechanism to parallelize oem extension options ranges. (***)
|
||||
- i.e. on myhost+[0-3]. Simultaneous power off slots 0-3.
|
||||
- perhaps --serialize-same-host option
|
||||
- Will require larger re-architecture, create additional sockets per
|
||||
power control attempt. The constant sockets created in the
|
||||
ipmipower_connection structs limit this for the time being.
|
||||
|
||||
ipmi-fru
|
||||
--------
|
||||
- write FRU data option
|
||||
- for OEM integrators
|
||||
- or should be in bmc-device?
|
||||
|
||||
bmc-device
|
||||
--------
|
||||
- set bmc global enables
|
||||
- really should be done by firmware or distro
|
||||
- or only as needed in ipmi-oem per vendor need?
|
||||
- (NOT CONFIRMED) get auxiliary log status
|
||||
- set sensor reading (***)
|
||||
|
||||
bmc-watchdog
|
||||
------------
|
||||
Log to normal syslog, not to bmc log
|
||||
- legacy from when bmc-wachdog in cron, not daemon, and would log
|
||||
every bmc reset
|
||||
cleanup to finally use libfreeipmi or common tool functions
|
||||
|
||||
ipmiconsole
|
||||
-----------
|
||||
- support other escape codes like w/ &D
|
||||
- support F1-F12 suggested by user
|
||||
|
||||
ipmi-config
|
||||
------------
|
||||
- make tools prefix sections w/ appropriate prefixes to allow
|
||||
for checking of what sections should be used??
|
||||
- i.e. BMC, CHASSIS, PEF, etc.
|
||||
- probably not, too much backwords compatability crap to handle.
|
||||
Also would make code ugly as hell to make all duplicate sections.
|
||||
should do database of what sections go to what categories
|
||||
- core: support ipv4 mapped ipv6 addresses?
|
||||
- until in spec, no point, maybe deal in ipmi-oem?
|
||||
- chassis, pef & sensors: conf.5 manpage
|
||||
- chassis: (NEVER TESTED) panel button config - need hardware w/ this
|
||||
- chassis: (NEVER TESTED) device instance selector
|
||||
- sensors: instructions for each section??
|
||||
- sensors: when value cannot be encodd accurately, report numbers that can work
|
||||
|
||||
ipmi-oem
|
||||
--------
|
||||
dell poweredge lcd support?
|
||||
|
||||
ipmiseld
|
||||
--------
|
||||
send e-mail on alert noticed/received?
|
||||
|
||||
contributions
|
||||
-------------
|
||||
- perl extensions
|
||||
- api support?
|
||||
- raw support?
|
||||
- python extensions
|
||||
- api support?
|
||||
- raw support?
|
||||
- zenoss plugin
|
||||
- powerman
|
||||
- let ipmipower return error messages to user in some way
|
||||
- intead of "command completed successfully" all the time
|
||||
|
||||
RELEASE TODOS - Do on every release
|
||||
-----------------------------------
|
||||
Email freeipmi-users && freeipmi-devel
|
||||
Email info-gnu@gnu.org
|
||||
Update savannah announcements
|
||||
Update freshmeat.net
|
||||
Update freeipmi webpage
|
||||
Update opendesktop.org page
|
||||
Update ohloh page
|
||||
Update to softpedia??
|
||||
Update fsf directory info.
|
||||
Upload to ftp.gluster.com
|
||||
Upload to ftp.gnu.org
|
||||
|
||||
Workaround for CVE
|
||||
|
||||
perl -pe 's/perm -777 -exec chmod a\+rwx/perm -755 -exec chmod 755 /' Makefile.in > Makefile.in.new
|
||||
|
||||
Workaround for CVE 2012-3386
|
||||
|
||||
perl -pe 's/chmod a\+w \$\(distdir\)/chmod u\+w \$\(distdir\)/' Makefile.in > Makefile.in.new
|
||||
|
||||
info-gnu@gnu.org template e-mail
|
||||
|
||||
FreeIPMI X.X.X has been released. It can be downloaded at:
|
||||
|
||||
http://www.gnu.org/software/freeipmi/download.html
|
||||
|
||||
What is IPMI?
|
||||
|
||||
The Intelligent Platform Management Interface (IPMI) specification
|
||||
defines a set of interfaces for platform management. It is
|
||||
implemented by a large number of hardware manufacturers to support
|
||||
system management on motherboards. The features of IPMI that most
|
||||
users will be interested in are sensor monitoring (e.g. CPU
|
||||
temperatures, fan speeds), remote power control, and serial-over-LAN
|
||||
(SOL).
|
||||
|
||||
What is FreeIPMI?
|
||||
|
||||
FreeIPMI provides in-band and out-of-band IPMI software based on the
|
||||
IPMI v1.5/2.0 specification. FreeIPMI provides tools and libraries
|
||||
for users to access and read IPMI sensor readings, system event log
|
||||
(SEL) entries, serial-over-LAN (SOL), remote power control functions,
|
||||
field replaceable unit (FRU) device information, and more. More
|
||||
information about FreeIPMI can be found at the FreeIPMI webpage at:
|
||||
|
||||
http://www.gnu.org/software/freeipmi/index.html
|
||||
|
||||
Release X.X.X Changes
|
||||
---------------------
|
||||
|
||||
To do this:
|
||||
|
||||
1. The file to be distributed (for example, foo.tar.gz).
|
||||
|
||||
2. Detached GPG binary signature for (1), (for example, foo.tar.gz.sig).
|
||||
|
||||
gpg -b foo.tar.gz
|
||||
|
||||
3. A clearsigned directive file, (for example, foo.tar.gz.directive.asc).
|
||||
|
||||
Format is:
|
||||
|
||||
version: 1.1
|
||||
directory: freeipmi
|
||||
filename: freeipmi-0.X.X.tar.gz
|
||||
comment: FreeIPMI 0.X.X
|
||||
|
||||
gpg --clearsign foo.tar.gz.directive
|
||||
|
||||
4. Upload the file(s) via anonymous ftp to ftp-upload.gnu.org. If the
|
||||
upload is destined for ftp.gnu.org, place the file(s) in the
|
||||
/incoming/ftp directory. If the upload is destined for alpha.gnu.org,
|
||||
place the file(s) in the /incoming/alpha directory.
|
||||
|
||||
Uploads are processed every five minutes. Uploads that are in progress
|
||||
while the upload processing script is running are handled properly, so
|
||||
do not worry about the timing of your upload. Uploaded files that
|
||||
belong to an incomplete triplet are deleted automatically after 24
|
||||
hours.
|
||||
|
||||
Your designated upload email addresses (see Automated Upload
|
||||
Registration) are sent a message if there are any problems processing
|
||||
an upload for your package. You also receive a message when your
|
||||
upload has been successfully processed.
|
||||
@@ -0,0 +1,18 @@
|
||||
ganglia_ipmi_sensors.pl
|
||||
-----------------------
|
||||
|
||||
This script can be used to monitor IPMI sensors in ganglia via
|
||||
FreeIPMI's ipmi-sensors. Please see instructions found at the top of
|
||||
the script for detailed instructions.
|
||||
|
||||
By default, this tool will monitor the sensor state (Nominal, Warning,
|
||||
or Critical) of each sensor as determined by libfreeipmi's interpret
|
||||
library and the sensor readings of temperature, fan and voltage
|
||||
sensors. See ipmi-sensors(8) for more general info on ipmi-sensors
|
||||
and freeipmi_interpret_sensors.conf(5) for more information on sensor
|
||||
states.
|
||||
|
||||
Albert Chu
|
||||
chu11 at llnl dot gov
|
||||
|
||||
|
||||
@@ -0,0 +1,444 @@
|
||||
#!/usr/bin/perl
|
||||
#############################################################################
|
||||
# Copyright (C) 2003-2010 FreeIPMI Core Team
|
||||
#
|
||||
# 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, 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/>.
|
||||
#############################################################################
|
||||
#
|
||||
# ganglia_ipmi_sensors.pl
|
||||
#
|
||||
# Author:
|
||||
#
|
||||
# Albert Chu <chu11 at llnl dot gov>
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This script can be used to monitor IPMI sensors in ganglia via
|
||||
# FreeIPMI's ipmi-sensors.
|
||||
#
|
||||
# By default, this tool will monitor the sensor state (Nominal,
|
||||
# Warning, or Critical) of each sensor as determined by libfreeipmi's
|
||||
# interpret library and the sensor readings of temperature, fan and
|
||||
# voltage sensors. See ipmi-sensors(8) for more general info on
|
||||
# ipmi-sensors and freeipmi_interpret_sensors.conf(5) for more
|
||||
# information on sensor states.
|
||||
#
|
||||
# Options:
|
||||
#
|
||||
# -h - specify hostname(s) to remotely access (don't specify for inband)
|
||||
# -r - specify search and replace substitution expressions (separated by a colon) to
|
||||
# modify a hostname before being passed to gmetric. This is useful if
|
||||
# the IPMI hostname differs from the desired hostname to input to gmetric.
|
||||
# For example "ipmi:my" would turn "ipmihost4" into "myhost4". Not specifying
|
||||
# a colon results in a degenerate string removal. For example,
|
||||
# "-ipmi" would turn "host4-ipmi" into "host4".
|
||||
# -S - specify an alternate ipmi-sensors location
|
||||
# -s - specify additional ipmi-sensors arguments
|
||||
# -G - specify an alternate gmetric location
|
||||
# -g - specify additional gmetric arguments
|
||||
# -d - print debug info
|
||||
# -D - do not send sensor data to ganglia (useful during debugging)
|
||||
# -H - output help
|
||||
#
|
||||
# Environment Variables:
|
||||
#
|
||||
# IPMI_HOSTS - specify hostname(s) to remotely access (don't specify for inband)
|
||||
# IPMI_HOSTS_SUBST - specify search and replace substitution
|
||||
# expressions (separated by a colon) to modify a
|
||||
# hostname before being passed to gmetric. This is
|
||||
# useful if the IPMI hostname differs from the
|
||||
# desired hostname to input to gmetric.
|
||||
# IPMI_SENSORS_PATH - specify an alternate ipmi-sensors location
|
||||
# IPMI_SENSORS_ARGS - specify additional ipmi-sensors arguments
|
||||
# GMETRIC_PATH - specify an alternate gmetric location
|
||||
# GMETRIC_ARGS - specify additional gmetric arguments
|
||||
#
|
||||
# Setup Notes:
|
||||
#
|
||||
# Specify the remote hosts you wish to access IPMI information from
|
||||
# via the -h option or IPMI_HOSTS environment variable. If you wish
|
||||
# only to monitor the local node, do not specify an ipmi host. The
|
||||
# input to the -h option is passed directly to ipmi-sensors. So you
|
||||
# may specify anything the ipmi-sensors tool accepts including
|
||||
# hostranged (e.g. foo[0-127]) or comma separated
|
||||
# (e.g. foo0,foo1,foo2,foo3) inputs. If you wish to monitor both
|
||||
# remote and local system, remember to specify one of the hosts as
|
||||
# "localhost".
|
||||
#
|
||||
# If stored in a non-default location the -S option or
|
||||
# IPMI_SENSORS_PATH environment variable must be specified to
|
||||
# determine the ipmi-sensors location.
|
||||
#
|
||||
# If stored in a non-default location the -G option or GMETRIC_PATH
|
||||
# environment variable must be specified to determine the gmetric
|
||||
# location.
|
||||
#
|
||||
# In order to specify non-defaults for ipmi-sensors use the -s
|
||||
# argument or IPMI_SENSORS_ARGS environment variable. Typically,
|
||||
# this option is necessary for non-default communication information
|
||||
# or authentication information (e.g. driver path, driver type,
|
||||
# username, password, etc.). Non-default communication information
|
||||
# can also be stored in the FreeIPMI configuration file. This is the
|
||||
# suggested method because passwords and other sensitive information
|
||||
# could show up in ps(1). If you wish to limit the sensors being
|
||||
# monitored, you can also specify which record-ids are to be monitored
|
||||
# (-r option).
|
||||
#
|
||||
# In order to specify non-defaults for gmetric, use the -g argument
|
||||
# or GMETRIC_ARGS environment variable. Typically, this option is
|
||||
# necessary for non-default gmond.conf paths (i.e. -c
|
||||
# /myspecial/gmond.conf).
|
||||
#
|
||||
# Most users will want to set this script to execute in cron(8).
|
||||
# Using cron you may monitor at whatever interval you wish. The
|
||||
# recommended interval should be atleast longer than 20 seconds, since
|
||||
# that is the default session timeout length.
|
||||
#
|
||||
# Help:
|
||||
#
|
||||
# Report bugs to freeipmi-users@gnu.org or freeipmi-devel@gnu.org.
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
use strict;
|
||||
|
||||
use Getopt::Std;
|
||||
|
||||
use Socket;
|
||||
|
||||
my $no_sensor_state = 0;
|
||||
my $no_sensor_readings = 0;
|
||||
my $debug = 0;
|
||||
my $no_ganglia = 0;
|
||||
|
||||
my $IPMI_HOSTS = undef;
|
||||
my $IPMI_HOSTS_SUBST = undef;
|
||||
my $IPMI_SENSORS_PATH = "/usr/sbin/ipmi-sensors";
|
||||
my $IPMI_SENSORS_ARGS = "";
|
||||
my $GMETRIC_PATH = "/usr/bin/gmetric";
|
||||
my $GMETRIC_ARGS = "";
|
||||
my $IPMI_SENSORS_EXTRA_ARGS = "";
|
||||
|
||||
my $IPMI_SENSORS_OUTPUT;
|
||||
my @IPMI_SENSORS_OUTPUT_LINES;
|
||||
my $line;
|
||||
|
||||
my $cmd;
|
||||
my @subst;
|
||||
|
||||
sub usage
|
||||
{
|
||||
my $prog = $0;
|
||||
print "Usage: $prog [-h <hostname(s)>] [-r <string>] [-S <path>] [-s <sensors arguments>] [-G <path>] [-g <arguments>] [-T] [-t] [-d] [-H]\n";
|
||||
print " -h specify hostname(s) to remotely access\n";
|
||||
print " -r specify search and replace substitution expressions on the hostname (e.g. 'ipmi:host')\n";
|
||||
print " -S specify an alternate ipmi-sensors path\n";
|
||||
print " -s specify additional ipmi-sensors arguments\n";
|
||||
print " -G specify an alternate gmetric path\n";
|
||||
print " -g specify additional gmetric arguments\n";
|
||||
print " -T do not monitor sensor state\n";
|
||||
print " -t do not monitor sensor readings\n";
|
||||
print " -d print debug info\n";
|
||||
print " -D do not send sensor data to ganglia (useful during debugging)\n";
|
||||
print " -H output help\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if (!getopts("h:r:S:s:G:g:TtdDH"))
|
||||
{
|
||||
usage();
|
||||
}
|
||||
|
||||
if (defined($main::opt_H))
|
||||
{
|
||||
usage();
|
||||
}
|
||||
|
||||
if (defined($main::opt_h))
|
||||
{
|
||||
$IPMI_HOSTS = $main::opt_h;
|
||||
}
|
||||
|
||||
if (defined($main::opt_r))
|
||||
{
|
||||
$IPMI_HOSTS_SUBST = $main::opt_r;
|
||||
}
|
||||
|
||||
if (defined($main::opt_S))
|
||||
{
|
||||
$IPMI_SENSORS_PATH = $main::opt_S;
|
||||
}
|
||||
|
||||
if (defined($main::opt_s))
|
||||
{
|
||||
$IPMI_SENSORS_ARGS = $main::opt_s;
|
||||
}
|
||||
|
||||
if (defined($main::opt_G))
|
||||
{
|
||||
$GMETRIC_PATH = $main::opt_G;
|
||||
}
|
||||
|
||||
if (defined($main::opt_g))
|
||||
{
|
||||
$GMETRIC_ARGS = $main::opt_g;
|
||||
}
|
||||
|
||||
if (defined($main::opt_T))
|
||||
{
|
||||
$no_sensor_state = 1;
|
||||
}
|
||||
|
||||
if (defined($main::opt_t))
|
||||
{
|
||||
$no_sensor_readings = 1;
|
||||
}
|
||||
|
||||
if (defined($main::opt_d))
|
||||
{
|
||||
$debug = 1;
|
||||
}
|
||||
|
||||
if (defined($main::opt_D))
|
||||
{
|
||||
$no_ganglia = 1;
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_HOSTS"})
|
||||
{
|
||||
$IPMI_HOSTS = $ENV{"IPMI_HOSTS"};
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_HOSTS_SUBST"})
|
||||
{
|
||||
$IPMI_HOSTS_SUBST = $ENV{"IPMI_HOSTS_SUBST"};
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_SENSORS_PATH"})
|
||||
{
|
||||
$IPMI_SENSORS_PATH = $ENV{"IPMI_SENSORS_PATH"};
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_SENSORS_ARGS"})
|
||||
{
|
||||
$IPMI_SENSORS_ARGS = $ENV{"IPMI_SENSORS_ARGS"};
|
||||
}
|
||||
|
||||
if ($ENV{"GMETRIC_PATH"})
|
||||
{
|
||||
$GMETRIC_PATH = $ENV{"GMETRIC_PATH"};
|
||||
}
|
||||
|
||||
if ($ENV{"GMETRIC_ARGS"})
|
||||
{
|
||||
$GMETRIC_ARGS = $ENV{"GMETRIC_ARGS"};
|
||||
}
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "IPMI_HOSTS=$IPMI_HOSTS\n";
|
||||
print "IPMI_HOSTS_SUBST=$IPMI_HOSTS_SUBST\n";
|
||||
print "IPMI_SENSORS_PATH=$IPMI_SENSORS_PATH\n";
|
||||
print "IPMI_SENSORS_ARGS=$IPMI_SENSORS_ARGS\n";
|
||||
print "GMETRIC_PATH=$GMETRIC_PATH\n";
|
||||
print "GMETRIC_ARGS=$GMETRIC_ARGS\n";
|
||||
}
|
||||
|
||||
if (!(-x $IPMI_SENSORS_PATH))
|
||||
{
|
||||
print "$IPMI_SENSORS_PATH cannot be executed\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!$no_ganglia)
|
||||
{
|
||||
if (!(-x $GMETRIC_PATH))
|
||||
{
|
||||
print "$GMETRIC_PATH cannot be executed\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if ($no_sensor_state && $no_sensor_readings)
|
||||
{
|
||||
print "Must monitor atleast sensor state or sensor readings\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ($IPMI_HOSTS)
|
||||
{
|
||||
$cmd = "$IPMI_SENSORS_PATH $IPMI_SENSORS_ARGS -h $IPMI_HOSTS --quiet-cache --sdr-cache-recreate --always-prefix --no-header-output --output-sensor-state";
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd = "$IPMI_SENSORS_PATH $IPMI_SENSORS_ARGS --quiet-cache --sdr-cache-recreate --always-prefix --no-header-output --output-sensor-state"
|
||||
}
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "ipmi-sensors command: $cmd\n";
|
||||
}
|
||||
|
||||
$IPMI_SENSORS_OUTPUT = `$cmd`;
|
||||
if ($? != 0)
|
||||
{
|
||||
print "$IPMI_SENSORS_PATH: exited with error\n";
|
||||
}
|
||||
|
||||
@IPMI_SENSORS_OUTPUT_LINES = split(/\n/, $IPMI_SENSORS_OUTPUT);
|
||||
|
||||
foreach $line (@IPMI_SENSORS_OUTPUT_LINES)
|
||||
{
|
||||
my $hostname;
|
||||
my $record_id;
|
||||
my $id_string;
|
||||
my $type;
|
||||
my $state;
|
||||
my $reading;
|
||||
my $units;
|
||||
my $event;
|
||||
my $id_string_state;
|
||||
|
||||
my $ip_address;
|
||||
|
||||
my $cmd_state;
|
||||
my $cmd_reading;
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "Parsing: $line\n";
|
||||
}
|
||||
|
||||
if ($line =~ /(.+)\: (\d+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)/)
|
||||
{
|
||||
$hostname = $1;
|
||||
$record_id = $2;
|
||||
$id_string = $4;
|
||||
$type = $6;
|
||||
$state = $8;
|
||||
$reading = $10;
|
||||
$units = $12;
|
||||
$event = $14;
|
||||
|
||||
# trim whitespace off end of string
|
||||
$record_id =~ s/\s+$//;
|
||||
$id_string =~ s/\s+$//;
|
||||
$type =~ s/\s+$//;
|
||||
$state =~ s/\s+$//;
|
||||
$reading =~ s/\s+$//;
|
||||
$units =~ s/\s+$//;
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Line not parsable\n";
|
||||
next;
|
||||
}
|
||||
|
||||
# make name better, convert spaces and slashes into underscores
|
||||
$id_string =~ s/ /_/g;
|
||||
$id_string =~ s/\//_/g;
|
||||
|
||||
if ($IPMI_HOSTS_SUBST) {
|
||||
@subst = split(/:/, $IPMI_HOSTS_SUBST);
|
||||
$hostname =~ s/$subst[0]/$subst[1]/;
|
||||
}
|
||||
|
||||
if ($hostname ne "localhost" && $hostname ne "127.0.0.1")
|
||||
{
|
||||
my $packet_ip = gethostbyname($hostname);
|
||||
|
||||
if (defined($packet_ip))
|
||||
{
|
||||
$ip_address = inet_ntoa($packet_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Cannot resolve ip: $hostname\n";
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$no_sensor_state)
|
||||
{
|
||||
if ($state ne "N/A")
|
||||
{
|
||||
$id_string_state = $id_string . "_State";
|
||||
if ($hostname ne "localhost" && $hostname ne "127.0.0.1")
|
||||
{
|
||||
$cmd_state = "$GMETRIC_PATH $GMETRIC_ARGS -n $id_string_state -v $state -t string -S $ip_address:$hostname";
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd_state = "$GMETRIC_PATH $GMETRIC_ARGS -n $id_string_state -v $state -t string";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$no_sensor_readings)
|
||||
{
|
||||
if ((($type eq "Temperature"
|
||||
&& ($units eq "C"
|
||||
|| $units eq "F"))
|
||||
|| ($type eq "Voltage"
|
||||
&& $units eq "V")
|
||||
|| ($type eq "Fan"
|
||||
&& $units eq "RPM"))
|
||||
&& $reading ne "N/A")
|
||||
{
|
||||
if ($hostname ne "localhost" && $hostname ne "127.0.0.1")
|
||||
{
|
||||
$cmd_reading = "$GMETRIC_PATH $GMETRIC_ARGS -n $id_string -v $reading -t double -u $units -S $ip_address:$hostname";
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd_reading = "$GMETRIC_PATH $GMETRIC_ARGS -n $id_string -v $reading -t double -u $units";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
if ($cmd_state)
|
||||
{
|
||||
print "gmetric command = $cmd_state\n";
|
||||
}
|
||||
if ($cmd_reading)
|
||||
{
|
||||
print "gmetric command = $cmd_reading\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (!$no_ganglia)
|
||||
{
|
||||
if ($cmd_state)
|
||||
{
|
||||
`$cmd_state`;
|
||||
if ($? != 0)
|
||||
{
|
||||
print "\"$cmd_state\": failed\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
if ($cmd_reading)
|
||||
{
|
||||
`$cmd_reading`;
|
||||
if ($? != 0)
|
||||
{
|
||||
print "\"$cmd_reading\": failed\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+648
@@ -0,0 +1,648 @@
|
||||
/*****************************************************************************\
|
||||
* $Id: ipmimonitoring-sel.c,v 1.3 2010-07-22 21:49:00 chu11 Exp $
|
||||
*****************************************************************************
|
||||
* Copyright (C) 2007-2015 Lawrence Livermore National Security, LLC.
|
||||
* Copyright (C) 2006-2007 The Regents of the University of California.
|
||||
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
|
||||
* Written by Albert Chu <chu11@llnl.gov>
|
||||
* UCRL-CODE-222073
|
||||
*
|
||||
* This file is part of Ipmimonitoring, an IPMI sensor monitoring
|
||||
* library. For details, see http://www.llnl.gov/linux/.
|
||||
*
|
||||
* Ipmimonitoring is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Ipmimonitoring is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with Ipmimonitoring. If not, see <http://www.gnu.org/licenses/>.
|
||||
\*****************************************************************************/
|
||||
|
||||
/* This is an example of how to use the libipmimonitoring library to
|
||||
* read and monitor the SEL.
|
||||
*
|
||||
* At the top of this file, you'll find a number of variables for
|
||||
* configuration of IPMI communication and what SEL records you are
|
||||
* interested in monitoring. Those variables are used in the
|
||||
* libipmimonitoring calls below.
|
||||
*
|
||||
* Hopefully this example will be sufficient to help anyone program
|
||||
* IPMI monitoring software for their environment.
|
||||
*
|
||||
* To compile, linking against the library should be sufficient for
|
||||
* most environments. e.g.
|
||||
*
|
||||
* gcc -o ipmimonitoring-sel ipmimonitoring-sel.c -lipmimonitoring
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <ipmi_monitoring.h>
|
||||
#include <ipmi_monitoring_offsets.h>
|
||||
|
||||
/* Communication Configuration - Initialize accordingly */
|
||||
|
||||
/* Hostname, NULL for In-band communication, non-null for a hostname */
|
||||
char *hostname = NULL;
|
||||
|
||||
/* In-band Communication Configuration */
|
||||
int driver_type = IPMI_MONITORING_DRIVER_TYPE_KCS; /* or -1 for default */
|
||||
int disable_auto_probe = 0; /* probe for in-band device */
|
||||
unsigned int driver_address = 0; /* not used if probing */
|
||||
unsigned int register_spacing = 0; /* not used if probing */
|
||||
char *driver_device = NULL; /* not used if probing */
|
||||
|
||||
/* Out-of-band Communication Configuration */
|
||||
int protocol_version = IPMI_MONITORING_PROTOCOL_VERSION_1_5; /* or -1 for default */
|
||||
char *username = "foousername";
|
||||
char *password = "foopassword";
|
||||
unsigned char *k_g = NULL;
|
||||
unsigned int k_g_len = 0;
|
||||
int privilege_level = IPMI_MONITORING_PRIVILEGE_LEVEL_USER; /* or -1 for default */
|
||||
int authentication_type = IPMI_MONITORING_AUTHENTICATION_TYPE_MD5; /* or -1 for default */
|
||||
int cipher_suite_id = 0; /* or -1 for default */
|
||||
int session_timeout = 0; /* 0 for default */
|
||||
int retransmission_timeout = 0; /* 0 for default */
|
||||
|
||||
/* Workarounds - specify workaround flags if necessary */
|
||||
unsigned int workaround_flags = 0;
|
||||
|
||||
/* Initialize w/ record id numbers to only monitor specific record ids */
|
||||
unsigned int record_ids[] = {0};
|
||||
unsigned int record_ids_length = 0;
|
||||
|
||||
/* Initialize w/ sensor types to only monitor specific sensor types
|
||||
* see ipmi_monitoring.h sensor types list.
|
||||
*/
|
||||
unsigned int sensor_types[] = {0};
|
||||
unsigned int sensor_types_length = 0;
|
||||
|
||||
/* Initialize w/ date range to only monitoring specific date range */
|
||||
char *date_begin = NULL; /* use MM/DD/YYYY format */
|
||||
char *date_end = NULL; /* use MM/DD/YYYY format */
|
||||
|
||||
/* Set to an appropriate alternate if desired */
|
||||
char *sdr_cache_directory = "/tmp";
|
||||
char *sel_config_file = NULL;
|
||||
|
||||
/* Set to 1 or 0 to enable these SEL flags
|
||||
* - See ipmi_monitoring.h for descriptions of these flags.
|
||||
*/
|
||||
int reread_sdr_cache = 0;
|
||||
int interpret_oem_data = 0;
|
||||
int assume_system_event_record = 0;
|
||||
int entity_sensor_names = 0;
|
||||
|
||||
/* Initialization flags
|
||||
*
|
||||
* Most commonly bitwise OR IPMI_MONITORING_FLAGS_DEBUG and/or
|
||||
* IPMI_MONITORING_FLAGS_DEBUG_IPMI_PACKETS for extra debugging
|
||||
* information.
|
||||
*/
|
||||
unsigned int ipmimonitoring_init_flags = 0;
|
||||
|
||||
static const char *
|
||||
_get_sensor_type_string (int sensor_type)
|
||||
{
|
||||
switch (sensor_type)
|
||||
{
|
||||
case IPMI_MONITORING_SENSOR_TYPE_RESERVED:
|
||||
return ("Reserved");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_TEMPERATURE:
|
||||
return ("Temperature");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_VOLTAGE:
|
||||
return ("Voltage");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CURRENT:
|
||||
return ("Current");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_FAN:
|
||||
return ("Fan");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PHYSICAL_SECURITY:
|
||||
return ("Physical Security");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PLATFORM_SECURITY_VIOLATION_ATTEMPT:
|
||||
return ("Platform Security Violation Attempt");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PROCESSOR:
|
||||
return ("Processor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POWER_SUPPLY:
|
||||
return ("Power Supply");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POWER_UNIT:
|
||||
return ("Power Unit");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_COOLING_DEVICE:
|
||||
return ("Cooling Device");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OTHER_UNITS_BASED_SENSOR:
|
||||
return ("Other Units Based Sensor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MEMORY:
|
||||
return ("Memory");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_DRIVE_SLOT:
|
||||
return ("Drive Slot");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POST_MEMORY_RESIZE:
|
||||
return ("POST Memory Resize");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_FIRMWARE_PROGRESS:
|
||||
return ("System Firmware Progress");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_EVENT_LOGGING_DISABLED:
|
||||
return ("Event Logging Disabled");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_WATCHDOG1:
|
||||
return ("Watchdog 1");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_EVENT:
|
||||
return ("System Event");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CRITICAL_INTERRUPT:
|
||||
return ("Critical Interrupt");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BUTTON_SWITCH:
|
||||
return ("Button/Switch");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MODULE_BOARD:
|
||||
return ("Module/Board");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MICROCONTROLLER_COPROCESSOR:
|
||||
return ("Microcontroller/Coprocessor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_ADD_IN_CARD:
|
||||
return ("Add In Card");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CHASSIS:
|
||||
return ("Chassis");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CHIP_SET:
|
||||
return ("Chip Set");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OTHER_FRU:
|
||||
return ("Other Fru");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CABLE_INTERCONNECT:
|
||||
return ("Cable/Interconnect");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_TERMINATOR:
|
||||
return ("Terminator");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_BOOT_INITIATED:
|
||||
return ("System Boot Initiated");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BOOT_ERROR:
|
||||
return ("Boot Error");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OS_BOOT:
|
||||
return ("OS Boot");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OS_CRITICAL_STOP:
|
||||
return ("OS Critical Stop");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SLOT_CONNECTOR:
|
||||
return ("Slot/Connector");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_ACPI_POWER_STATE:
|
||||
return ("System ACPI Power State");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_WATCHDOG2:
|
||||
return ("Watchdog 2");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PLATFORM_ALERT:
|
||||
return ("Platform Alert");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_ENTITY_PRESENCE:
|
||||
return ("Entity Presence");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MONITOR_ASIC_IC:
|
||||
return ("Monitor ASIC/IC");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_LAN:
|
||||
return ("LAN");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MANAGEMENT_SUBSYSTEM_HEALTH:
|
||||
return ("Management Subsystem Health");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BATTERY:
|
||||
return ("Battery");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SESSION_AUDIT:
|
||||
return ("Session Audit");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_VERSION_CHANGE:
|
||||
return ("Version Change");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_FRU_STATE:
|
||||
return ("FRU State");
|
||||
}
|
||||
|
||||
return ("Unrecognized");
|
||||
}
|
||||
|
||||
static int
|
||||
_ipmimonitoring (struct ipmi_monitoring_ipmi_config *ipmi_config)
|
||||
{
|
||||
ipmi_monitoring_ctx_t ctx = NULL;
|
||||
unsigned int sel_flags = 0;
|
||||
unsigned int i;
|
||||
int sel_count;
|
||||
int errnum;
|
||||
int rv = -1;
|
||||
|
||||
if (ipmi_monitoring_init (ipmimonitoring_init_flags, &errnum) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_init: %s\n",
|
||||
ipmi_monitoring_ctx_strerror (errnum));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(ctx = ipmi_monitoring_ctx_create ()))
|
||||
{
|
||||
perror ("ipmi_monitoring_ctx_create:");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (sdr_cache_directory)
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sdr_cache_directory (ctx,
|
||||
sdr_cache_directory) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sdr_cache_directory: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
/* Must call otherwise only default interpretations ever used */
|
||||
if (sel_config_file)
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sel_config_file (ctx,
|
||||
sel_config_file) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sel_config_file: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sel_config_file (ctx, NULL) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sel_config_file: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (reread_sdr_cache)
|
||||
sel_flags |= IPMI_MONITORING_SEL_FLAGS_REREAD_SDR_CACHE;
|
||||
|
||||
if (interpret_oem_data)
|
||||
sel_flags |= IPMI_MONITORING_SEL_FLAGS_INTERPRET_OEM_DATA;
|
||||
|
||||
if (assume_system_event_record)
|
||||
sel_flags |= IPMI_MONITORING_SEL_FLAGS_ASSUME_SYSTEM_EVENT_RECORD;
|
||||
|
||||
if (entity_sensor_names)
|
||||
sel_flags |= IPMI_MONITORING_SEL_FLAGS_ENTITY_SENSOR_NAMES;
|
||||
|
||||
if (record_ids_length)
|
||||
{
|
||||
if ((sel_count = ipmi_monitoring_sel_by_record_id (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sel_flags,
|
||||
record_ids,
|
||||
record_ids_length,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_by_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else if (sensor_types_length)
|
||||
{
|
||||
if ((sel_count = ipmi_monitoring_sel_by_sensor_type (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sel_flags,
|
||||
sensor_types,
|
||||
sensor_types_length,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_by_sensor_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else if (date_begin
|
||||
|| date_end)
|
||||
{
|
||||
if ((sel_count = ipmi_monitoring_sel_by_date_range (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sel_flags,
|
||||
date_begin,
|
||||
date_end,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_by_sensor_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((sel_count = ipmi_monitoring_sel_by_record_id (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sel_flags,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_by_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
printf ("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s\n",
|
||||
"Record ID",
|
||||
"Record Type",
|
||||
"SEL State",
|
||||
"Timestamp",
|
||||
"Sensor Name",
|
||||
"Sensor Type",
|
||||
"Event Direction",
|
||||
"Event Type Code",
|
||||
"Event Data",
|
||||
"Event Offset",
|
||||
"Event Offset String");
|
||||
|
||||
for (i = 0; i < sel_count; i++, ipmi_monitoring_sel_iterator_next (ctx))
|
||||
{
|
||||
int record_id, record_type, sel_state, sensor_type, sensor_number, event_direction,
|
||||
event_offset_type, event_offset, event_type_code, manufacturer_id;
|
||||
unsigned int timestamp, event_data1, event_data2, event_data3;
|
||||
int record_type_class;
|
||||
char *event_offset_string = NULL;
|
||||
const char *sensor_type_str;
|
||||
const char *event_direction_str;
|
||||
const char *sel_state_str;
|
||||
char *sensor_name = NULL;
|
||||
unsigned char oem_data[64];
|
||||
int oem_data_len;
|
||||
unsigned int j;
|
||||
|
||||
if ((record_id = ipmi_monitoring_sel_read_record_id (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((record_type = ipmi_monitoring_sel_read_record_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_record_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((record_type_class = ipmi_monitoring_sel_read_record_type_class (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_record_type_class: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sel_state = ipmi_monitoring_sel_read_sel_state (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_sel_state: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (sel_state == IPMI_MONITORING_STATE_NOMINAL)
|
||||
sel_state_str = "Nominal";
|
||||
else if (sel_state == IPMI_MONITORING_STATE_WARNING)
|
||||
sel_state_str = "Warning";
|
||||
else if (sel_state == IPMI_MONITORING_STATE_CRITICAL)
|
||||
sel_state_str = "Critical";
|
||||
else
|
||||
sel_state_str = "N/A";
|
||||
|
||||
printf ("%u, %u, %s",
|
||||
record_id,
|
||||
record_type,
|
||||
sel_state_str);
|
||||
|
||||
if (record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD
|
||||
|| record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD)
|
||||
{
|
||||
|
||||
if (ipmi_monitoring_sel_read_timestamp (ctx, ×tamp) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_timestamp: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* XXX: This should be converted to a nice date output using
|
||||
* your favorite timestamp -> string conversion functions.
|
||||
*/
|
||||
printf (", %u", timestamp);
|
||||
}
|
||||
else
|
||||
printf (", N/A");
|
||||
|
||||
if (record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_SYSTEM_EVENT_RECORD)
|
||||
{
|
||||
/* If you are integrating ipmimonitoring SEL into a monitoring application,
|
||||
* you may wish to count the number of times a specific error occurred
|
||||
* and report that to the monitoring application.
|
||||
*
|
||||
* In this particular case, you'll probably want to check out
|
||||
* what sensor type each SEL event is reporting, the
|
||||
* event offset type, and the specific event offset that occurred.
|
||||
*
|
||||
* See ipmi_monitoring_offsets.h for a list of event offsets
|
||||
* and types.
|
||||
*/
|
||||
|
||||
if (!(sensor_name = ipmi_monitoring_sel_read_sensor_name (ctx)))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_sensor_name: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_type = ipmi_monitoring_sel_read_sensor_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_sensor_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_number = ipmi_monitoring_sel_read_sensor_number (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_sensor_number: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((event_direction = ipmi_monitoring_sel_read_event_direction (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_direction: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((event_type_code = ipmi_monitoring_sel_read_event_type_code (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_type_code: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (ipmi_monitoring_sel_read_event_data (ctx,
|
||||
&event_data1,
|
||||
&event_data2,
|
||||
&event_data3) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_data: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((event_offset_type = ipmi_monitoring_sel_read_event_offset_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_offset_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((event_offset = ipmi_monitoring_sel_read_event_offset (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_offset: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(event_offset_string = ipmi_monitoring_sel_read_event_offset_string (ctx)))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_event_offset_string: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!strlen (sensor_name))
|
||||
sensor_name = "N/A";
|
||||
|
||||
sensor_type_str = _get_sensor_type_string (sensor_type);
|
||||
|
||||
if (event_direction == IPMI_MONITORING_SEL_EVENT_DIRECTION_ASSERTION)
|
||||
event_direction_str = "Assertion";
|
||||
else
|
||||
event_direction_str = "Deassertion";
|
||||
|
||||
printf (", %s, %s, %u, %s, %Xh, %Xh-%Xh-%Xh",
|
||||
sensor_name,
|
||||
sensor_type_str,
|
||||
sensor_number,
|
||||
event_direction_str,
|
||||
event_type_code,
|
||||
event_data1,
|
||||
event_data2,
|
||||
event_data3);
|
||||
|
||||
if (event_offset_type != IPMI_MONITORING_EVENT_OFFSET_TYPE_UNKNOWN)
|
||||
printf (", %Xh", event_offset);
|
||||
else
|
||||
printf (", N/A");
|
||||
|
||||
if (event_offset_type != IPMI_MONITORING_EVENT_OFFSET_TYPE_UNKNOWN)
|
||||
printf (", %s", event_offset_string);
|
||||
else
|
||||
printf (", N/A");
|
||||
}
|
||||
else if (record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD
|
||||
|| record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_NON_TIMESTAMPED_OEM_RECORD)
|
||||
{
|
||||
if (record_type_class == IPMI_MONITORING_SEL_RECORD_TYPE_CLASS_TIMESTAMPED_OEM_RECORD)
|
||||
{
|
||||
if ((manufacturer_id = ipmi_monitoring_sel_read_manufacturer_id (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_manufacturer_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
printf (", Manufacturer ID = %Xh", manufacturer_id);
|
||||
}
|
||||
|
||||
if ((oem_data_len = ipmi_monitoring_sel_read_oem_data (ctx, oem_data, 1024)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sel_read_oem_data: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
printf (", OEM Data = ");
|
||||
|
||||
for (j = 0; j < oem_data_len; j++)
|
||||
printf ("%02Xh ", oem_data[j]);
|
||||
}
|
||||
else
|
||||
printf (", N/A, N/A, N/A, N/A, N/A, N/A, N/A");
|
||||
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
rv = 0;
|
||||
cleanup:
|
||||
if (ctx)
|
||||
ipmi_monitoring_ctx_destroy (ctx);
|
||||
return (rv);
|
||||
}
|
||||
|
||||
static void
|
||||
_init_ipmi_config (struct ipmi_monitoring_ipmi_config *ipmi_config)
|
||||
{
|
||||
assert (ipmi_config);
|
||||
|
||||
ipmi_config->driver_type = driver_type;
|
||||
ipmi_config->disable_auto_probe = disable_auto_probe;
|
||||
ipmi_config->driver_address = driver_address;
|
||||
ipmi_config->register_spacing = register_spacing;
|
||||
ipmi_config->driver_device = driver_device;
|
||||
|
||||
ipmi_config->protocol_version = protocol_version;
|
||||
ipmi_config->username = username;
|
||||
ipmi_config->password = password;
|
||||
ipmi_config->k_g = k_g;
|
||||
ipmi_config->k_g_len = k_g_len;
|
||||
ipmi_config->privilege_level = privilege_level;
|
||||
ipmi_config->authentication_type = authentication_type;
|
||||
ipmi_config->cipher_suite_id = cipher_suite_id;
|
||||
ipmi_config->session_timeout_len = session_timeout;
|
||||
ipmi_config->retransmission_timeout_len = retransmission_timeout;
|
||||
|
||||
ipmi_config->workaround_flags = workaround_flags;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
struct ipmi_monitoring_ipmi_config ipmi_config;
|
||||
|
||||
_init_ipmi_config (&ipmi_config);
|
||||
|
||||
if (_ipmimonitoring (&ipmi_config) < 0)
|
||||
exit (1);
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
||||
+607
@@ -0,0 +1,607 @@
|
||||
/*****************************************************************************\
|
||||
* $Id: ipmimonitoring-sensors.c,v 1.6 2010-07-22 21:49:00 chu11 Exp $
|
||||
*****************************************************************************
|
||||
* Copyright (C) 2007-2015 Lawrence Livermore National Security, LLC.
|
||||
* Copyright (C) 2006-2007 The Regents of the University of California.
|
||||
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
|
||||
* Written by Albert Chu <chu11@llnl.gov>
|
||||
* UCRL-CODE-222073
|
||||
*
|
||||
* This file is part of Ipmimonitoring, an IPMI sensor monitoring
|
||||
* library. For details, see http://www.llnl.gov/linux/.
|
||||
*
|
||||
* Ipmimonitoring is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Ipmimonitoring is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with Ipmimonitoring. If not, see <http://www.gnu.org/licenses/>.
|
||||
\*****************************************************************************/
|
||||
|
||||
/* This is an example of how to use the libipmimonitoring library to
|
||||
* read and monitor sensors.
|
||||
*
|
||||
* At the top of this file, you'll find a number of variables for
|
||||
* configuration of IPMI communication and what sensors you are
|
||||
* interested in monitoring. Those variables are used in the
|
||||
* libipmimonitoring calls below.
|
||||
*
|
||||
* Hopefully this example will be sufficient to help anyone program
|
||||
* IPMI monitoring software for their environment.
|
||||
*
|
||||
* To compile, linking against the library should be sufficient for
|
||||
* most environments. e.g.
|
||||
*
|
||||
* gcc -o ipmimonitoring-sensors ipmimonitoring-sensors.c -lipmimonitoring
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <ipmi_monitoring.h>
|
||||
#include <ipmi_monitoring_bitmasks.h>
|
||||
|
||||
/* Communication Configuration - Initialize accordingly */
|
||||
|
||||
/* Hostname, NULL for In-band communication, non-null for a hostname */
|
||||
char *hostname = NULL;
|
||||
|
||||
/* In-band Communication Configuration */
|
||||
int driver_type = IPMI_MONITORING_DRIVER_TYPE_KCS; /* or -1 for default */
|
||||
int disable_auto_probe = 0; /* probe for in-band device */
|
||||
unsigned int driver_address = 0; /* not used if probing */
|
||||
unsigned int register_spacing = 0; /* not used if probing */
|
||||
char *driver_device = NULL; /* not used if probing */
|
||||
|
||||
/* Out-of-band Communication Configuration */
|
||||
int protocol_version = IPMI_MONITORING_PROTOCOL_VERSION_1_5; /* or -1 for default */
|
||||
char *username = "foousername";
|
||||
char *password = "foopassword";
|
||||
unsigned char *k_g = NULL;
|
||||
unsigned int k_g_len = 0;
|
||||
int privilege_level = IPMI_MONITORING_PRIVILEGE_LEVEL_USER; /* or -1 for default */
|
||||
int authentication_type = IPMI_MONITORING_AUTHENTICATION_TYPE_MD5; /* or -1 for default */
|
||||
int cipher_suite_id = 0; /* or -1 for default */
|
||||
int session_timeout = 0; /* 0 for default */
|
||||
int retransmission_timeout = 0; /* 0 for default */
|
||||
|
||||
/* Workarounds - specify workaround flags if necessary */
|
||||
unsigned int workaround_flags = 0;
|
||||
|
||||
/* Initialize w/ record id numbers to only monitor specific record ids */
|
||||
unsigned int record_ids[] = {0};
|
||||
unsigned int record_ids_length = 0;
|
||||
|
||||
/* Initialize w/ sensor types to only monitor specific sensor types
|
||||
* see ipmi_monitoring.h sensor types list.
|
||||
*/
|
||||
unsigned int sensor_types[] = {0};
|
||||
unsigned int sensor_types_length = 0;
|
||||
|
||||
/* Set to an appropriate alternate if desired */
|
||||
char *sdr_cache_directory = "/tmp";
|
||||
char *sensor_config_file = NULL;
|
||||
|
||||
/* Set to 1 or 0 to enable these sensor reading flags
|
||||
* - See ipmi_monitoring.h for descriptions of these flags.
|
||||
*/
|
||||
int reread_sdr_cache = 0;
|
||||
int ignore_non_interpretable_sensors = 1;
|
||||
int bridge_sensors = 0;
|
||||
int interpret_oem_data = 0;
|
||||
int shared_sensors = 0;
|
||||
int discrete_reading = 0;
|
||||
int ignore_scanning_disabled = 0;
|
||||
int assume_bmc_owner = 0;
|
||||
int entity_sensor_names = 0;
|
||||
|
||||
/* Initialization flags
|
||||
*
|
||||
* Most commonly bitwise OR IPMI_MONITORING_FLAGS_DEBUG and/or
|
||||
* IPMI_MONITORING_FLAGS_DEBUG_IPMI_PACKETS for extra debugging
|
||||
* information.
|
||||
*/
|
||||
unsigned int ipmimonitoring_init_flags = 0;
|
||||
|
||||
static const char *
|
||||
_get_sensor_type_string (int sensor_type)
|
||||
{
|
||||
switch (sensor_type)
|
||||
{
|
||||
case IPMI_MONITORING_SENSOR_TYPE_RESERVED:
|
||||
return ("Reserved");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_TEMPERATURE:
|
||||
return ("Temperature");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_VOLTAGE:
|
||||
return ("Voltage");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CURRENT:
|
||||
return ("Current");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_FAN:
|
||||
return ("Fan");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PHYSICAL_SECURITY:
|
||||
return ("Physical Security");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PLATFORM_SECURITY_VIOLATION_ATTEMPT:
|
||||
return ("Platform Security Violation Attempt");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PROCESSOR:
|
||||
return ("Processor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POWER_SUPPLY:
|
||||
return ("Power Supply");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POWER_UNIT:
|
||||
return ("Power Unit");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_COOLING_DEVICE:
|
||||
return ("Cooling Device");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OTHER_UNITS_BASED_SENSOR:
|
||||
return ("Other Units Based Sensor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MEMORY:
|
||||
return ("Memory");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_DRIVE_SLOT:
|
||||
return ("Drive Slot");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_POST_MEMORY_RESIZE:
|
||||
return ("POST Memory Resize");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_FIRMWARE_PROGRESS:
|
||||
return ("System Firmware Progress");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_EVENT_LOGGING_DISABLED:
|
||||
return ("Event Logging Disabled");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_WATCHDOG1:
|
||||
return ("Watchdog 1");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_EVENT:
|
||||
return ("System Event");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CRITICAL_INTERRUPT:
|
||||
return ("Critical Interrupt");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BUTTON_SWITCH:
|
||||
return ("Button/Switch");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MODULE_BOARD:
|
||||
return ("Module/Board");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MICROCONTROLLER_COPROCESSOR:
|
||||
return ("Microcontroller/Coprocessor");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_ADD_IN_CARD:
|
||||
return ("Add In Card");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CHASSIS:
|
||||
return ("Chassis");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CHIP_SET:
|
||||
return ("Chip Set");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OTHER_FRU:
|
||||
return ("Other Fru");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_CABLE_INTERCONNECT:
|
||||
return ("Cable/Interconnect");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_TERMINATOR:
|
||||
return ("Terminator");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_BOOT_INITIATED:
|
||||
return ("System Boot Initiated");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BOOT_ERROR:
|
||||
return ("Boot Error");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OS_BOOT:
|
||||
return ("OS Boot");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_OS_CRITICAL_STOP:
|
||||
return ("OS Critical Stop");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SLOT_CONNECTOR:
|
||||
return ("Slot/Connector");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SYSTEM_ACPI_POWER_STATE:
|
||||
return ("System ACPI Power State");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_WATCHDOG2:
|
||||
return ("Watchdog 2");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_PLATFORM_ALERT:
|
||||
return ("Platform Alert");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_ENTITY_PRESENCE:
|
||||
return ("Entity Presence");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MONITOR_ASIC_IC:
|
||||
return ("Monitor ASIC/IC");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_LAN:
|
||||
return ("LAN");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_MANAGEMENT_SUBSYSTEM_HEALTH:
|
||||
return ("Management Subsystem Health");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_BATTERY:
|
||||
return ("Battery");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_SESSION_AUDIT:
|
||||
return ("Session Audit");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_VERSION_CHANGE:
|
||||
return ("Version Change");
|
||||
case IPMI_MONITORING_SENSOR_TYPE_FRU_STATE:
|
||||
return ("FRU State");
|
||||
}
|
||||
|
||||
return ("Unrecognized");
|
||||
}
|
||||
|
||||
static int
|
||||
_ipmimonitoring (struct ipmi_monitoring_ipmi_config *ipmi_config)
|
||||
{
|
||||
ipmi_monitoring_ctx_t ctx = NULL;
|
||||
unsigned int sensor_reading_flags = 0;
|
||||
unsigned int i;
|
||||
int sensor_count;
|
||||
int errnum;
|
||||
int rv = -1;
|
||||
|
||||
if (ipmi_monitoring_init (ipmimonitoring_init_flags, &errnum) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_init: %s\n",
|
||||
ipmi_monitoring_ctx_strerror (errnum));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(ctx = ipmi_monitoring_ctx_create ()))
|
||||
{
|
||||
perror ("ipmi_monitoring_ctx_create:");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (sdr_cache_directory)
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sdr_cache_directory (ctx,
|
||||
sdr_cache_directory) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sdr_cache_directory: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
/* Must call otherwise only default interpretations ever used */
|
||||
if (sensor_config_file)
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sensor_config_file (ctx,
|
||||
sensor_config_file) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sensor_config_file: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ipmi_monitoring_ctx_sensor_config_file (ctx, NULL) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_ctx_sensor_config_file: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (reread_sdr_cache)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_REREAD_SDR_CACHE;
|
||||
|
||||
if (ignore_non_interpretable_sensors)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_NON_INTERPRETABLE_SENSORS;
|
||||
|
||||
if (bridge_sensors)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_BRIDGE_SENSORS;
|
||||
|
||||
if (interpret_oem_data)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_INTERPRET_OEM_DATA;
|
||||
|
||||
if (shared_sensors)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_SHARED_SENSORS;
|
||||
|
||||
if (discrete_reading)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_DISCRETE_READING;
|
||||
|
||||
if (ignore_scanning_disabled)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_SCANNING_DISABLED;
|
||||
|
||||
if (assume_bmc_owner)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_ASSUME_BMC_OWNER;
|
||||
|
||||
if (entity_sensor_names)
|
||||
sensor_reading_flags |= IPMI_MONITORING_SENSOR_READING_FLAGS_ENTITY_SENSOR_NAMES;
|
||||
|
||||
if (!record_ids_length && !sensor_types_length)
|
||||
{
|
||||
if ((sensor_count = ipmi_monitoring_sensor_readings_by_record_id (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sensor_reading_flags,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_readings_by_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else if (record_ids_length)
|
||||
{
|
||||
if ((sensor_count = ipmi_monitoring_sensor_readings_by_record_id (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sensor_reading_flags,
|
||||
record_ids,
|
||||
record_ids_length,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_readings_by_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((sensor_count = ipmi_monitoring_sensor_readings_by_sensor_type (ctx,
|
||||
hostname,
|
||||
ipmi_config,
|
||||
sensor_reading_flags,
|
||||
sensor_types,
|
||||
sensor_types_length,
|
||||
NULL,
|
||||
NULL)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_readings_by_sensor_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
printf ("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s\n",
|
||||
"Record ID",
|
||||
"Sensor Name",
|
||||
"Sensor Number",
|
||||
"Sensor Type",
|
||||
"Sensor State",
|
||||
"Sensor Reading",
|
||||
"Sensor Units",
|
||||
"Sensor Event/Reading Type Code",
|
||||
"Sensor Event Bitmask",
|
||||
"Sensor Event String");
|
||||
|
||||
for (i = 0; i < sensor_count; i++, ipmi_monitoring_sensor_iterator_next (ctx))
|
||||
{
|
||||
int record_id, sensor_number, sensor_type, sensor_state, sensor_units,
|
||||
sensor_bitmask_type, sensor_bitmask, sensor_reading_type,
|
||||
event_reading_type_code;
|
||||
char **sensor_bitmask_strings = NULL;
|
||||
const char *sensor_type_str;
|
||||
const char *sensor_state_str;
|
||||
char *sensor_name = NULL;
|
||||
void *sensor_reading;
|
||||
|
||||
if ((record_id = ipmi_monitoring_sensor_read_record_id (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_record_id: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_number = ipmi_monitoring_sensor_read_sensor_number (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_number: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_type = ipmi_monitoring_sensor_read_sensor_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(sensor_name = ipmi_monitoring_sensor_read_sensor_name (ctx)))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_name: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_state = ipmi_monitoring_sensor_read_sensor_state (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_state: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_units = ipmi_monitoring_sensor_read_sensor_units (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_units: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_bitmask_type = ipmi_monitoring_sensor_read_sensor_bitmask_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_bitmask_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_bitmask = ipmi_monitoring_sensor_read_sensor_bitmask (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_bitmask: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(sensor_bitmask_strings = ipmi_monitoring_sensor_read_sensor_bitmask_strings (ctx)))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_bitmask_strings: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((sensor_reading_type = ipmi_monitoring_sensor_read_sensor_reading_type (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_sensor_reading_type: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
sensor_reading = ipmi_monitoring_sensor_read_sensor_reading (ctx);
|
||||
|
||||
if ((event_reading_type_code = ipmi_monitoring_sensor_read_event_reading_type_code (ctx)) < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"ipmi_monitoring_sensor_read_event_reading_type_code: %s\n",
|
||||
ipmi_monitoring_ctx_errormsg (ctx));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!strlen (sensor_name))
|
||||
sensor_name = "N/A";
|
||||
|
||||
sensor_type_str = _get_sensor_type_string (sensor_type);
|
||||
|
||||
printf ("%u, %s, %u, %s",
|
||||
record_id,
|
||||
sensor_name,
|
||||
sensor_number,
|
||||
sensor_type_str);
|
||||
|
||||
if (sensor_state == IPMI_MONITORING_STATE_NOMINAL)
|
||||
sensor_state_str = "Nominal";
|
||||
else if (sensor_state == IPMI_MONITORING_STATE_WARNING)
|
||||
sensor_state_str = "Warning";
|
||||
else if (sensor_state == IPMI_MONITORING_STATE_CRITICAL)
|
||||
sensor_state_str = "Critical";
|
||||
else
|
||||
sensor_state_str = "N/A";
|
||||
|
||||
printf (", %s", sensor_state_str);
|
||||
|
||||
if (sensor_reading)
|
||||
{
|
||||
const char *sensor_units_str;
|
||||
|
||||
if (sensor_reading_type == IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER8_BOOL)
|
||||
printf (", %s",
|
||||
(*((uint8_t *)sensor_reading) ? "true" : "false"));
|
||||
else if (sensor_reading_type == IPMI_MONITORING_SENSOR_READING_TYPE_UNSIGNED_INTEGER32)
|
||||
printf (", %u",
|
||||
*((uint32_t *)sensor_reading));
|
||||
else if (sensor_reading_type == IPMI_MONITORING_SENSOR_READING_TYPE_DOUBLE)
|
||||
printf (", %.2f",
|
||||
*((double *)sensor_reading));
|
||||
else
|
||||
printf (", N/A");
|
||||
|
||||
if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_CELSIUS)
|
||||
sensor_units_str = "C";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_FAHRENHEIT)
|
||||
sensor_units_str = "F";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_VOLTS)
|
||||
sensor_units_str = "V";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_AMPS)
|
||||
sensor_units_str = "A";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_RPM)
|
||||
sensor_units_str = "RPM";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_WATTS)
|
||||
sensor_units_str = "W";
|
||||
else if (sensor_units == IPMI_MONITORING_SENSOR_UNITS_PERCENT)
|
||||
sensor_units_str = "%";
|
||||
else
|
||||
sensor_units_str = "N/A";
|
||||
|
||||
printf (", %s", sensor_units_str);
|
||||
}
|
||||
else
|
||||
printf (", N/A, N/A");
|
||||
|
||||
printf (", %Xh", event_reading_type_code);
|
||||
|
||||
/* It is possible you may want to monitor specific event
|
||||
* conditions that may occur. If that is the case, you may want
|
||||
* to check out what specific bitmask type and bitmask events
|
||||
* occurred. See ipmi_monitoring_bitmasks.h for a list of
|
||||
* bitmasks and types.
|
||||
*/
|
||||
|
||||
if (sensor_bitmask_type != IPMI_MONITORING_SENSOR_BITMASK_TYPE_UNKNOWN)
|
||||
printf (", %Xh", sensor_bitmask);
|
||||
else
|
||||
printf (", N/A");
|
||||
|
||||
if (sensor_bitmask_type != IPMI_MONITORING_SENSOR_BITMASK_TYPE_UNKNOWN)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
|
||||
printf (",");
|
||||
|
||||
while (sensor_bitmask_strings[i])
|
||||
{
|
||||
printf (" ");
|
||||
|
||||
printf ("'%s'",
|
||||
sensor_bitmask_strings[i]);
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
printf (", N/A");
|
||||
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
rv = 0;
|
||||
cleanup:
|
||||
if (ctx)
|
||||
ipmi_monitoring_ctx_destroy (ctx);
|
||||
return (rv);
|
||||
}
|
||||
|
||||
static void
|
||||
_init_ipmi_config (struct ipmi_monitoring_ipmi_config *ipmi_config)
|
||||
{
|
||||
assert (ipmi_config);
|
||||
|
||||
ipmi_config->driver_type = driver_type;
|
||||
ipmi_config->disable_auto_probe = disable_auto_probe;
|
||||
ipmi_config->driver_address = driver_address;
|
||||
ipmi_config->register_spacing = register_spacing;
|
||||
ipmi_config->driver_device = driver_device;
|
||||
|
||||
ipmi_config->protocol_version = protocol_version;
|
||||
ipmi_config->username = username;
|
||||
ipmi_config->password = password;
|
||||
ipmi_config->k_g = k_g;
|
||||
ipmi_config->k_g_len = k_g_len;
|
||||
ipmi_config->privilege_level = privilege_level;
|
||||
ipmi_config->authentication_type = authentication_type;
|
||||
ipmi_config->cipher_suite_id = cipher_suite_id;
|
||||
ipmi_config->session_timeout_len = session_timeout;
|
||||
ipmi_config->retransmission_timeout_len = retransmission_timeout;
|
||||
|
||||
ipmi_config->workaround_flags = workaround_flags;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
struct ipmi_monitoring_ipmi_config ipmi_config;
|
||||
|
||||
_init_ipmi_config (&ipmi_config);
|
||||
|
||||
if (_ipmimonitoring (&ipmi_config) < 0)
|
||||
exit (1);
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
nagios_ipmi_sensors.pl
|
||||
-----------------------
|
||||
|
||||
This script can be used to monitor IPMI sensors in nagios via
|
||||
FreeIPMI's ipmi-sensors. Please see instructions found at the top of
|
||||
the script for detailed instructions.
|
||||
|
||||
This tool will monitor the sensor state (Nominal, Warning, or
|
||||
Critical) of each sensor as determined by libfreeipmi's interpret
|
||||
library. The Nominal, Warning, and Critical states of each sensor
|
||||
will be collected and counted. The overall IPMI sensor status will be
|
||||
mapped into a Nagios status of OK, Warning, or Critical. Details will
|
||||
then be output for Nagios to read. See ipmi-sensors(8) for more
|
||||
general info on ipmi-sensors and freeipmi_interpret_sensors.conf(5)
|
||||
for more information on sensor states.
|
||||
|
||||
Albert Chu
|
||||
chu11 at llnl dot gov
|
||||
@@ -0,0 +1,327 @@
|
||||
#!/usr/bin/perl
|
||||
#############################################################################
|
||||
# Copyright (C) 2003-2009 FreeIPMI Core Team
|
||||
#
|
||||
# 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, 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/>.
|
||||
#############################################################################
|
||||
#
|
||||
# nagios_ipmi_sensors.pl
|
||||
#
|
||||
# Author:
|
||||
#
|
||||
# Albert Chu <chu11 at llnl dot gov>
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This script can be used to monitor IPMI sensors in nagios via
|
||||
# FreeIPMI's ipmi-sensors.
|
||||
#
|
||||
# This tool will monitor the sensor state (Nominal, Warning, or
|
||||
# Critical) of each sensor as determined by libfreeipmi's interpret
|
||||
# library. The Nominal, Warning, and Critical states of each sensor
|
||||
# will be collected and counted. The overall IPMI sensor status will
|
||||
# be mapped into a Nagios status of OK, Warning, or Critical. Details
|
||||
# will then be output for Nagios to read. See ipmi-sensors(8) for
|
||||
# more general info on ipmi-sensors and
|
||||
# freeipmi_interpret_sensors.conf(5) for more information on sensor
|
||||
# states.
|
||||
#
|
||||
# Options:
|
||||
#
|
||||
# -h - specify hostname(s) to remotely access (don't specify for inband)
|
||||
# -S - specify an alternate ipmi_sensors location
|
||||
# -s - specify additional ipmi_sensors arguments
|
||||
# -d - print debug info
|
||||
# -H - output help
|
||||
#
|
||||
# Environment Variables:
|
||||
#
|
||||
# IPMI_HOSTS - specify hostname(s) to remotely access (don't specify for inband)
|
||||
# IPMI_SENSORS_PATH - specify an alternate ipmi-ssensors location
|
||||
# IPMI_SENSORS_ARGS - specify additional ipmi-sensors arguments
|
||||
#
|
||||
# Setup Notes:
|
||||
#
|
||||
# Specify the remote hosts you wish to access IPMI information from
|
||||
# via the -h option or IPMI_HOSTS environment variable. If you wish
|
||||
# only to monitor the local node, do not specify an ipmi host. The
|
||||
# input to the -h option is passed directly to ipmimonitoring. So you
|
||||
# may specify anything the ipmimonitoring tool accepts including
|
||||
# hostranged (e.g. foo[0-127]) or comma separated
|
||||
# (e.g. foo0,foo1,foo2,foo3) inputs. If you wish to monitor both
|
||||
# remote and local system, remember to specify one of the hosts as
|
||||
# "localhost". Most will probably want to monitor just one host (get
|
||||
# the IPMI status for each individual machine being monitored),
|
||||
# however more than one host can be analyzed for a collective result.
|
||||
#
|
||||
# If stored in a non-default location the -S option or
|
||||
# IPMI_SENSORS_PATH environment variable must be specified to
|
||||
# determine the ipmimonitoring location.
|
||||
#
|
||||
# In order to specify non-defaults for ipmimonitoring use the -s
|
||||
# argument or IPMI_SENSORS_ARGS environment variable. Typically,
|
||||
# this option is necessary for non-default communication information
|
||||
# or authentication information (e.g. driver path, driver type,
|
||||
# username, password, etc.). Non-default communication information
|
||||
# can also be stored in the FreeIPMI configuration file. This is the
|
||||
# suggested method because passwords and other sensitive information
|
||||
# could show up in ps(1). If you wish to limit the sensors being
|
||||
# monitored, you can also specify which record-ids are to be monitored
|
||||
# (-s option).
|
||||
#
|
||||
# The setup for this can vary depending on your environment and nagios
|
||||
# setup, but most will need to set this up in nagios by defining a
|
||||
# command and then a service.
|
||||
#
|
||||
# define command {
|
||||
# command_name nagios_ipmi_sensors
|
||||
# command_line /path/nagios_ipmi_sensors.pl -h $ARG1$
|
||||
# }
|
||||
#
|
||||
# define service {
|
||||
# host_name foohost
|
||||
# service_description ipmi
|
||||
# check_command nagios_ipmi_sensors!foohost
|
||||
# }
|
||||
#
|
||||
# The default session timeout length in ipmi-sensors is 20 seconds.
|
||||
# We would recommend that IPMI not be monitored more frequently than
|
||||
# that.
|
||||
#
|
||||
# Help:
|
||||
#
|
||||
# Report bugs to freeipmi-users@gnu.org or freeipmi-devel@gnu.org.
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
use strict;
|
||||
|
||||
use Getopt::Std;
|
||||
|
||||
my $debug = 0;
|
||||
|
||||
my $IPMI_HOSTS = undef;
|
||||
my $IPMI_SENSORS_PATH = "/usr/sbin/ipmi-sensors";
|
||||
my $IPMI_SENSORS_ARGS = "";
|
||||
|
||||
my $IPMI_SENSORS_OUTPUT;
|
||||
my @IPMI_SENSORS_OUTPUT_LINES;
|
||||
my $line;
|
||||
|
||||
my $cmd;
|
||||
|
||||
my $num_output = 0;
|
||||
my $warning_num = 0;
|
||||
my $critical_num = 0;
|
||||
my $fatal_error = 0;
|
||||
|
||||
sub usage
|
||||
{
|
||||
my $prog = $0;
|
||||
print "Usage: $prog [-h <hostname(s)>] [-S <path>] [-s <sensors arguments>] [-d] [-H]\n";
|
||||
print " -h specify hostname(s) to remotely access\n";
|
||||
print " -S specify an alternate ipmi-sensors path\n";
|
||||
print " -s specify additional ipmi-sensors arguments\n";
|
||||
print " -d print debug info\n";
|
||||
print " -H output help\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if (!getopts("h:S:s:dH"))
|
||||
{
|
||||
usage();
|
||||
}
|
||||
|
||||
if (defined($main::opt_H))
|
||||
{
|
||||
usage();
|
||||
}
|
||||
|
||||
if (defined($main::opt_h))
|
||||
{
|
||||
$IPMI_HOSTS = $main::opt_h;
|
||||
}
|
||||
|
||||
if (defined($main::opt_S))
|
||||
{
|
||||
$IPMI_SENSORS_PATH = $main::opt_S;
|
||||
}
|
||||
|
||||
if (defined($main::opt_s))
|
||||
{
|
||||
$IPMI_SENSORS_ARGS = $main::opt_s;
|
||||
}
|
||||
|
||||
if (defined($main::opt_d))
|
||||
{
|
||||
$debug = 1;
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_HOSTS"})
|
||||
{
|
||||
$IPMI_HOSTS = $ENV{"IPMI_HOSTS"};
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_SENSORS_PATH"})
|
||||
{
|
||||
$IPMI_SENSORS_PATH = $ENV{"IPMI_SENSORS_PATH"};
|
||||
}
|
||||
|
||||
if ($ENV{"IPMI_SENSORS_ARGS"})
|
||||
{
|
||||
$IPMI_SENSORS_ARGS = $ENV{"IPMI_SENSORS_ARGS"};
|
||||
}
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "IPMI_HOSTS=$IPMI_HOSTS\n";
|
||||
print "IPMI_SENSORS_PATH=$IPMI_SENSORS_PATH\n";
|
||||
print "IPMI_SENSORS_ARGS=$IPMI_SENSORS_ARGS\n";
|
||||
}
|
||||
|
||||
if (!(-x $IPMI_SENSORS_PATH))
|
||||
{
|
||||
print "$IPMI_SENSORS_PATH cannot be executed\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# note, don't need --ignore-non-interpretable-sensors, legacy output handles it
|
||||
if ($IPMI_HOSTS)
|
||||
{
|
||||
$cmd = "$IPMI_SENSORS_PATH $IPMI_SENSORS_ARGS -h $IPMI_HOSTS --quiet-cache --sdr-cache-recreate --always-prefix --no-header-output --output-sensor-state";
|
||||
}
|
||||
else
|
||||
{
|
||||
$cmd = "$IPMI_SENSORS_PATH $IPMI_SENSORS_ARGS --quiet-cache --sdr-cache-recreate --always-prefix --no-header-output --output-sensor-state"
|
||||
}
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "ipmi-sensors command: $cmd\n";
|
||||
}
|
||||
|
||||
$IPMI_SENSORS_OUTPUT = `$cmd`;
|
||||
if ($? != 0)
|
||||
{
|
||||
print "$IPMI_SENSORS_PATH: exited with error\n";
|
||||
}
|
||||
|
||||
@IPMI_SENSORS_OUTPUT_LINES = split(/\n/, $IPMI_SENSORS_OUTPUT);
|
||||
|
||||
foreach $line (@IPMI_SENSORS_OUTPUT_LINES)
|
||||
{
|
||||
my $hostname;
|
||||
my $record_id;
|
||||
my $id_string;
|
||||
my $type;
|
||||
my $state;
|
||||
my $reading;
|
||||
my $units;
|
||||
my $event;
|
||||
my $id_string_state;
|
||||
|
||||
my $output_str;
|
||||
|
||||
if ($debug)
|
||||
{
|
||||
print "Parsing: $line\n";
|
||||
}
|
||||
|
||||
if ($line =~ /(.+)\: (\d+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)(\s+)\| (.+)/)
|
||||
{
|
||||
$hostname = $1;
|
||||
$record_id = $2;
|
||||
$id_string = $4;
|
||||
$type = $6;
|
||||
$state = $8;
|
||||
$reading = $10;
|
||||
$units = $12;
|
||||
$event = $14;
|
||||
|
||||
# trim whitespace off end of string
|
||||
$record_id =~ s/\s+$//;
|
||||
$id_string =~ s/\s+$//;
|
||||
$type =~ s/\s+$//;
|
||||
$state =~ s/\s+$//;
|
||||
$reading =~ s/\s+$//;
|
||||
$units =~ s/\s+$//;
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Line not parsable\n";
|
||||
$fatal_error++;
|
||||
next;
|
||||
}
|
||||
|
||||
# make name better, convert spaces and slashes into underscores
|
||||
$id_string =~ s/ /_/g;
|
||||
$id_string =~ s/\//_/g;
|
||||
|
||||
if ($state eq "Nominal")
|
||||
{
|
||||
next;
|
||||
}
|
||||
|
||||
if ($state eq "N/A")
|
||||
{
|
||||
next;
|
||||
}
|
||||
|
||||
if ($state eq "Warning")
|
||||
{
|
||||
$warning_num++;
|
||||
$output_str = "WARNING";
|
||||
}
|
||||
elsif ($state eq "Critical")
|
||||
{
|
||||
$critical_num++;
|
||||
$output_str = "CRITICAL";
|
||||
}
|
||||
else
|
||||
{
|
||||
print "State not parsable\n";
|
||||
$fatal_error++;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($num_output)
|
||||
{
|
||||
print "; ";
|
||||
}
|
||||
print "$id_string - $output_str";
|
||||
$num_output++;
|
||||
}
|
||||
|
||||
# Nagios Exit Codes
|
||||
# 0 = OK
|
||||
# 1 = WARNING
|
||||
# 2 = CRITICAL
|
||||
# 3 = UNKNOWN
|
||||
|
||||
if ($fatal_error)
|
||||
{
|
||||
exit 3;
|
||||
}
|
||||
|
||||
if ($critical_num)
|
||||
{
|
||||
exit 2;
|
||||
}
|
||||
|
||||
if ($warning_num)
|
||||
{
|
||||
exit 1;
|
||||
}
|
||||
|
||||
exit 0;
|
||||
@@ -0,0 +1,453 @@
|
||||
petalert.pl
|
||||
-----------------------
|
||||
|
||||
This is a snmptrapd handler script to alert when Platform Event Traps
|
||||
(PET) occur. It was written because traptoemail distributed with
|
||||
net-snmp-5.3.2.2 is incapable of handling multi-line hexstrings and
|
||||
restricted to email alert.
|
||||
|
||||
This script operates in two modes, traphandle or embperl. When in
|
||||
traphandle mode, it concatenates the quoted hex string into one long
|
||||
line, then builds structures to resemble embperl mode. Both modes then
|
||||
invokes helper decoder, ipmi-pet(8) from FreeIPMI, parses the output
|
||||
and alerts in given way like email, nagios external command, nsca, etc.
|
||||
|
||||
|
||||
1. REQUIREMENTS
|
||||
|
||||
freeipmi-1.1.1 and above is required for the script to function. Both
|
||||
FreeIPMI and the script imply Unix-like system, notably GNU/Linux;
|
||||
Windows is not supported as of this writing, Dec 13, 2011.
|
||||
|
||||
Net-SNMP 5.3.2.2 and above is required to make a complete alerting
|
||||
solution. Actually only snmptrapd is related which acts as the trap
|
||||
receiver.
|
||||
|
||||
If you prefer to running it as embedded perl handler, your version of
|
||||
Net-SNMP should have embedded perl support enabled, see "Embedded Perl
|
||||
Support" from snmpd.conf(8) for more infomration. Usually it's
|
||||
enabled, and you can verify with the following command:
|
||||
|
||||
# net-snmp-config --configure-options | tr ' ' '\n' | grep perl
|
||||
'--enable-embedded-perl'
|
||||
|
||||
If you prefer to invoking the handler directly rather than invoking it
|
||||
with perl(1), make sure the script itself has execute permission. Both
|
||||
cases require a working Perl installation, better Perl-5.8.8.
|
||||
|
||||
If you prefer to built-in email alerting, make sure Net::SMTP is
|
||||
installed.
|
||||
|
||||
If you prefer to Nagios monitoring system, make sure the Nagios
|
||||
process and snmptrapd is on the same host. Usually you don't need to
|
||||
worry about write permission of Nagios external command file, because
|
||||
the handler is invoked as root by snmptrapd. If that's not your case,
|
||||
you need to ensure write permission on the command file.
|
||||
|
||||
You might prefer to other alerting methods, bad news is it is not
|
||||
implemented yet. Please drop me a mail, then I might take my time to
|
||||
go on with plugin support.
|
||||
|
||||
Paranoids might check firewall rules allowing only traffic from
|
||||
trusted hosts.
|
||||
|
||||
|
||||
2. CONFIGURATION
|
||||
|
||||
(Note backslash-newline concatenates adjacent lines, so put them in
|
||||
one) Put a line like these in your snmptrapd.conf file:
|
||||
|
||||
traphandle .1.3.6.1.4.1.3183.1.1 /usr/bin/perl \
|
||||
/usr/share/doc/freeipmi/contrib/pet/petalert.pl --mode=traphandle \
|
||||
--alert=email --sdrcache SDRCONF -- -f FROM -s SMTPSERVER ADDRESSES
|
||||
|
||||
Or, if you prefer embedded perl,
|
||||
|
||||
perl do "/usr/share/doc/freeipmi/contrib/pet/petalert.pl";
|
||||
perl IpmiPET::main(qw(--mode=embperl --trapoid=OID --sdrcache=SDRCONF \
|
||||
--alert=email -- -s SMTPSERVER -f FROM ADDRESSES));
|
||||
|
||||
where:
|
||||
only --mode is required, see "petalert.pl -h".
|
||||
|
||||
Make sure execute permission is granted to execute handlers, for
|
||||
example,
|
||||
|
||||
authCommunity execute COMMUNITY_STRING
|
||||
|
||||
see "ACCESS CONTROL" from snmptrapd.conf(8) for more information. Bad
|
||||
news is that you have to use numeric representation, so in addition
|
||||
add "-Of -On" to snmptrapd options.
|
||||
|
||||
You have to enable PET on IPMI nodes as well, including LAN access,
|
||||
PEF alerting, community, alert policy and destination. You may use
|
||||
ipmi-config from FreeIPMI to do the configuration (use --category to
|
||||
checkout core and pef category of configuration). See "IPMI NODES".
|
||||
|
||||
You might wish to set up PTR records for IPMI nodes, otherwise,
|
||||
snmptrapd reports <UNKNOWN> to traphandle and the script will fall
|
||||
back to use ip.
|
||||
|
||||
2.1 ACKNOWLEDGE
|
||||
|
||||
Platform event trap is over UDP, you might worry about trap loss. IPMI
|
||||
spec allows the trap receiver to acknowledge the trap. Use --ack to
|
||||
acknowledge the trap before alerting. You may need workarounds for
|
||||
acknowledgement. See BUGS. So in a acknowlege setup, it might be like
|
||||
this:
|
||||
|
||||
perl do "/usr/share/doc/freeipmi/contrib/pet/petalert.pl";
|
||||
perl IpmiPET::main(qw(--mode=embperl --trapoid=OID --sdrcache=SDRCONF \
|
||||
--ack -W malformedack \
|
||||
--alert=email -- -s SMTPSERVER -f FROM ADDRESSES));
|
||||
|
||||
2.2 NAGIOS INTEGRATION
|
||||
|
||||
Nagios monitoring system could be plugged into by writing to its
|
||||
external command file as passive check. See ipminodes.cfg and
|
||||
check_rmcping for related Nagios configuration.
|
||||
|
||||
Assuming Nagios process is local, use:
|
||||
|
||||
perl do "/usr/share/doc/freeipmi/contrib/pet/petalert.pl";
|
||||
perl IpmiPET::main(qw(--mode=embperl --trapoid=OID --sdrcache=SDRCONF \
|
||||
--alert=nagios -- -H short -S PET NAGIOS_COMMAND_FILE));
|
||||
|
||||
where "-H short" means if 10.2.3.4 resolves to foo.example.com, Nagios
|
||||
passive check gets foo as host; use "-H fqdn" to pass foo.example.com
|
||||
to Nagios. In addition, "-S PET" sets service description.
|
||||
|
||||
If Nagios process is on remote host, normally you turns to NSCA which
|
||||
consists of NSCA daemon on the Nagios host and the send_nsca client
|
||||
program. To alert by send_nsca,
|
||||
|
||||
perl do "/usr/share/doc/freeipmi/contrib/pet/petalert.pl";
|
||||
perl IpmiPET::main(qw(--mode=embperl --trapoid=OID --sdrcache=SDRCONF \
|
||||
--alert=nsca -- --prog /usr/bin/send_nsca -H short -S PET \
|
||||
-- -H NAGIOS_HOST -c SEND_NSCA_CONF));
|
||||
|
||||
Notice the unattached -- appears two times in the configuration line
|
||||
separating three steps of arguments processing, namely generic args,
|
||||
alert specific args, and external helper args.
|
||||
|
||||
|
||||
3. SDR CACHE FILE MAPPING
|
||||
|
||||
Notice the underlying helper program ipmi-pet(8) normally depends on
|
||||
some sdr cache file, either preinitialized or created on demand. If no
|
||||
credential is supplied, ipmi-pet(8) simply assumes localhost and
|
||||
creates sdr cache which is usually
|
||||
~/.freeipmi/sdr-cache/sdr-cache-<hostname>.localhost. You may wish to
|
||||
supply preinitialized ones, then use -c sdrmapping.conf to associate
|
||||
them with IPMI nodes.
|
||||
|
||||
The sdr cache config syntax is: every unindented line starts an sdr
|
||||
cache file, followed by any number of indented lines of IPMI
|
||||
nodes. Every IPMI node line may consist of multiple nodes delimited by
|
||||
whitespaces. Comments follow Shell-style, trailing whitespaces are
|
||||
trimmed, empty lines skipped.
|
||||
|
||||
For example,
|
||||
|
||||
|/path/to/sdr-cache-file-1
|
||||
| 10.2.3.10 # comment
|
||||
|
|
||||
|/path/to/sdr-cache-file-2
|
||||
| 10.2.3.4 # one node
|
||||
| 10.2.3.5 10.2.3.6 # two nodes
|
||||
| 10.2.3.[7-9] # trhee nodes in range form
|
||||
|
|
||||
^-- this is the beginning of lines
|
||||
|
||||
3.1 SDR CACHE INITIALIZATION
|
||||
|
||||
The sdr cache file can be initialized by ipmi-sel(8) and the
|
||||
--sdr-cache-file option.
|
||||
|
||||
# ipmi-sel -h 10.2.3.4 -u root -P --sdr-cache-file=/path/to/sdr-cache-file-X
|
||||
Password:
|
||||
Caching SDR repository information: /path/to/sdr-cache-file-X
|
||||
Caching SDR record 125 of 125 (current record ID 125)
|
||||
ID | Date | Time | Name | Type | Event
|
||||
1 | Dec-12-2011 | 16:41:51 | SEL | Event Logging Disabled | Log Area Reset/Cleared
|
||||
...
|
||||
|
||||
|
||||
4. IPMI NODES
|
||||
|
||||
For PET to be generated, configurations on IPMI nodes have to be done,
|
||||
including LAN access, PEF alerting, trap community, alert policy and
|
||||
destination. You may use ipmi-config from FreeIPMI to do the
|
||||
configuration (use --category to checkout core and pef category of
|
||||
configuration).
|
||||
|
||||
However, before doing configurations and facing unexpected firmware
|
||||
issues, you'd better verify that the trap receiver end works
|
||||
well. Simply modify the following example traphandle input to meet
|
||||
your setup, then feed it to stdin of petalert.pl like this, assuming
|
||||
you prefer to alert email:
|
||||
|
||||
# perl petalert.pl -D :all --mode=traphandle --sdrcache SDRCONF \
|
||||
--alert=email -- -f FROM -s SMTPSERVER ADDRESSES <<EOF
|
||||
pet.example.com
|
||||
UDP: [10.2.3.4]:32768
|
||||
.1.3.6.1.2.1.1.3.0 60:5:11:46.26
|
||||
.1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.4.1.3183.1.1.0.356096
|
||||
.1.3.6.1.4.1.3183.1.1.1 "44 45 4C 4C 50 00 10 59 80 43 B2 C0 4F 33 33 58
|
||||
00 42 19 EE AB 64 FF FF 20 20 00 41 73 18 00 80
|
||||
01 FF 00 00 00 00 00 19 00 00 02 A2 01 00 C1 "
|
||||
.1.3.6.1.6.3.18.1.3.0 10.2.3.4
|
||||
.1.3.6.1.6.3.18.1.4.0 "public"
|
||||
.1.3.6.1.6.3.1.1.4.3.0 .1.3.6.1.4.1.3183.1.1
|
||||
EOF
|
||||
|
||||
Then normally you will get a notification about the test input. Notice
|
||||
that the three-line octet string "44 45 ... C1 " includes one
|
||||
whitespace at the ending of each line, that's the way snmptrapd(8)
|
||||
works.
|
||||
|
||||
4.1 NODE CONFIGURATION
|
||||
|
||||
You'd better save your customization, if any, before changing
|
||||
anything. Guys with factory default settings feel free to go
|
||||
on. FreeIPMI is outstanding with its ability to save your overall
|
||||
customization with --checkout option in ipmi-config(8).
|
||||
|
||||
To save configurations,
|
||||
|
||||
# ipmi-config --category=core --checkout -f saved-core-config.txt
|
||||
# ipmi-config --category=pef --checkout -f saved-pef-config.txt
|
||||
|
||||
Or to create only one file
|
||||
|
||||
# ipmi-config --category=core,pef --checkout -f saved-config.txt
|
||||
|
||||
Notice the checked out configuration is well commented, you can refer
|
||||
to it for help about the following configuration options.
|
||||
|
||||
To observe differences between current configuration and pet
|
||||
configuration,
|
||||
|
||||
# ipmi-config --category=core --diff <<EOF
|
||||
Section Lan_Channel
|
||||
Volatile_Access_Mode Always_Available
|
||||
Volatile_Enable_Pef_Alerting Yes
|
||||
Non_Volatile_Access_Mode Always_Available
|
||||
Non_Volatile_Enable_Pef_Alerting Yes
|
||||
EndSection
|
||||
Section Lan_Conf
|
||||
IP_Address_Source Static
|
||||
IP_Address 10.2.3.4
|
||||
Subnet_Mask 255.255.255.0
|
||||
Default_Gateway_IP_Address 10.2.3.1
|
||||
EndSection
|
||||
Section User2
|
||||
Username root
|
||||
Password CHANGE_ME
|
||||
Enable_User Yes
|
||||
Lan_Privilege_Limit Administrator
|
||||
EndSection
|
||||
EOF
|
||||
|
||||
# ipmi-config --category=pef --diff <<EOF
|
||||
Section Lan_Alert_Destination_1
|
||||
Alert_Destination_Type PET_Trap
|
||||
Alert_Acknowledge Yes
|
||||
Alert_Acknowledge_Timeout 5
|
||||
Alert_Retries 2
|
||||
Alert_Gateway Default
|
||||
Alert_IP_Address 10.2.3.254
|
||||
Alert_MAC_Address 00:00:00:00:00:00
|
||||
EndSection
|
||||
Section Community_String
|
||||
Community_String COMMUNITY_STRING
|
||||
EndSection
|
||||
Section Alert_Policy_1
|
||||
Policy_Type Always_Send_To_This_Destination
|
||||
Policy_Enabled Yes
|
||||
Policy_Number 1
|
||||
Destination_Selector 1
|
||||
Channel_Number 1
|
||||
Alert_String_Set_Selector 0
|
||||
Event_Specific_Alert_String No
|
||||
EndSection
|
||||
EOF
|
||||
|
||||
Note configuration with ipmi-config(8) can be used out of band once
|
||||
IPMI LAN access is OK, which means you no longer need to logon the
|
||||
host to do further configuration.
|
||||
|
||||
# ipmi-config --category=pef -h 10.2.3.4 -u root -P --diff <<EOF
|
||||
...
|
||||
EOF
|
||||
Password:
|
||||
|
||||
In addition, FreeIPMI is featured by configuring many hosts in one
|
||||
run, see "HOSTRANGED SUPPORT" of ipmi-config(8) and others from
|
||||
FreeIPMI.
|
||||
|
||||
When you are sure about the changes, use --commit to apply. Then you
|
||||
can use bmc-device to generate a software generated platform event:
|
||||
|
||||
# bmc-device --platform-event="41 04 05 73 6f assertion 80 01 ff"
|
||||
|
||||
You should get notified about the event a few seconds later, otherwise
|
||||
check vendor rules. If the node is Dell PowerEdge R610 or 1950, you
|
||||
have to make a catch-all filter for the software generated event,
|
||||
|
||||
# ipmi-config --category=pef --commit <<EOF
|
||||
Section Event_Filter_40
|
||||
Filter_Type Software_Configurable
|
||||
Enable_Filter Yes
|
||||
Event_Filter_Action_Alert Yes
|
||||
Event_Filter_Action_Power_Off No
|
||||
Event_Filter_Action_Reset No
|
||||
Event_Filter_Action_Power_Cycle No
|
||||
Event_Filter_Action_Oem No
|
||||
Event_Filter_Action_Diagnostic_Interrupt No
|
||||
Event_Filter_Action_Group_Control_Operation No
|
||||
Alert_Policy_Number 1
|
||||
Event_Severity Unspecified
|
||||
Group_Control_Selector 0
|
||||
Generator_Id_Byte_1 0xFF
|
||||
Generator_Id_Byte_2 0xFF
|
||||
Sensor_Type Any
|
||||
Sensor_Number 0xFF
|
||||
Event_Trigger 0xFF
|
||||
Event_Data1_Offset_Mask 0xFFFF
|
||||
Event_Data1_AND_Mask 0x00
|
||||
Event_Data1_Compare1 0xFF
|
||||
Event_Data1_Compare2 0x00
|
||||
Event_Data2_AND_Mask 0x00
|
||||
Event_Data2_Compare1 0xFF
|
||||
Event_Data2_Compare2 0x00
|
||||
Event_Data3_AND_Mask 0x00
|
||||
Event_Data3_Compare1 0xFF
|
||||
Event_Data3_Compare2 0x00
|
||||
EndSection
|
||||
EOF
|
||||
|
||||
If you still have problems you may wish to read "Figure 17-2 Event
|
||||
Filter, Alert Policy, and Alert Destination, String Relationships"
|
||||
from IPMIv2 spec, and/or check your network traffic. You might be the
|
||||
unlucky guy triggering unspotted firmware bugs. See BUGS.
|
||||
|
||||
|
||||
5. LOGGING
|
||||
|
||||
petalert.pl supports sophisticated logging. Use "-D token" to enable
|
||||
logging of specific parts, or "-D :all" to enable very verbose
|
||||
output. Internally it uses Data::Dumper to represent Perl structs, you
|
||||
can simply copy to files to evaluate. For example, an acknowledge
|
||||
request invocation was logged as
|
||||
|
||||
[Sun Dec 11 13:47:51 2011] ack command line [
|
||||
'/usr/sbin/ipmi-pet',
|
||||
[
|
||||
'--pet-acknowledge',
|
||||
'-h',
|
||||
'10.2.3.4',
|
||||
'356096',
|
||||
'44',
|
||||
'45',
|
||||
'4C',
|
||||
'4C',
|
||||
...
|
||||
]
|
||||
]
|
||||
|
||||
The above request invocation could be rebuilt by
|
||||
|
||||
# perl -le '@v=<STDIN>; $x=eval "@v"; print join(" ", $x->[0], @{$x->[1]})."\n"'
|
||||
[
|
||||
'/usr/sbin/ipmi-pet',
|
||||
[
|
||||
'--pet-acknowledge',
|
||||
'-h',
|
||||
'10.2.3.4',
|
||||
'356096',
|
||||
'44',
|
||||
'45',
|
||||
'4C',
|
||||
'4C',
|
||||
...
|
||||
]
|
||||
]
|
||||
Ctrl-D
|
||||
/usr/sbin/ipmi-pet --pet-acknowledge -h 10.2.3.4 356096 44 45 4C 4C ...
|
||||
|
||||
Then you could simply paste the command in the shell to simulate a
|
||||
manual acknowledge. Looks like acknowledge requests without previous
|
||||
PET is also accepted and responded as usual.
|
||||
|
||||
snmptrapd(8) itself allows for logging of traps into syslog which
|
||||
requires log permission, see "ACCESS CONTROL" from snmptrapd.conf for
|
||||
more information.
|
||||
|
||||
NSCA daemon logs to syslog, set "debug=1" in nsca.cfg to get detailed
|
||||
connection handling. Nagios is also able to log to syslog, set
|
||||
"use_syslog=1" in nagios.cfg to help debugging alert.
|
||||
|
||||
|
||||
6. PET TRAFFIC
|
||||
|
||||
On a no-acknowledge setup, usually there should be only one packet on
|
||||
behalf of the PET from the ipmi node targeting the trap receiver,
|
||||
however, firmware defect was spotted resulting in additional traffic,
|
||||
see BUGS.
|
||||
|
||||
On an acknowledge setup, there should be three packets per event, one
|
||||
PET, one PET acknowledge request from trap receiver targeting the ipmi
|
||||
node, and one PET acknowledge response in the other direction. More
|
||||
bugs were spotted, see BUGS.
|
||||
|
||||
Any setup, packets could be captured like this
|
||||
# tcpdump -i any -nn -vvv -s0 -w pet.pcap 'host 10.2.3.4 and udp'
|
||||
|
||||
Then you can browse the interactions with the help of Wireshark.
|
||||
|
||||
|
||||
7. BUGS
|
||||
|
||||
It's spotted that factory default rules of iDRAC Express on Dell
|
||||
PowerEdge R610 don't match software generated events. You need to make
|
||||
a catch-all filter rule to report those events. However, hardware
|
||||
gernerated events are not subject to such limitation. To verify this
|
||||
situation, open the case to generate a hardware generated intrusion
|
||||
event. Dell PowerEdge 1950 with BMC has similiar problem. The
|
||||
difference is that 1950 has 31 filter rules, so you don't worry about
|
||||
overwriting an existent one.
|
||||
|
||||
It's spotted that Dell PowerEdge 1950 with BMC suffers clock drift,
|
||||
remarkably SEL timestamps. bmc-device(8) from FreeIPMI could be used
|
||||
to adjust SEL time and SDR repository time,
|
||||
# bmc-device --set-sdr-repository-time=now
|
||||
# bmc-device --set-sel-time=now
|
||||
Notice that 'now' refers to current timestamp on the host where the
|
||||
commands are issued. bmc-device(8) works out of band, so simply issue
|
||||
the commands on a host where clock is synchronized.
|
||||
|
||||
It's spotted that iDRAC Express on Dell PowerEdge R610 generates two
|
||||
traps per hardware event. Notice session id from the two traps differ,
|
||||
they are different traps instead of duplication, even though other
|
||||
contents of payload are identical.
|
||||
|
||||
It's spotted that iDRAC Express on Dell PowerEdge R610 produces
|
||||
malformed PET acknowledge responses. In this case, ipmi-pet exits with
|
||||
timeout error "ipmi_cmd_pet_acknowledge: message timeout". You may use
|
||||
'-W malformedack', which is simply passed through, to instruct the
|
||||
underlying helper ipmi-pet(8) to disable such detection and to
|
||||
immediately return. Timeout hurts snmptrapd because slow handler
|
||||
hinders the main loop. To discover potential time consuming cases,
|
||||
use "-D perf" and observe the log.
|
||||
|
||||
It's spotted that some DNS servers return "localhost" on private ip
|
||||
addresses rather than NXDOMAIN, in this case, snmptrapd(8) passes
|
||||
"localhost" as resolved hostname to petalert.pl which is
|
||||
confused. You'd better switch to a correctly configured DNS server, or
|
||||
contact the administrator to solve the problem.
|
||||
|
||||
|
||||
Kaiwang Chen
|
||||
kaiwang.chen@gmail.com
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Checks ipmi nodes by RMCP ping/pong
|
||||
# Mon 12 Dec 2011 kaiwang.chen@gmail.com
|
||||
|
||||
PACKETS=3
|
||||
|
||||
while getopts ":H:w:c:p:" opt
|
||||
do
|
||||
case $opt in
|
||||
H)
|
||||
HOST=$OPTARG
|
||||
;;
|
||||
w)
|
||||
WARNING=$OPTARG
|
||||
;;
|
||||
c)
|
||||
CRITICAL=$OPTARG
|
||||
;;
|
||||
p)
|
||||
PACKETS=$OPTARG
|
||||
;;
|
||||
\?)
|
||||
echo "RMCPPING UNKNOWN - invalid option -$OPTARG"
|
||||
exit 3
|
||||
;;
|
||||
:)
|
||||
echo "RMCPPING UNKNOWN - Option -$OPTARG requires an argument."
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ "$HOST"x == x ]] && {
|
||||
echo "RMCPPING UNKNOWN - which ipmi node to ping"
|
||||
exit 3
|
||||
}
|
||||
|
||||
PROG=/usr/sbin/rmcpping
|
||||
[[ -x $PROG ]] || {
|
||||
echo "RMCPPING UNKNOWN - check $PROG executable"
|
||||
exit 3
|
||||
}
|
||||
|
||||
LOSS=`$PROG -c $PACKETS $HOST | sed -n '/packet loss/{s/^.*, \([0-9]*\)[.][0-9]*% packet loss$/\1/;p}'`
|
||||
|
||||
[[ "$WARNING"x == "x" || "$CRITICAL"x == "x" ]] && {
|
||||
echo "RMCPPING UNKNOWN - Packet loss $LOSS%"
|
||||
exit 3
|
||||
}
|
||||
WARNING=`echo $WARNING|sed s/%//`
|
||||
CRITICAL=`echo $CRITICAL|sed s/%//`
|
||||
|
||||
if [[ $LOSS -ge $CRITICAL ]]
|
||||
then
|
||||
echo "RMCPPING CRITICAL - Packet loss $LOSS%"
|
||||
exit 2
|
||||
elif [[ $LOSS -ge $WARNING ]]
|
||||
then
|
||||
echo "RMCPPING WARNING - Packet loss $LOSS%"
|
||||
exit 1
|
||||
else
|
||||
echo "RMCPPING OK - Packet loss $LOSS%"
|
||||
exit 0
|
||||
fi
|
||||
@@ -0,0 +1,49 @@
|
||||
; commands
|
||||
define command{
|
||||
command_name check-ipminode-alive
|
||||
command_line $USER1$/check_rmcpping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 3
|
||||
}
|
||||
define command{
|
||||
command_name check_dummy
|
||||
command_line $USER1$/check_dummy 3 'It is a volatile passive check'
|
||||
}
|
||||
|
||||
; templates
|
||||
define service{
|
||||
name pet-service
|
||||
use generic-service
|
||||
flap_detection_enabled 0
|
||||
active_checks_enabled 0
|
||||
passive_checks_enabled 1
|
||||
max_check_attempts 1
|
||||
is_volatile 1
|
||||
register 0
|
||||
check_command check_dummy
|
||||
}
|
||||
define host{
|
||||
name ipmi-node
|
||||
use generic-host
|
||||
check_period 24x7
|
||||
check_interval 5
|
||||
retry_interval 1
|
||||
max_check_attempts 10
|
||||
check_command check-ipminode-alive!20%!60%
|
||||
notification_period workhours
|
||||
notification_interval 120
|
||||
notification_options d,u,r
|
||||
contact_groups admins
|
||||
register 0
|
||||
}
|
||||
|
||||
; ipmi nodes and services
|
||||
define host{
|
||||
use ipmi-node
|
||||
host_name foo ; short
|
||||
alias foo.example.com ; fqdn
|
||||
address 10.2.3.4
|
||||
}
|
||||
define service{
|
||||
use pet-service
|
||||
host_name foo
|
||||
service_description PET
|
||||
}
|
||||
@@ -0,0 +1,827 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# This is snmptrapd handler script to alert Platform Event Traps (PET).
|
||||
# I wrote it because traptoemail distributed with net-snmp-5.3.2.2 is
|
||||
# incapable of handling multi-line hexstrings and restricted to email alert.
|
||||
#
|
||||
# This script operates in two modes, traphandle or embperl. When in
|
||||
# traphandle mode, it concatenates the quoted hex string into one long line,
|
||||
# then builds structures to resemble embperl mode. Both modes then invokes
|
||||
# helper decoder, ipmi-pet(8) from FreeIPMI, parses the output and alerts
|
||||
# in given way like email, nagios external command, etc. See README for
|
||||
# a simple tutorial.
|
||||
#
|
||||
# This script is tested on Dell PowerEdge 1950 and PowerEdge R610 servers.
|
||||
# Feel free to adjust to meet your need. It's BSD-licensed.
|
||||
#
|
||||
# ChangeLog
|
||||
#
|
||||
# * Fri 16 Dec 2011 kaiwang.chen@gmail.com
|
||||
# - Re-add nsca support.
|
||||
# - Protect against hex string for traphandle missing ending whitespace.
|
||||
#
|
||||
# * Wed 14 Dec 2011 kaiwang.chen@gmail.com
|
||||
# - Add performance logging support with 'perf' token
|
||||
#
|
||||
# * Mon 12 Dec 2011 kaiwang.chen@gmail.com
|
||||
# - Remove nsca support because snmptrapd is meant to run on the Nagios host
|
||||
# - Fix nagios external command file support
|
||||
# - Map FreeIPMI Nominal state to Nagios OK
|
||||
# - Fix Net::SMTP typos and options handling
|
||||
# - Remove USAGE section, please refer to README
|
||||
#
|
||||
# * Sun 11 Dec 2011 kaiwang.chen@gmail.com
|
||||
# - Add -W to pass workaround flags to ipmi-pet
|
||||
#
|
||||
# * Wed 7 Dec 2011 kaiwang.chen@gmail.com
|
||||
# - Add --ack support
|
||||
# - capture exit code of helper
|
||||
#
|
||||
# * Mon 14 Nov 2011 kaiwang.chen@gmail.com
|
||||
# - complete rewritten, supports embperl mode and additional alert methods
|
||||
#
|
||||
# * Sat 12 Nov 2011 kaiwang.chen@gmail.com
|
||||
# - support sdr cache file mapping with -c option
|
||||
# - add debug log
|
||||
# - in case of no PTR, fallback to ip
|
||||
#
|
||||
# * Sun 06 Nov 2011 kaiwang.chen@gmail.com
|
||||
# - Inital version
|
||||
|
||||
package IpmiPET::Perf;
|
||||
use Time::HiRes qw(tv_interval gettimeofday);
|
||||
sub new {
|
||||
bless {
|
||||
_elapsed => 0,
|
||||
}, __PACKAGE__;
|
||||
}
|
||||
sub start { shift->{_start} = [gettimeofday] }
|
||||
sub stop {
|
||||
my ($obj,$name) = @_;
|
||||
my $t1 = [gettimeofday];
|
||||
my $t = tv_interval($obj->{_start}, $t1);
|
||||
$obj->{_elapsed} += $t;
|
||||
if ($name) {
|
||||
$obj->{_laps}{$name} = $t;
|
||||
}
|
||||
return $t;
|
||||
}
|
||||
sub reset {
|
||||
my ($obj) = @_;
|
||||
$obj->{_elapsed} = 0;
|
||||
if ($obj->{_start}) { delete $obj->{_start} }
|
||||
if ($obj->{_laps}) { delete $obj->{_laps} }
|
||||
}
|
||||
sub elapsed { shift->{_elapsed} }
|
||||
sub laps { shift->{_laps} }
|
||||
1;
|
||||
|
||||
|
||||
package IpmiPET;
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# mapping IPMI nodes to preinitialized sdr caches
|
||||
my %cache_mapping=();
|
||||
|
||||
# options
|
||||
my %opts = ();
|
||||
|
||||
# options and args pass to specific alert mechanisms
|
||||
my %alert_opts = (); # when use builtin features to alert
|
||||
my $alert_prog = ""; # when use external program to alert
|
||||
|
||||
# logger
|
||||
my $log_filename = "/var/log/petalert.log";
|
||||
my %logger_token = ('warn' => 1); # always warn
|
||||
|
||||
# performance ticker
|
||||
my $perf;
|
||||
|
||||
|
||||
sub usage {
|
||||
print <<"EOF";
|
||||
USAGE
|
||||
|
||||
$0 [OPTIONS] -- [ALERT_SPECIFIC_OPTIONS] ALERT_SPECIFIC_ARGS
|
||||
|
||||
OPTIONS
|
||||
-m
|
||||
--mode {traphandle|embperl}
|
||||
Specify mode of execution. Required.
|
||||
--ack
|
||||
Acknowledge the trap before alert.
|
||||
-W
|
||||
--workaround
|
||||
Sets workaround flags for ipmi-pet to acknowledge the trap.
|
||||
-o
|
||||
--trapoid OID
|
||||
Sets trapoid in embperl mode, or defaults to "all".
|
||||
-c
|
||||
--sdrcache sdr_cache_config
|
||||
Specify the sdr cache configuration file.
|
||||
-f
|
||||
--log log_file
|
||||
Specify logging file
|
||||
-n
|
||||
--alert {mail|nagios|nsca|noop|MODULE}
|
||||
Specify alert method. Defaults to "noop".
|
||||
|
||||
ALERT SPECIFIC OPTIONS AND ARGS
|
||||
email
|
||||
--prog mailer
|
||||
Sets mailer. If not specified, falls back to Net::SMTP.
|
||||
mailer_options_and_args
|
||||
|
||||
--server smtp_server
|
||||
Sets the smtpserver for Net::SMTP to send the mail through.
|
||||
Defaults to "localhost".
|
||||
--from from_address
|
||||
Sets the email for Net:SNMP to be used on the From: line.
|
||||
Defaults to "root".
|
||||
to_addresses
|
||||
Sets where you want Net::SMTP to send the email to. Required.
|
||||
|
||||
nagios
|
||||
--host {fqdn|short}
|
||||
Sets host in nagios external commands. Defaults to short (first component).
|
||||
--service
|
||||
Sets service in nagios external commands. Defaults to PET.
|
||||
command_file
|
||||
Sets Nagios external command file, a named pipe (FIFO).
|
||||
Required.
|
||||
nsca
|
||||
--prog send_nsca
|
||||
Sets path to send_nsca binary, required.
|
||||
--host {fqdn|short}
|
||||
Sets host for the passive check. Defaults to short (first component).
|
||||
--service
|
||||
Sets service for the passive check. Defaults to PET.
|
||||
-- send_nsca_options_and_args
|
||||
Pass options and args through to send_nsca binary.
|
||||
|
||||
noop Yes, it is a no-op.
|
||||
|
||||
MODULE <not implemented>
|
||||
--prog plugin
|
||||
Path to plugin script, which must provides..
|
||||
plugin_options_and_args
|
||||
Additional arguments passed to plugin as \@ARGV.
|
||||
EOF
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
sub logger {
|
||||
my ($token, $msg, $variable) = @_;
|
||||
$token ||= "";
|
||||
|
||||
if (open my $fh, ">>", $log_filename) {
|
||||
if ($logger_token{":all"} || $logger_token{$token}) {
|
||||
if ($variable) {
|
||||
use Data::Dumper;
|
||||
my $t = $Data::Dumper::Terse;
|
||||
$Data::Dumper::Terse = 1;
|
||||
print $fh "[".localtime()."] $token $msg " . Dumper($variable);
|
||||
$Data::Dumper::Terse = $t;
|
||||
}
|
||||
else {
|
||||
print $fh "[".localtime()."] $token $msg\n";
|
||||
}
|
||||
}
|
||||
close $fh;
|
||||
}
|
||||
}
|
||||
|
||||
# extract ip from value like "UDP: [172.23.252.107]:32768"
|
||||
sub extract_ip {
|
||||
my ($ip) = ($_[0] =~ /\[([\d.]+)\]:/);
|
||||
return $ip || "0.0.0.0";
|
||||
}
|
||||
|
||||
# decode specified event hexstring into hash like
|
||||
# 'Time' => '13:16:24',
|
||||
# 'Event' => 'General Chassis Intrusion ; Intrusion while system On',
|
||||
# 'System_ID' => '256',
|
||||
# 'State' => 'Critical',
|
||||
# 'GUID' => '44454c4c-5000-1059-8043-b2c04f333358',
|
||||
# 'Date' => 'Oct-15-2011',
|
||||
# 'Manufacturer_ID' => 'Dell Inc.',
|
||||
# 'Name' => 'Sensor #115',
|
||||
# 'Severity' => 'N/A',
|
||||
# 'Event_Direction' => 'Assertion Event',
|
||||
# 'Type' => 'Physical_Security'
|
||||
#
|
||||
sub decode_pet {
|
||||
my ($specific, $event_hexstring, $sdrcache) = @_;
|
||||
|
||||
my $ipmi_pet = "/usr/sbin/ipmi-pet";
|
||||
my @o = qw(-v -v --output-event-severity --output-event-state --interpret-oem-data --comma-separated-output);
|
||||
if ($sdrcache) { push @o, "--sdr-cache-file", $sdrcache }
|
||||
push @o, $specific;
|
||||
$event_hexstring =~ tr/0-9a-fA-F/ /cs; # sanity check
|
||||
$event_hexstring =~ s/^\s+//; # in case of (split/\s+/)[0] being ""
|
||||
push @o, split /\s+/, $event_hexstring;
|
||||
|
||||
my @x = ();
|
||||
logger("decode", "command line ", [$ipmi_pet, \@o]);
|
||||
if (open my $fh, "-|", $ipmi_pet, @o) {
|
||||
@x = <$fh>;
|
||||
close $fh;
|
||||
if ($? >> 8) {
|
||||
logger("warn", "decode failure with CHILD_ERROR: $?");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
logger("warn", "decoder failure: $!");
|
||||
return;
|
||||
}
|
||||
chomp(@x);
|
||||
|
||||
logger("decode", "output ", \@x);
|
||||
my @headers = split /,/, $x[0];
|
||||
my @values = split /,/, $x[1]; # TODO support doubly quoted value
|
||||
if (@headers != @values) {
|
||||
logger("warn", "Spot malicious comma separated value", \@x);
|
||||
}
|
||||
my %event = ();
|
||||
for my $i (0..$#headers) {
|
||||
my $h = $headers[$i];
|
||||
$h =~ s/ /_/g;
|
||||
$event{$h} = $values[$i];
|
||||
}
|
||||
logger("decode", "event ", \%event);
|
||||
return \%event;
|
||||
}
|
||||
|
||||
sub ack_pet {
|
||||
my ($specific, $event_hexstring, $host, $workaround) = @_;
|
||||
|
||||
my $ipmi_pet = "/usr/sbin/ipmi-pet";
|
||||
my @o = qw(--pet-acknowledge);
|
||||
if ($workaround) {
|
||||
push @o, "-W", $workaround;
|
||||
}
|
||||
push @o, "-h", $host;
|
||||
push @o, $specific;
|
||||
$event_hexstring =~ tr/0-9a-fA-F/ /cs; # sanity check
|
||||
$event_hexstring =~ s/^\s+//; # in case of (split/\s+/)[0] being ""
|
||||
push @o, split /\s+/, $event_hexstring;
|
||||
|
||||
my @x = ();
|
||||
logger("ack", "command line ", [$ipmi_pet, \@o]);
|
||||
if (open my $fh, "-|", $ipmi_pet, @o) {
|
||||
@x = <$fh>;
|
||||
close $fh;
|
||||
if ($? >> 8) {
|
||||
logger("warn", "ackhelper failure with CHILD_ERROR: $?");
|
||||
}
|
||||
}
|
||||
else {
|
||||
logger("warn", "ackhelper failure: $!");
|
||||
}
|
||||
}
|
||||
|
||||
# ipmi-pet localtime to calendar time
|
||||
sub pettime {
|
||||
my ($event) = @_;
|
||||
require POSIX;
|
||||
my ($hour,$min,$sec) = split /:/, $event->{Time};
|
||||
my ($mon,$mday,$year) = split /-/, $event->{Date};
|
||||
$year -= 1900;
|
||||
my %m = (
|
||||
Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5,
|
||||
Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11,
|
||||
);
|
||||
if (exists $m{$mon}) { $mon = $m{$mon} }
|
||||
else {
|
||||
logger("warn", "pettime month $mon will map to 0, please check ipmi-pet");
|
||||
$mon = 0;
|
||||
}
|
||||
return POSIX::mktime($sec, $min, $hour, $mday, $mon, $year);
|
||||
}
|
||||
|
||||
# convert event to nagios plugin output
|
||||
# See http://nagios.sourceforge.net/docs/3_0/pluginapi.html
|
||||
sub nagios_check {
|
||||
my ($event) = @_;
|
||||
my ($code, $state);
|
||||
|
||||
$state = uc($event->{State});
|
||||
if ($state eq "WARNING") {$code = 1}
|
||||
elsif ($state eq "CRITICAL") {$code = 2}
|
||||
elsif ($state eq "OK") {$code = 0}
|
||||
elsif ($state eq "NOMINAL") {$code = 0; $state = "OK"}
|
||||
else {$code = 3; $state = "UNKNOWN"}
|
||||
|
||||
my $plugin_output = join(" ", $state, "-", map { defined $_ ? $_ : "" } @{%{$event}}{qw(Name Type Event_Direction Event)});
|
||||
$plugin_output =~ tr/\n\t;|/@:/;
|
||||
|
||||
return ($code, $plugin_output);
|
||||
}
|
||||
sub nagios_host {
|
||||
my ($pdu_info, $opt) = @_;
|
||||
my $h = $pdu_info->{hostname};
|
||||
if ($opt eq 'short') {
|
||||
($h) = ($pdu_info->{hostname} =~ m/([^.]+)/);
|
||||
}
|
||||
return $h;
|
||||
}
|
||||
|
||||
# assemble SMTP DATA, http://cr.yp.to/smtp/mail.html
|
||||
# TODO return encoded data
|
||||
sub mail_data {
|
||||
my ($from, $to, $pdu_info, $uptime, $event) = @_;
|
||||
|
||||
local $" = ", "; # " balance
|
||||
my $data = <<"DATA";
|
||||
To: @{$to}
|
||||
From: $from
|
||||
Subject: PET from $pdu_info->{hostname}: $event->{State} - $event->{Event}
|
||||
|
||||
Host: $pdu_info->{hostname} ($pdu_info->{receivedfrom}) uptime $uptime
|
||||
DATA
|
||||
|
||||
for my $k (qw(Date Time Name Type Event Event_Direction State Severity GUID Manufacturer_ID System_ID)) {
|
||||
$data .= "$k: $event->{$k}\n";
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
# embperl NetSNMP::TrapReceiver trap receiver
|
||||
sub my_receiver {
|
||||
my ($pdu_info, $varbindings) = @_;
|
||||
|
||||
#use Data::Dumper;print Dumper($pdu_info); print Dumper($varbindings);
|
||||
logger("embperl", "original input is ", \@_);
|
||||
|
||||
# inject hostname
|
||||
unless (exists $pdu_info->{hostname}) {
|
||||
use Socket;
|
||||
my $ip = extract_ip($pdu_info->{receivedfrom});
|
||||
$perf->start;
|
||||
$pdu_info->{hostname} = gethostbyaddr(inet_aton($ip), AF_INET) || $ip;
|
||||
$perf->stop("resolv");
|
||||
}
|
||||
|
||||
# do cleanup before processing; values are untouched if -OQ, see snmpcmd(1)
|
||||
for (@$varbindings) {
|
||||
$_->[1] =~ s/^OID: //;
|
||||
$_->[1] =~ s/^IpAddress: //;
|
||||
$_->[1] =~ s/^STRING: //;
|
||||
$_->[1] =~ s/^Hex-STRING: //;
|
||||
if ($_->[1] =~ s/^Timeticks: //) {
|
||||
$_->[1] =~ s/^\(\d+\) //;
|
||||
$_->[1] =~ s/ days, /:/;
|
||||
}
|
||||
}
|
||||
logger("embperl", "input after cleanup is ", \@_);
|
||||
|
||||
process($pdu_info, $varbindings);
|
||||
my $laps = $perf->laps;
|
||||
logger("perf", join(", ", map { $_ . "=" . $laps->{$_} } keys %{$laps}));
|
||||
$perf->reset;
|
||||
}
|
||||
|
||||
# you got it..
|
||||
sub process {
|
||||
my ($pdu_info, $varbindings) = @_;
|
||||
my ($event_oid, $specific, $uptime, $event);
|
||||
|
||||
# locate the PET event hex string, and extract specific trap number
|
||||
for my $v (@{$varbindings}) {
|
||||
if ($v->[0] =~ /^\Q.1.3.6.1.6.3.1.1.4.3.0\E$/) {
|
||||
$event_oid = $v->[1];
|
||||
}
|
||||
if ($v->[0]=~ /^\Q.1.3.6.1.6.3.1.1.4.1.0\E$/) {
|
||||
($specific)=($v->[1]=~/(\d+)$/);
|
||||
}
|
||||
if ($v->[0] =~ /^\Q.1.3.6.1.2.1.1.3.0\E$/) {
|
||||
$uptime = $v->[1];
|
||||
}
|
||||
}
|
||||
$event_oid .= ".1";
|
||||
|
||||
$uptime ||= "00:00:00:00.00";
|
||||
if (my ($d,$H,$M,$S,$x) = ($uptime =~ /(\d+):(\d+):(\d+):(\d+)\.(\d+)/)) {
|
||||
if ($d > 0) { $uptime = "${d}d${H}h" }
|
||||
elsif ($H > 0) { $uptime = "${H}h${M}m" }
|
||||
elsif ($M > 0) { $uptime = "${M}m${S}s" }
|
||||
else { $uptime = "${S}.${x}s" }
|
||||
}
|
||||
|
||||
# convert event string to human readable form
|
||||
for my $v (@{$varbindings}) {
|
||||
if ($v->[0] =~ /^\Q$event_oid\E$/) {
|
||||
my $ip = extract_ip($pdu_info->{receivedfrom});
|
||||
if ($opts{ack}) {
|
||||
$perf->start;
|
||||
ack_pet($specific, $v->[1], $ip, $opts{workaround});
|
||||
$perf->stop("ack");
|
||||
}
|
||||
|
||||
my $sdrcache = resolve_sdrcache($ip);
|
||||
|
||||
# decode octet hex string
|
||||
$event = decode_pet($specific, $v->[1], $sdrcache);
|
||||
}
|
||||
}
|
||||
|
||||
# invalid events cease here
|
||||
return unless $event;
|
||||
|
||||
alert($pdu_info, $uptime, $event);
|
||||
return;
|
||||
}
|
||||
|
||||
# build NetSNMP::TrapReceiver style structures from standard input
|
||||
# See NOTIFICATION PROCESSING snmptrapd.conf(5)
|
||||
sub get_from_stdin {
|
||||
my ($stdin) = @_;
|
||||
my $hostname = shift @{$stdin};
|
||||
my $ipaddress = shift @{$stdin};
|
||||
|
||||
chomp($hostname);
|
||||
chomp($ipaddress);
|
||||
|
||||
# in case of no PTR records available for the IPMI node
|
||||
if($hostname eq "<UNKNOWN>" && (my $ip = extract_ip($ipaddress))) {
|
||||
$hostname = $ip;
|
||||
}
|
||||
|
||||
# some defaults, blindly.. to resemble those by NetSNMP::TrapReceiver
|
||||
my %pdu_info = (
|
||||
notificationtype => "TRAP",
|
||||
hostname => $hostname,
|
||||
receivedfrom => $ipaddress,
|
||||
version => 0,
|
||||
errorstatus => 0,
|
||||
messageid => 0,
|
||||
transactionid => 1,
|
||||
errorindex => 0,
|
||||
requestid => 0,
|
||||
);
|
||||
|
||||
my @varbindings= ();
|
||||
my ($oid,$value);
|
||||
my $more = 0;
|
||||
my $line = "";
|
||||
for (@{$stdin}) {
|
||||
if ($more == 0 && $line) {
|
||||
$line =~ s/\n\Z//s;
|
||||
($oid, $value) = ($line =~ /([^\s]+)\s+(.*)/s);
|
||||
$line = "";
|
||||
push @varbindings, [$oid, $value, "="];
|
||||
}
|
||||
|
||||
# recognize doubly quoted context
|
||||
my $count = 0;
|
||||
my $x = -1;
|
||||
$x=index($_, q{"});
|
||||
while ($x >= 0) {
|
||||
unless ($x > 0 && substr($_, $x-1, 1) eq "\\") {
|
||||
$count++;
|
||||
}
|
||||
$x += 1;
|
||||
$x=index($_, q{"}, $x);
|
||||
}
|
||||
if ($count % 2 == 1) {
|
||||
$more = $more == 1 ? 0 : 1;
|
||||
}
|
||||
|
||||
$line .= "$_\n";
|
||||
}
|
||||
if ($line) {
|
||||
$line =~ s/\n\Z//s;
|
||||
($oid, $value) = ($line =~ /([^\s]+)\s+(.*)/s);
|
||||
$line = "";
|
||||
push @varbindings, [$oid, $value];
|
||||
}
|
||||
|
||||
# Notice the assembled varbindings slightly differs from that in embperl.
|
||||
# For instance, hex string is surrounded by doubly quote, and never
|
||||
# prefixed by "Hex-STRING: ".
|
||||
return (\%pdu_info, \@varbindings);
|
||||
}
|
||||
|
||||
# traphandle handler
|
||||
sub handle_trap {
|
||||
chomp(my @stdin = <STDIN>);
|
||||
logger("traphandle", "input text is ", \@stdin);
|
||||
my ($pdu_info, $varbindings) = get_from_stdin(\@stdin);
|
||||
logger("traphandle", "got pdu_info and varbindings ", [$pdu_info,$varbindings]);
|
||||
process($pdu_info, $varbindings);
|
||||
|
||||
my $laps = $perf->laps;
|
||||
logger("perf", join(", ", map { sprintf '%s=%f', $_,$laps->{$_} } keys %{$laps}));
|
||||
$perf->reset;
|
||||
}
|
||||
|
||||
# alert dispatcher
|
||||
sub alert {
|
||||
my ($pdu_info, $uptime, $event) = @_;
|
||||
|
||||
if ($opts{'alert'} eq 'email') {
|
||||
my $data = mail_data($alert_opts{'from'}, \@ARGV, $pdu_info, $uptime, $event);
|
||||
logger("alert", "mail data is", [\$data]);
|
||||
|
||||
if ($alert_prog) {
|
||||
logger("alert", "mailer invoked with ", [$alert_prog,\@ARGV]);
|
||||
$perf->start;
|
||||
if (open MAILER, "|-", $alert_prog, @ARGV) {
|
||||
print MAILER $data;
|
||||
close MAILER;
|
||||
}
|
||||
else {
|
||||
logger("warn", "Unable to alert through mailer[$alert_prog @ARGV]: $!");
|
||||
}
|
||||
$perf->stop("mailer");
|
||||
}
|
||||
else {
|
||||
logger("alert", "mail by Net::SMTP ", [$alert_opts{'server'},$alert_opts{'from'}, \@ARGV]);
|
||||
$perf->start;
|
||||
eval {
|
||||
my $message = Net::SMTP->new($alert_opts{'server'}) || die "ERROR: can't talk to server $alert_opts{'server'}\n";
|
||||
$message->mail($alert_opts{'from'});
|
||||
$message->to(@ARGV) || die "ERROR: failed to send to the recepients ",join(",",@ARGV),": $!";
|
||||
$message->data();
|
||||
$message->datasend($data);
|
||||
$message->dataend();
|
||||
$message->quit;
|
||||
};
|
||||
$perf->stop("netsmtp");
|
||||
if ($@) {
|
||||
logger("warn", "alert mail failure ", $@);
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($opts{'alert'} eq 'nagios') {
|
||||
my $command_file = $ARGV[0];
|
||||
logger("alert", "nagios external command file is $command_file");
|
||||
|
||||
my $t = pettime($event);
|
||||
my ($code,$plugin_output) = nagios_check($event);
|
||||
my $nagios_host = nagios_host($pdu_info, $alert_opts{host});
|
||||
my $nagios_service = $alert_opts{service};
|
||||
|
||||
# http://nagios.sourceforge.net/docs/3_0/extcommands.html
|
||||
my $cmd = "[$t] PROCESS_SERVICE_CHECK_RESULT;$nagios_host;$nagios_service;$code;$plugin_output";
|
||||
logger("alert", "nagios command is", $cmd);
|
||||
|
||||
$perf->start;
|
||||
if (open NAGIOS, ">>", $command_file) {
|
||||
print NAGIOS "$cmd\n";
|
||||
close NAGIOS;
|
||||
}
|
||||
else {
|
||||
logger("warn", "nagios failure with $command_file: $!");
|
||||
}
|
||||
$perf->stop("nagios");
|
||||
}
|
||||
elsif ($opts{'alert'} eq 'nsca') {
|
||||
logger("alert", "send_nsca invoked as ", [$alert_prog, \@ARGV]);
|
||||
|
||||
my ($code,$plugin_output) = nagios_check($event);
|
||||
my $nagios_host = nagios_host($pdu_info, $alert_opts{host});
|
||||
my $nagios_service = $alert_opts{service};
|
||||
|
||||
# http://nagios.sourceforge.net/download/contrib/documentation/misc/NSCA_Setup.pdf
|
||||
my $cmd= "$nagios_host\t$nagios_service\t$code\t$plugin_output";
|
||||
logger("alert", "nsca command is", $cmd);
|
||||
|
||||
$perf->start;
|
||||
if (open NSCA, "|-", $alert_prog, @ARGV) {
|
||||
print NSCA "$cmd\n";
|
||||
close NSCA;
|
||||
if ($? >> 8) {
|
||||
logger("warn", "nsca failure with CHILD_ERROR: $?");
|
||||
}
|
||||
}
|
||||
else {
|
||||
logger("warn", "nsca failure: $!");
|
||||
}
|
||||
$perf->stop("nsca");
|
||||
}
|
||||
elsif ($opts{'alert'} eq 'noop') {
|
||||
logger('alert', 'noop alert selected');
|
||||
}
|
||||
else {
|
||||
logger("alert", "alert module");
|
||||
# TODO module
|
||||
die "alert module is not implemented!";
|
||||
}
|
||||
}
|
||||
|
||||
# load sdr cache config into global mapping hash
|
||||
sub load_sdrcache_config {
|
||||
my ($conf) = @_;
|
||||
|
||||
my $cache_file = "";
|
||||
my $nl = 0;
|
||||
for (@{$conf}) {
|
||||
$nl++;
|
||||
chomp;
|
||||
s/#.*$//; # trim comment
|
||||
s/\s+$//; # trim trailing whitespaces
|
||||
next if /^$/;
|
||||
if (/^\S/) {
|
||||
if (-e $_) {
|
||||
$cache_file = $_;
|
||||
}
|
||||
else {
|
||||
return "ERROR: no such sdr cache file[$_] at line #$nl";
|
||||
}
|
||||
}
|
||||
if (/^\s/) {
|
||||
s/^\s+//; # trim leading whitespaces
|
||||
if ($cache_file) {
|
||||
for (split /\s+/) {
|
||||
$cache_mapping{$_} = $cache_file;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return "ERROR: missing sdr cache file for host[$_] at line #$nl";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
# given an ipv4 address, resolve to related sdr cache
|
||||
sub resolve_sdrcache {
|
||||
my ($ipmi_node) = @_;
|
||||
my $sdrcache = "";
|
||||
if (exists $cache_mapping{$ipmi_node}) {
|
||||
$sdrcache = $cache_mapping{$ipmi_node};
|
||||
logger("sdrcache", "$ipmi_node resolved to $sdrcache");
|
||||
}
|
||||
else {
|
||||
my $re = qr/^(.*)\[([-\d,]+)\](.*)$/; # to match against eg. 10.2.3.[4-7]
|
||||
for my $k (keys %cache_mapping) {
|
||||
if (my ($prefix,$range,$suffix) = ($k =~ m/$re/)) {
|
||||
if (my ($item) = ($ipmi_node =~ /^\Q$prefix\E(.+)\Q$suffix\E$/)) {
|
||||
for (split /,+/, $range) {
|
||||
my ($f,$t);
|
||||
if (
|
||||
((($f,$t) = m/^(\d+)-(\d+)$/) && $f <= $item && $item <= $t)
|
||||
|| $item == $_
|
||||
) {
|
||||
# got it
|
||||
$sdrcache = $cache_mapping{$k};
|
||||
logger("sdrcache", "$ipmi_node resolved to ", [$k => $sdrcache]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sdrcache || logger("sdrcache", "$ipmi_node will use default cache");
|
||||
|
||||
return $sdrcache;
|
||||
}
|
||||
|
||||
# process and verify args
|
||||
sub process_args {
|
||||
# parse global ARGV for this package
|
||||
GetOptions(\%opts, 'help!', 'quiet!', 'mode|m=s', 'ack!', 'workaround|W=s',
|
||||
'trapoid|o=s', 'sdrcache|c=s', 'log|f=s', 'Debug|D=s', 'alert|n=s');
|
||||
|
||||
if ($opts{'help'}) {
|
||||
usage();
|
||||
}
|
||||
|
||||
# log file
|
||||
if ($opts{'log'}) {
|
||||
if (-w $opts{'log'}) {
|
||||
$log_filename = $opts{'log'};
|
||||
}
|
||||
else {
|
||||
die "log file $opts{'log'} is not writable";
|
||||
}
|
||||
}
|
||||
unless ($opts{'quiet'}) {
|
||||
print STDERR "petalert.pl is logging to $log_filename, use -q to suppress this tip\n";
|
||||
}
|
||||
|
||||
# comma-separted debug tokens
|
||||
if ($opts{'Debug'}) {
|
||||
$logger_token{$_} = 1 for split /,+/, $opts{'Debug'};
|
||||
}
|
||||
# logging now ready
|
||||
logger("argv", "parsed options is ", \%opts);
|
||||
|
||||
if ($opts{'sdrcache'}) {
|
||||
my $conf = $opts{'sdrcache'};
|
||||
logger("sdrcache", "config is [$conf]");
|
||||
|
||||
open CONF, "<", $conf || logger("warn", "assumes default cache because failed to config file[$conf]: $!");
|
||||
chomp(my @lines = <CONF>);
|
||||
close CONF;
|
||||
|
||||
load_sdrcache_config(\@lines);
|
||||
logger("sdrcache", "cache_mapping is ", \%cache_mapping);
|
||||
|
||||
if ($opts{'syntax-only'}) {
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
if ($opts{'mode'} eq 'embperl') {
|
||||
unless (exists $opts{trapoid}) {
|
||||
$opts{trapoid} = "all";
|
||||
logger("argv", "no trapoid specified, defaults to all");
|
||||
}
|
||||
require NetSNMP::TrapReceiver;
|
||||
}
|
||||
elsif ($opts{'mode'} eq 'traphandle') {
|
||||
}
|
||||
else {
|
||||
print STDERR "Unknown operation mode: $opts{mode}\n";
|
||||
usage();
|
||||
}
|
||||
|
||||
# alert method defaults to no-op
|
||||
unless (exists $opts{'alert'}) {
|
||||
$opts{'alert'} = 'noop';
|
||||
logger("argv", "no alert method specified, defaults to noop");
|
||||
}
|
||||
|
||||
# alert methods
|
||||
if ($opts{'alert'} eq 'email') {
|
||||
# use external mail program
|
||||
if ($ARGV[0] && $ARGV[0] eq "--prog") {
|
||||
shift @ARGV;
|
||||
$alert_prog = shift @ARGV;
|
||||
unless (-x $alert_prog) {
|
||||
die "mailer[$alert_prog] is not executable\n";
|
||||
}
|
||||
}
|
||||
# or use perl module
|
||||
else {
|
||||
GetOptions(\%alert_opts, "server=s", "from=s");
|
||||
require Net::SMTP;
|
||||
}
|
||||
}
|
||||
elsif ($opts{'alert'} eq 'nagios' || $opts{'alert'} eq 'nsca') {
|
||||
GetOptions(\%alert_opts, "prog=s", "host|H=s", "service|S=s");
|
||||
$alert_opts{host} ||= "short";
|
||||
$alert_opts{service} ||= "PET";
|
||||
if ($alert_opts{host} ne "fqdn" && $alert_opts{host} ne "short") { # TODO
|
||||
die "Unknown host mapping $alert_opts{host}\n";
|
||||
}
|
||||
if ($opts{'alert'} eq 'nagios' && !($ARGV[0] && -w $ARGV[0])) {
|
||||
die "nagios external command file[$ARGV[0]] is not writable\n";
|
||||
}
|
||||
if ($opts{'alert'} eq 'nsca' && ! $alert_opts{prog}) {
|
||||
die "send_nsca binary is not set\n";
|
||||
}
|
||||
$alert_prog = $alert_opts{prog} || "";
|
||||
}
|
||||
elsif ($opts{'alert'} eq 'noop') {
|
||||
}
|
||||
else {
|
||||
my $module = $opts{'alert'};
|
||||
if (-r $module) {
|
||||
require "$module";
|
||||
# TODO
|
||||
die "<not implemenented yet>";
|
||||
}
|
||||
else {
|
||||
die "Unknown alert module to load: $module\n";
|
||||
}
|
||||
# invokes handler
|
||||
}
|
||||
|
||||
# @ARGV now holds alert specific arguments
|
||||
}
|
||||
|
||||
sub main {
|
||||
@ARGV = @_; # set global ARGV for this package
|
||||
process_args();
|
||||
$perf = IpmiPET::Perf->new;
|
||||
if ($opts{'mode'} eq 'traphandle') {
|
||||
logger("main", "running as traphandle");
|
||||
handle_trap();
|
||||
}
|
||||
elsif ($opts{'mode'} eq 'embperl') {
|
||||
logger("main", "running as embperl");
|
||||
NetSNMP::TrapReceiver::register($opts{trapoid}, \&my_receiver) ||
|
||||
warn "failed to register our perl trap handler\n";
|
||||
}
|
||||
else {
|
||||
die "Should never reach here!\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
# run the program
|
||||
if ( !caller ) { exit main(@ARGV); }
|
||||
|
||||
1;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,272 @@
|
||||
FreeIPMI Coding
|
||||
|
||||
by
|
||||
|
||||
Albert Chu
|
||||
chu11@llnl.gov
|
||||
Last Updated: February 8, 2012
|
||||
|
||||
These are some short descriptions on coding style, API style, other
|
||||
thoughts for those interested in developing for FreeIPMI.
|
||||
|
||||
1) Code Style
|
||||
-------------
|
||||
|
||||
The GNU coding style was selected for FreeIPMI. Please try to follow
|
||||
the coding style used in the rest of FreeIPMI. Here's a short example
|
||||
that covers the generics of the GNU coding style.
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int a = 0;
|
||||
int b = 1;
|
||||
|
||||
if (a == 1)
|
||||
printf("yoda\n");
|
||||
|
||||
if (a == 5
|
||||
|| b == 1)
|
||||
{
|
||||
printf("foobar\n");
|
||||
printf("xyzzy\n");
|
||||
}
|
||||
|
||||
while (a++ < 5)
|
||||
printf("lala\n");
|
||||
|
||||
while (b++ < 7)
|
||||
{
|
||||
printf("blah\n");
|
||||
printf("garble\n");
|
||||
}
|
||||
}
|
||||
|
||||
2) Parameter Checking
|
||||
---------------------
|
||||
|
||||
Please carefully check the input parameters on the inputs your
|
||||
program and/or functions take. Minor parsing issues can lead to
|
||||
catastrophic mistakes in IPMI.
|
||||
|
||||
For example, suppose you have a --power-control option that takes a
|
||||
number to represent a type of operation (on, off, etc.). Suppose a
|
||||
user inputs "--power-control=foobar". The "foobar" will be read as a
|
||||
'0' by strtoul(). If not properly checked, the '0' can be passed to
|
||||
the IPMI Chassis Control command, which uses the '0' to power off a
|
||||
node.
|
||||
|
||||
In programs, when appropriate, output error messages to the user
|
||||
indicating that how and why the inputted parameters were incorrect.
|
||||
|
||||
3) Code Consistency
|
||||
-------------------
|
||||
|
||||
Please keep your code as consistent as possible to other code in
|
||||
FreeIPMI. That includes code indenting style, brace style, API style,
|
||||
and naming convention (which is discussed in more detail below).
|
||||
|
||||
Although there may be situations that a particular API style or naming
|
||||
convention will make things easier for you and your code (such as
|
||||
shortening the name of a function, decreasing the number of parameters
|
||||
you need to pass to a function via a struct, etc.), we ask that your
|
||||
code be consistent so that it does not confuse other developers.
|
||||
|
||||
If there is a distinct technical reason that you must use a different
|
||||
API style, please bring it up with the FreeIPMI authors.
|
||||
|
||||
For example, pretty much all of the "fill" functions in libfreeipmi
|
||||
take the exact parameters they need to fill the fiid object which is
|
||||
passed along as a parameter. All parameters are passed by value, not
|
||||
by a pointer or other method (e.g. object, struct, etc.).
|
||||
|
||||
Exceptions do exist. For example, fill_cmd_chassis_identify() takes
|
||||
parameters passed by pointer instead of passed by value. The reason
|
||||
is that both fields are optional and need not be filled according to
|
||||
the IPMI specification. The pointer gives the caller the ability to
|
||||
set values (by passing a valid pointer) or not (by passing NULL).
|
||||
|
||||
4) Libfreeipmi naming/function parameter conventions
|
||||
----------------------------------------------------
|
||||
|
||||
The naming style in libfreeipmi was developed primarily for the
|
||||
purpose of readability when code is being compared to the IPMI
|
||||
specification.
|
||||
|
||||
Due to the size of the IPMI spec, there will be a lot of code. In
|
||||
earlier versions of FreeIPMI, there was confusion on where code was
|
||||
located, what parameters were called, how parameters should be input,
|
||||
etc. due to different people using different abbreviations styles,
|
||||
putting functions out of order with the spec, in different files,
|
||||
using/not-using different bitmasks, etc. The code has been auditted
|
||||
and cleaned up since then.
|
||||
|
||||
So when adding new functions/templates/parameters/files/etc. to
|
||||
libfreeipmi, please name them consistently to the rest of the
|
||||
libfreeipmi library and the IPMI specification.
|
||||
|
||||
This includes:
|
||||
- naming functions/templates/parameters/files based on the spec
|
||||
- in most cases, not abbreviating any words (or using consistent
|
||||
abbreviations in the rest of the library, check first!)
|
||||
- matching parameter lists to the templates and in the same order
|
||||
- ordering functions/templates/parameters/files/etc. consistently with the spec.
|
||||
|
||||
For example:
|
||||
|
||||
ipmi-messaging-support-cmds.c
|
||||
|
||||
is the file for messaging support commands, chapter 22 of the IPMI 2.0 spec.
|
||||
|
||||
tmpl_cmd_get_channel_authentication_capabilities_rq
|
||||
tmpl_cmd_get_channel_authentication_capabilities_rs
|
||||
|
||||
are the templates for the Get Channel Authentication Capapilities
|
||||
command.
|
||||
|
||||
fiid_template_t tmpl_cmd_get_channel_authentication_capabilities_rq =
|
||||
{
|
||||
{ 8, "cmd", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 4, "channel_number", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 3, "reserved1", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "get_ipmi_v2.0_extended_data", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 4, "maximum_privilege_level", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 4, "reserved2", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 0, "", 0}
|
||||
};
|
||||
|
||||
fiid_template_t tmpl_cmd_get_channel_authentication_capabilities_rs =
|
||||
{
|
||||
{ 8, "cmd", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED | FIID_FIELD_MAKES_PACKET_SUFFICIENT},
|
||||
{ 8, "comp_code", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED | FIID_FIELD_MAKES_PACKET_SUFFICIENT},
|
||||
{ 8, "channel_number", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.none", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.md2", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.md5", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.reserved1", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.straight_password_key", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.oem_prop", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.reserved2", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_type.ipmi_v2.0_extended_capabilities_available", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.anonymous_login", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.null_username", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.non_null_username", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.user_level_authentication", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.per_message_authentication", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "authentication_status.k_g", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 2, "authentication_status.reserved", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "channel_supports_ipmi_v1.5_connections", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 1, "channel_supports_ipmi_v2.0_connections", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 6, "reserved", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 24, "oem_id", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 8, "oem_auxiliary_data", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{ 0, "", 0}
|
||||
};
|
||||
|
||||
The fields listed in the templates above directly match table 22-15,
|
||||
the Get Channel Authentication Capabilities request and response
|
||||
commands.
|
||||
|
||||
int fill_cmd_get_channel_authentication_capabilities (uint8_t channel_number,
|
||||
uint8_t maximum_privilege_level,
|
||||
fiid_obj_t obj_cmd_rq);
|
||||
|
||||
The function above matches the naming and takes exactly the parameters
|
||||
needed by the Get Channel Authentication Capabilities request
|
||||
template.
|
||||
|
||||
The coding conditions specified above may lead to function names or
|
||||
function parameters names that exceed the 80 column mark or having
|
||||
very long parameter lists. We accept this annoyance (or poor coding
|
||||
style, we admit it), as we consider matching the specification as a
|
||||
more important need in libfreeipmi.
|
||||
|
||||
For example:
|
||||
|
||||
int
|
||||
fill_cmd_set_lan_configuration_parameters_authentication_type_enables (uint8_t channel_number,
|
||||
uint8_t callback_level_none,
|
||||
uint8_t callback_level_md2,
|
||||
uint8_t callback_level_md5,
|
||||
uint8_t callback_level_straight_password,
|
||||
uint8_t callback_level_oem_proprietary,
|
||||
uint8_t user_level_none,
|
||||
uint8_t user_level_md2,
|
||||
uint8_t user_level_md5,
|
||||
uint8_t user_level_straight_password,
|
||||
uint8_t user_level_oem_proprietary,
|
||||
uint8_t operator_level_none,
|
||||
uint8_t operator_level_md2,
|
||||
uint8_t operator_level_md5,
|
||||
uint8_t operator_level_straight_password,
|
||||
uint8_t operator_level_oem_proprietary,
|
||||
uint8_t admin_level_none,
|
||||
uint8_t admin_level_md2,
|
||||
uint8_t admin_level_md5,
|
||||
uint8_t admin_level_straight_password,
|
||||
uint8_t admin_level_oem_proprietary,
|
||||
uint8_t oem_level_none,
|
||||
uint8_t oem_level_md2,
|
||||
uint8_t oem_level_md5,
|
||||
uint8_t oem_level_straight_password,
|
||||
uint8_t oem_level_oem_proprietary,
|
||||
fiid_obj_t obj_cmd_rq);
|
||||
|
||||
The function name and parameters look pretty long and terrible. But
|
||||
the names and fields exactly match the get authentication type enables
|
||||
fields listed in Table 23-4. There should be very little difficulty
|
||||
understanding what this funciton does, how it should be called, and
|
||||
what the parameters are if you are reading along with the spec.
|
||||
|
||||
Because we want the code to match the IPMI spec as closely as
|
||||
possible, we currently accept the code inefficiencies (due to large
|
||||
stacks of parameters) that come with having long parameters lists and
|
||||
the atrocities of having gigantic 25+ parameter function calls in
|
||||
code.
|
||||
|
||||
5) Compilation and Development Notes
|
||||
------------------------------------
|
||||
|
||||
Normally, to build and develop from the source tree you need to run:
|
||||
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
|
||||
out of the directory you are in.
|
||||
|
||||
The following configure options can help you with many development
|
||||
issues:
|
||||
|
||||
--enable-debug
|
||||
|
||||
This option will turn on compilation of debugging symbols. More
|
||||
warnings may also be enabled when compiling.
|
||||
|
||||
In addition, this option may enable a few "workarounds" to allow for
|
||||
easier development of code. Most notably, inband drivers may look in
|
||||
additional locations for an ipckey, so that inband development can be
|
||||
done in a local directory without a full installation.
|
||||
|
||||
Generally speaking, if developing out of a local tree, you'll almost
|
||||
always want to enable this flag.
|
||||
|
||||
--enable-profile
|
||||
|
||||
If --enable-debug is enabled, this option will turn on compilation
|
||||
with profiling data.
|
||||
|
||||
--enable-trace
|
||||
|
||||
Compile tracing information into a significant portion of FreeIPMI
|
||||
code. This will result in significant amounts of extra information to
|
||||
be output.
|
||||
|
||||
--enable-rawdumps
|
||||
|
||||
Some users may be more familiar with raw IPMI packet dumps instead of
|
||||
the detailed field identified dumps that normally occur when running
|
||||
tools with --debug. In this case, --enable-rawdumps, will inform
|
||||
FreeIPMI to also output packets in raw form.
|
||||
|
||||
|
||||
@@ -0,0 +1,598 @@
|
||||
FreeIPMI Design
|
||||
|
||||
by
|
||||
|
||||
Albert Chu
|
||||
chu11@llnl.gov
|
||||
Last Updated: August 27, 2013
|
||||
|
||||
These are some notes on various design decisions made in FreeIPMI.
|
||||
|
||||
1) Fiid vs. other Marshalling/Unmarshalling Styles
|
||||
--------------------------------------------------
|
||||
|
||||
Several programmers have asked us why we have chosen a relatively
|
||||
unpopular/different method to marshall/unmarshall IPMI packets and
|
||||
build network packets.
|
||||
|
||||
First, lets discuss several classic methods for
|
||||
marshalling/unmarshalling data when using structs to represent a
|
||||
packet.
|
||||
|
||||
Method A: Marshall/Unmarshall "manually":
|
||||
-----------------------------------------
|
||||
|
||||
struct packet
|
||||
{
|
||||
uint8_t field_1; /* 1 bit */
|
||||
uint8_t field_2; /* 3 bits */
|
||||
uint8_t field_3; /* 4 bits */
|
||||
int16_t field_4; /* 16 bits */
|
||||
};
|
||||
|
||||
my_marshall_function(struct packet *pkt, char *buf, unsigned int buflen)
|
||||
{
|
||||
buf[0] |= pkt->field_1 & 0x1;
|
||||
buf[0] |= (pkt->field_2 << 1) & 0x0E;
|
||||
buf[0] |= (pkt->field_3 << 4) & 0xF0;
|
||||
/* assuming network byte order here */
|
||||
buf[1] |= (pkt->field_4 & 0xFF00) >> 8;
|
||||
buf[2] |= pkt->field_4 & 0x00FF;
|
||||
}
|
||||
|
||||
my_unmarshall_function(struct packet *pkt, char *buf, unsigned int buflen)
|
||||
{
|
||||
pkt->field_1 = buf[0] & 0x01;
|
||||
pkt->field_2 = buf[0] & 0x0E >> 1;
|
||||
pkt->field_3 = buf[0] & 0xF0 >> 4;
|
||||
#if LITTLE_ENDIAN_HOST
|
||||
pkt->field_4 = buf[2] | buf[1] << 8;;
|
||||
#else
|
||||
pkt->field_4 = buf[1] | buf[2] << 8;;
|
||||
#endif
|
||||
}
|
||||
|
||||
general_usage_example()
|
||||
{
|
||||
struct packet pkt;
|
||||
char buf[1024];
|
||||
int len;
|
||||
|
||||
pkt.field_1 = 1;
|
||||
pkt.field_2 = 2;
|
||||
pkt.field_3 = 3;
|
||||
pkt.field_4 = 5;
|
||||
|
||||
my_marshall_function(&pkt, buf, 1024);
|
||||
my_send_data_function(buf);
|
||||
|
||||
len = my_receive_data_function(buf);
|
||||
my_unmarshall_function(&pkt, buf, len);
|
||||
|
||||
printf("field_1 is: %d\n", pkt.field_1);
|
||||
}
|
||||
|
||||
Pros:
|
||||
|
||||
A) No need to deal with struct packing issues in the compiler.
|
||||
B) The struct definition describes packets closely and is relatively
|
||||
easy to use and understand.
|
||||
C) Relatively efficient.
|
||||
D) General usage code size is relatively small.
|
||||
E) General usage need not determine field type (e.g. is it an unsigned
|
||||
or signed integer).
|
||||
|
||||
Cons:
|
||||
|
||||
A) Have to deal with endian problems.
|
||||
B) Lots of marshalling and unmarshalling code are required for each
|
||||
packet type.
|
||||
C) Relatively difficult to deal with optional fields. (You'll need
|
||||
flags in the struct to indicate if a field was set/unset, or validate
|
||||
the fields via protocol definition knowledge.)
|
||||
D) Relatively difficult to deal with variable length fields. (You'll
|
||||
need a length parameter in the struct to indicate the length of a
|
||||
field.)
|
||||
E) Packet dumps/debugging is relatively poor (you only get hex) or you
|
||||
have to create debug functions to handle each packet type.
|
||||
F) Struct changes (e.g. due to IPMI errata changes) may break ABI if
|
||||
the structs are part of a public interface.
|
||||
|
||||
Method B: Cast a buffer to a packed struct:
|
||||
-------------------------------------------
|
||||
|
||||
For Example:
|
||||
|
||||
struct packet
|
||||
{
|
||||
uint8_t field_1 : 1;
|
||||
uint8_t field_2 : 3;
|
||||
uint8_t field_3 : 4;
|
||||
int16_t field_4;
|
||||
};
|
||||
|
||||
my_marshall_function(struct packet *pkt, char *buf, unsigned int buflen)
|
||||
{
|
||||
memcpy(buf, pkt, sizeof(struct packet));
|
||||
#if LITTLE_ENDIAN_HOST
|
||||
swap(&buf[1], &buf[2]);
|
||||
#endif
|
||||
}
|
||||
|
||||
my_unmarshall_function(struct packet *pkt, char *buf, unsigned int buflen)
|
||||
{
|
||||
*pkt = *((struct packet *)buf);
|
||||
#if LITTLE_ENDIAN_HOST
|
||||
pkt->field_4 = ntohs(pkt->field_4);
|
||||
#endif
|
||||
}
|
||||
|
||||
general_usage_example()
|
||||
{
|
||||
struct packet pkt;
|
||||
char buf[1024];
|
||||
int len;
|
||||
|
||||
pkt.field_1 = 1;
|
||||
pkt.field_2 = 2;
|
||||
pkt.field_3 = 3;
|
||||
pkt.field_4 = 5;
|
||||
|
||||
my_marshall_function(&pkt, buf, 1024);
|
||||
my_send_data_function(buf);
|
||||
|
||||
len = my_receive_data_function(buf);
|
||||
my_unmarshall_function(&pkt, buf, len);
|
||||
|
||||
printf("field_1 is: %d\n", pkt.field_1);
|
||||
}
|
||||
|
||||
Pros:
|
||||
|
||||
A) Not too much marshalling and unmarshalling code is required.
|
||||
B) General usage code size is relatively small.
|
||||
C) The struct definition describes packets exactly and is relatively
|
||||
easy to use and understand.
|
||||
D) Very efficient (little actual marshalling/unmarshalling needs to be done.)
|
||||
E) General usage need not determine field type (e.g. is it an unsigned
|
||||
or signed integer).
|
||||
|
||||
Cons:
|
||||
|
||||
A) Have to deal with endian problems.
|
||||
B) Have to deal with portability of struct packing techniques between
|
||||
different compilers (there are differences in compilers, but nowadays,
|
||||
this may be easier/more portable than I originally believed it to be).
|
||||
C) Difficult to deal with optional fields (no flags can be put
|
||||
in the struct to indicate if a field was set/unset, can only
|
||||
validate the fields via protocol definition knowledge.)
|
||||
D) No mechanism to deal with variable length fields (no length
|
||||
field can be put in the struct to indicate the field length.)
|
||||
E) Packet dumps/debugging is relatively poor (you only get hex) or you
|
||||
have to create debug functions to handle each packet type.
|
||||
F) Struct changes (e.g. due to IPMI errata changes) may break ABI if
|
||||
the structs are part of a public interface.
|
||||
|
||||
Our Method C: string_name -> bitmask mapping
|
||||
--------------------------------------------
|
||||
|
||||
The "FreeIPMI Interface Definition" or 'fiid' API in libfreeipmi uses
|
||||
a string_name/bit_count template and an API to get and set values in a
|
||||
packet to handle marshalling/unmarshalling.
|
||||
|
||||
The following are a few of the API functions used for FIID to give you
|
||||
an idea for the fiid API:
|
||||
|
||||
fiid_obj_t fiid_obj_create (fiid_template_t tmpl);
|
||||
int32_t fiid_obj_errnum(fiid_obj_t obj);
|
||||
int8_t fiid_obj_clear (fiid_obj_t obj);
|
||||
int8_t fiid_obj_set (fiid_obj_t obj, char *field, uint64_t val);
|
||||
int8_t fiid_obj_get (fiid_obj_t obj, char *field, uint64_t *val);
|
||||
int32_t fiid_obj_get_all (fiid_obj_t obj, uint8_t *data, uint32_t data_len);
|
||||
int32_t fiid_obj_set_all (fiid_obj_t obj, uint8_t *data, uint32_t data_len);
|
||||
|
||||
The following is the fiid equivalent in the previous examples:
|
||||
|
||||
fiid_template_t tmpl_example =
|
||||
{
|
||||
{1, "field_1", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{3, "field_2", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{4, "field_3", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{16, "field_4", FIID_FIELD_REQUIRED | FIID_FIELD_LENGTH_FIXED},
|
||||
{0, "", 0}
|
||||
};
|
||||
|
||||
general_usage_example()
|
||||
{
|
||||
fiid_obj_t obj;
|
||||
char buf[1024];
|
||||
int len;
|
||||
uint64_t val;
|
||||
|
||||
obj = fiid_obj_create(tmpl_example);
|
||||
fiid_obj_set(obj, "field_1", 1);
|
||||
fiid_obj_set(obj, "field_2", 2);
|
||||
fiid_obj_set(obj, "field_3", 3);
|
||||
fiid_obj_set(obj, "field_4", 5);
|
||||
|
||||
/* "marshall" the packet */
|
||||
fiid_obj_get_all(obj, buf, 1024);
|
||||
my_send_data_function(buf);
|
||||
|
||||
fiid_obj_clear(obj);
|
||||
|
||||
len = my_receive_data_function(buf);
|
||||
|
||||
/* "unmarshall" the packet */
|
||||
fiid_obj_set_all(obj, buf, len);
|
||||
|
||||
fiid_obj_get(obj, "field_1", &val);
|
||||
printf("field_1 is: %d\n", (int16_t)val);
|
||||
}
|
||||
|
||||
The pros and cons of the fiid method are:
|
||||
|
||||
Pros:
|
||||
|
||||
A) No need to deal with endian problems (handled internally in the API).
|
||||
B) No need to deal with struct packing issues (bit shifts are handled
|
||||
internally in the API).
|
||||
C) Easier to deal with optional fields (For marshalling, don't set a
|
||||
field. For unmarshalling, the api can identify if a field is set or not).
|
||||
D) Easier to deal with variable length fields (For marshalling, set
|
||||
whatever length you want. For unmarshalling, the api can identify the
|
||||
length of the field read).
|
||||
E) Templates describe the packets exactly.
|
||||
F) Easy to do large packet dumps and debug (fields and values easily
|
||||
output and identified).
|
||||
G) Significantly reduce the amount of marshalling, unmarshalling, and
|
||||
debug code needed (the API handles it all already).
|
||||
F) Template changes (e.g. due to IPMI errata changes) shouldn't break
|
||||
ABI. (You can publish the template strings, need not publish the
|
||||
template itself.)
|
||||
|
||||
Cons:
|
||||
|
||||
A) Need to learn/use a reasonably large API and learn/use all the
|
||||
templates.
|
||||
B) Pretty inefficient (lots of string comparisons).
|
||||
C) General usage code size is increased.
|
||||
D) General usage must determine and cast field to appropriate type
|
||||
(e.g. is it an unsigned or signed integer).
|
||||
|
||||
(Side Comments:
|
||||
|
||||
Some other networking APIs have a similar API, but use
|
||||
macros/enums for the field names rather than strings. Many of the
|
||||
above benefits are identical, except the debug dump output
|
||||
capabilities are weaker in exchange for better performance.
|
||||
|
||||
Some other networking APIs may return a type of a field (e.g. signed
|
||||
vs unsigned, 16bit vs 32bit, etc.). That would remove need to
|
||||
determine casting in general usage in exchange for larger general
|
||||
usage code size.)
|
||||
|
||||
The big reasons why this was developed and chosen over traditional
|
||||
methods.
|
||||
|
||||
A) The IPMI specification is very large, so reducing code size weighed
|
||||
in as an important factor for the FreeIPMI authors. This allowed
|
||||
there to be fewer marshalling/unmarshalling/debug functions. By one
|
||||
FreeIPMI author's counting in the specification, there are 304
|
||||
different base payloads in the IPMI specification. This does not
|
||||
include permutations of payloads due to different versions, optional
|
||||
fields, headers, trailers, encryption, oem extensions, record formats
|
||||
data is stored in, etc.
|
||||
|
||||
B) There are a relatively large number of optional fields and variable
|
||||
length fields in the IPMI specification. As stated above, the
|
||||
traditional struct based marshalling/unmarshalling have issues
|
||||
with handling these.
|
||||
|
||||
C) The lack of IPMI compliance from vendors is a well known problem in
|
||||
the open-source community. The templates have saved developers
|
||||
countless hours of debugging time due to the easy method by which
|
||||
packets can be dumped with their fields and values quickly identified.
|
||||
It is very easy to find vendor IPMI compliance problems very quickly.
|
||||
|
||||
Here's an example of a dump:
|
||||
|
||||
pwopr2: : RMCP Header:
|
||||
pwopr2: : ------------
|
||||
pwopr2: [ 6h] = version[ 8b]
|
||||
pwopr2: [ 0h] = reserved[ 8b]
|
||||
pwopr2: [ FFh] = sequence_number[ 8b]
|
||||
pwopr2: [ 7h] = message_class.class[ 5b]
|
||||
pwopr2: [ 0h] = message_class.reserved[ 2b]
|
||||
pwopr2: [ 0h] = message_class.ack[ 1b]
|
||||
pwopr2: : IPMI Session Header:
|
||||
pwopr2: : --------------------
|
||||
pwopr2: [ 0h] = authentication_type[ 8b]
|
||||
pwopr2: [ 0h] = session_sequence_number[32b]
|
||||
pwopr2: [ 0h] = session_id[32b]
|
||||
pwopr2: [ 9h] = ipmi_msg_len[ 8b]
|
||||
pwopr2: : IPMI Message Header:
|
||||
pwopr2: : --------------------
|
||||
pwopr2: [ 20h] = rs_addr[ 8b]
|
||||
pwopr2: [ 0h] = rs_lun[ 2b]
|
||||
pwopr2: [ 6h] = net_fn[ 6b]
|
||||
pwopr2: [ C8h] = checksum1[ 8b]
|
||||
pwopr2: [ 81h] = rq_addr[ 8b]
|
||||
pwopr2: [ 0h] = rq_lun[ 2b]
|
||||
pwopr2: [ 26h] = rq_seq[ 6b]
|
||||
pwopr2: : IPMI Command Data:
|
||||
pwopr2: : ------------------
|
||||
pwopr2: [ 38h] = cmd[ 8b]
|
||||
pwopr2: [ Eh] = channel_number[ 4b]
|
||||
pwopr2: [ 0h] = reserved1[ 3b]
|
||||
pwopr2: [ 1h] = get_ipmi_v2.0_extended_data[ 1b]
|
||||
pwopr2: [ 2h] = maximum_privilege_level[ 4b]
|
||||
pwopr2: [ 0h] = reserved2[ 4b]
|
||||
pwopr2: : IPMI Trailer:
|
||||
pwopr2: : --------------
|
||||
pwopr2: [ 1Fh] = checksum2[ 8b]
|
||||
|
||||
2) Non-generic error messages
|
||||
-----------------------------
|
||||
|
||||
Under some circumstances, it may be preferred to return generic error
|
||||
messages to the user, so that a malicious user cannot infer remote
|
||||
login information from different error messages returned. For
|
||||
example, returning a generic error message of "Permission Denied"
|
||||
would not give a malicious user information on whether the username or
|
||||
password was input incorrectly.
|
||||
|
||||
Although implemented earlier on, the FreeIPMI authors have elected to
|
||||
not implement this now. There are many vendor implementations of IPMI
|
||||
and many configuration options (authentication mechanism, cipher suite
|
||||
id, username, password, K_g, privilege level) needed for proper IPMI
|
||||
session establishment. The number of error messages that could be
|
||||
mapped into a generic "Permission Denied" would make it too difficult
|
||||
for users to determine why they failed to connect properly. The
|
||||
overall worth of implementing a generic "Permission Denied" error
|
||||
message just doesn't seem worth it now.
|
||||
|
||||
3) Get Channel Authentication Capabilities Command
|
||||
--------------------------------------------------
|
||||
|
||||
The Get Channel Authentication Capabilities Command is typically the
|
||||
first packet sent in the IPMI session. It returns information
|
||||
on the remote machine's support of:
|
||||
|
||||
A) IPMI 1.5 authentication mechanisms (e.g. md2, md5, etc.)
|
||||
B) IPMI 1.5 and/or IPMI 2.0
|
||||
C) per msg authentication
|
||||
D) K_g status
|
||||
E) null username/non-null username/anonymous logins
|
||||
|
||||
Currently in FreeIPMI, we check each of these values during the
|
||||
session setup to determine if a person can connect to the remote
|
||||
machine later in the protocol:
|
||||
|
||||
A) If the user input an unsupported authentication mechanism, we
|
||||
return an error.
|
||||
|
||||
B) If the user requested IPMI 2.0, but the remote machine doesn't
|
||||
support IPMI 2.0, we return an error.
|
||||
|
||||
C) We determine if per msg authentication should be considered later
|
||||
in the protocol session.
|
||||
|
||||
D) If the user was required/not-required to input a K_g value, we
|
||||
return an error appropriately.
|
||||
|
||||
E) If the user input an unsupported username/password combination, we
|
||||
return an error appropriately.
|
||||
|
||||
There is a question as to what values above, if any, need to be
|
||||
checked and appropriate errors returned to the user. The Get Channel
|
||||
Authentication Capabilities command is often implemented incorrectly
|
||||
by a number of vendors, so that overall benefit of checks has been put
|
||||
in question. The FreeIPMI authors have elected to keep all the checks
|
||||
for the following reasons.
|
||||
|
||||
* 'A' and 'B' should be checked to avoid potential timeouts:
|
||||
|
||||
- Later in the protocol, the password could be sent/hashed
|
||||
incorrectly, leading to a timeout because packets are not accepted by
|
||||
the remote machine.
|
||||
|
||||
- If the remote machine does not support IPMI 2.0, later packets
|
||||
could timeout because the remote machine does not recognize the packet
|
||||
format.
|
||||
|
||||
* 'C''s checks could be skipped as long as per msg authentication was not
|
||||
supported.
|
||||
|
||||
* 'D''s checks could be skipped, because an improper null vs non-null K_g
|
||||
will be caught later during IPMI 2.0 authentication.
|
||||
|
||||
* 'E''s checks are the most complicated. An improper null vs non-null
|
||||
username will be caught later during IPMI 1.5 and IPMI 2.0
|
||||
authentication. An improper null vs non-null password can be caught
|
||||
later during IPMI 2.0 authentication, but may result in a timeout
|
||||
during IPMI 1.5 authentication.
|
||||
|
||||
An argument could also be made that the speed at which an invalid
|
||||
username/password error is returned to a user could also give a
|
||||
malicious user information on the username/password of the remote BMC.
|
||||
|
||||
In the end, the authors have felt the overall positive benefits
|
||||
provided by the checking of these values provides more than the
|
||||
negative implications. Changes in the overall industry implementation
|
||||
could change this viewpoint later.
|
||||
|
||||
4) Configuration tool callback design
|
||||
-------------------------------------
|
||||
|
||||
Ipmi-config is coded with a archicture that reads/writes each
|
||||
configurable field in the BMC separately.
|
||||
|
||||
As an example, suppose we have the following BMC configuration file
|
||||
we'd like to commit.
|
||||
|
||||
FieldA Value1
|
||||
FieldB.1 Value2
|
||||
FieldB.2 Value3
|
||||
FieldB.3 Value4
|
||||
FieldB.4 Value5
|
||||
|
||||
Suppose FieldA is read/written using a single IPMI packet and fields
|
||||
FieldB.1-FieldB.4 can be read/written using a single IPMI packet.
|
||||
|
||||
In the architecture that ipmi-config is currently based on, the above
|
||||
would require 5 read requests to read all 5 values. It would require
|
||||
1 read request for FieldA, 4 read requests for FieldB.1-FieldB.4, and
|
||||
5 write requests to write the values.
|
||||
|
||||
Obviously, this sounds like (and is!) very inefficient.
|
||||
|
||||
The authors acknowledge that the code is very inefficient b/c it will
|
||||
cause an excess number of request/response packets to be generated. With
|
||||
a large number of inputs the Configtools can be slow.
|
||||
|
||||
Here are some of the major reasons why this was done and is still
|
||||
kept.
|
||||
|
||||
A) Due to widely varying IPMI versions and implementations, this
|
||||
handles the write configuration case best. Suppose FieldB.2 is only
|
||||
configurable on IPMI 2.0 systems but not IPMI 1.5 systems. Suppose
|
||||
(perhaps b/c it is optional in the IPMI specification) FieldB.3 is
|
||||
supported by some vendors but not other vendors. Suppose FieldB.4 is
|
||||
simply not implemented correctly by the vendor.
|
||||
|
||||
This architecture allows the majority of the configuration to succeed
|
||||
on a specific platform, and allows the end user to know exactly what
|
||||
fields may or may not be configurable. If all 4 fields of
|
||||
FieldB.1-FieldB.4 were written at the same time, there is currently no
|
||||
method in the IPMI protocol to know what field was configured
|
||||
incorrectly and why (only a generic error of "invalid input" is
|
||||
returned, but you won't know which field it is).
|
||||
|
||||
In the future, functionality could be added to retry each field
|
||||
separately if there was such a failure, however that would add another
|
||||
piece of complexity into the code we currently don't have time to add.
|
||||
In addition, with so many IPMI firmware implementations, it may
|
||||
difficult to add such functionality because of the wide array of error
|
||||
cases that might occur.
|
||||
|
||||
B) There are several (and possibly more future) vendor compliance
|
||||
problems that can be (or will need to be) worked around. By using
|
||||
this architecture, each specific field can be worked around
|
||||
independently depending on the vendor. These workarounds need to be
|
||||
handled on both the read and write conditions.
|
||||
|
||||
One of the major fallouts from this design is that if an
|
||||
invalid/illegal configuration exists on the motherboard by default,
|
||||
some configuration values may not be configurable. For example,
|
||||
suppose we want to write the following config to the BMC.
|
||||
|
||||
FieldA.1 Value1
|
||||
FieldA.2 Value2
|
||||
FieldA.3 Value3
|
||||
FieldA.4 Value4
|
||||
|
||||
The architecture of the config tools will read FieldA.1-FieldA.4 from
|
||||
the BMC, change only FieldA.1, then try to write all the fields back
|
||||
to the BMC. Then it would be repeated for FieldA.2, etc.
|
||||
|
||||
However, suppose the default setting on the motherboard for FieldA.4
|
||||
is illegal. Then each time we attempt to write FieldA.1, FieldA.2,
|
||||
and FieldA.3, an invalid input error will be returned b/c FieldA.4 is
|
||||
illegal. Things cannot change until FieldA.4 is modified.
|
||||
|
||||
In a worse scenario, suppose the default setting on the motherboard is
|
||||
illegal for both FieldA.3 and FieldA.4. That means we will receive an
|
||||
invalid input error for the config of FieldA.1 through FieldA.4.
|
||||
|
||||
Currently, this has been seen a very small minority of systems and
|
||||
work arounds have been added for those systems.
|
||||
|
||||
Another similar fallout from this design is that the vendor must allow
|
||||
"piecemeal" configuration. In other words, the vendor must allow a
|
||||
subset of the fields to perhaps be configured "incorrectly" while the
|
||||
other subset may be configured "correctly". Some vendors require that
|
||||
fields be written "simultaneously", and do not support the ability to
|
||||
alter configuration one by one.
|
||||
|
||||
Again, this has been seen a very small minority of systems and work
|
||||
arounds have been added for those systems.
|
||||
|
||||
5) Dealing with workarounds
|
||||
---------------------------
|
||||
|
||||
There is an admitted conflict in determining whether vendor compliance
|
||||
issues should be handled automatically vs. a specified workaround
|
||||
(e.g. on the commandline or via a flag in a library).
|
||||
|
||||
On one hand, we would like for the tools to operate as simply for the
|
||||
users as possible without the need to specify strange workarounds or
|
||||
options on the command line. For example, we could detect vendor
|
||||
product-IDs early in the protocol, and if necessary for a particular
|
||||
vendor, turn on the workarounds.
|
||||
|
||||
On the other hand, some workarounds cannot be detected properly all of
|
||||
the time. For example, the workaround may exist on one firmware
|
||||
release vs. another firmware release. It may exist between one
|
||||
product of a vendor vs. another product from the vendor. Another
|
||||
example, is that while we can make a pretty decent guess what the
|
||||
vendor intended, ultimately, there's no real way to know if the guess
|
||||
is correct.
|
||||
|
||||
A number of these workarounds are due to vendor compliance problems
|
||||
that are sometimes so intrusive (e.g. using a different hashing
|
||||
algorithm for keys) they must require a workaround on the command line
|
||||
b/c there is really no other way to handle it. However, some could be
|
||||
handled seemlessly, but would require altered behavior to handle the
|
||||
"common case" or "lowest common denominator" of all IPMI protocols.
|
||||
|
||||
The general rule that the FreeIPMI authors have come to is that if the
|
||||
workaround changes some "normal" or "good" behavior, it must require a
|
||||
specified workaround. Although it may/will be annoying to a number of
|
||||
users, I feel it is better for the long term. It can hopefully also
|
||||
pressure vendors into fixing their implementations.
|
||||
|
||||
As an example, on some motherboards, we found that System Event Log
|
||||
(SEL) records reported an invalid sensor generator ID. We found that
|
||||
the reported generator ID was shifted off by one. Thus, as a
|
||||
workround, if a SDR entry cannot be found for a respective system
|
||||
event, we will also search for a SDR entry using the generator ID
|
||||
shifted by one. If the resulting SDR entry is found, we assume the
|
||||
original generator ID was just off by one and we use the located SDR
|
||||
record. This workaround is seemless and doesn't involve an option on
|
||||
the command line.
|
||||
|
||||
In contrast, we found on some other motherboards that some SEL records
|
||||
report an invalid event record type. Unlike the above situation,
|
||||
there is no additional information from this record that can tell us
|
||||
how to parse the record. For the particular motheboard, these illegal
|
||||
SEL records were normal system event records with improperly coded
|
||||
record types. Therefore, we implemented a workaround called
|
||||
"assumesystemevent", which the user can specify to assume a valid
|
||||
system event record no matter what.
|
||||
|
||||
Admittedly, the area is grey, and at some point, it's a judgement call
|
||||
:-)
|
||||
|
||||
6) Dealing with OEM extensions
|
||||
------------------------------
|
||||
|
||||
Similar to the "Dealing with workarounds" question above, there is a
|
||||
similar question of how to deal with OEM extensions. Should code
|
||||
automatically detect the manufacturer and product to determine if OEM
|
||||
extensions can be handled or should be output?
|
||||
|
||||
We would like the tools to operate as simply for the users without
|
||||
specifying options on the command line. However, can we trust that a
|
||||
vendor will implement their extensions consistently across
|
||||
motherboards, products, or even firmware revisions?
|
||||
|
||||
The general decision is that there will be an option for the user to
|
||||
specify if they would like OEM interpreted output if available. Many
|
||||
FreeIPMI tools come with a --interpret-oem-data option for this
|
||||
situation. If a motherboard is specifically supported by FreeIPMI,
|
||||
the user is free to use and trust the OEM support. However, if OEM
|
||||
extensions happen to work for a unlisted motherboard, the user must
|
||||
take the output with some grain of salt.
|
||||
|
||||
|
||||
@@ -0,0 +1,468 @@
|
||||
Using Hostrange Input/Output in HPC environments
|
||||
|
||||
by
|
||||
|
||||
Albert Chu
|
||||
chu11@llnl.gov
|
||||
Last Updated: August 27, 2013
|
||||
|
||||
1) Introduction with Pdsh
|
||||
-------------------------
|
||||
|
||||
Much of the hostrange input/output in FreeIPMI is modeled off the
|
||||
input/output in the tool pdsh (http://pdsh.sourceforge.net). Pdsh is
|
||||
a parallel shell utility which allows you to execute an arbitrary
|
||||
command across a cluster. Algorithmically, pdsh creates a sliding
|
||||
window of threads, each which generates a remote shell using an
|
||||
underlying 'rcmd" functionality (such as rcmd(3) or ssh(1)). As
|
||||
threads complete, the new threads launch the command on other hosts
|
||||
until the command has been executed on all hosts specified.
|
||||
|
||||
It is utilized at Lawrence Livermore National Laboratory (LLNL) on
|
||||
clusters ranging from 4 to 3000 nodes. Commands are capable of being
|
||||
executed across the entire cluster in the matter of seconds rather
|
||||
then minutes it would take to execute serially in a shell prompt.
|
||||
|
||||
Here's an example of pdsh at work on a small cluster.
|
||||
|
||||
> pdsh -w "wopr[0-5]" hostname
|
||||
wopr0: wopr0
|
||||
wopr1: wopr1
|
||||
wopr2: wopr2
|
||||
wopr3: wopr3
|
||||
wopr5: wopr5
|
||||
wopr4: wopr4
|
||||
|
||||
Determining the hostname of every node in your cluster isn't too
|
||||
useful or interesting. However, perhaps you want to determine if
|
||||
every node of your cluster booted with the same kernel.
|
||||
|
||||
> pdsh -w "wopr[0-5]" uname -r
|
||||
wopr1: 2.6.9-65
|
||||
wopr0: 2.6.9-65
|
||||
wopr5: 2.6.9-65
|
||||
wopr2: 2.6.9-65
|
||||
wopr4: 2.6.9-65
|
||||
wopr3: 2.6.9-65
|
||||
|
||||
Seems pretty useful. However, on larger clusters, this type of output
|
||||
will get pretty large, especially if the command generates greater
|
||||
than 1 line of output for each node. Lets say I want to determine if
|
||||
the same config file has been configured on every node of the cluster.
|
||||
|
||||
> pdsh -w "wopr[0-5]" "cat /tmp/pretend_config"
|
||||
wopr1: foo=/usr
|
||||
wopr1: bar=/tmp
|
||||
wopr1: baz=/etc
|
||||
wopr1: xyzzy=static
|
||||
wopr1:
|
||||
wopr0: foo=/usr
|
||||
wopr0: bar=/tmp
|
||||
wopr0: baz=/etc
|
||||
wopr0: xyzzy=static
|
||||
wopr0:
|
||||
wopr2: foo=/usr
|
||||
wopr2: bar=/tmp
|
||||
wopr2: baz=/etc
|
||||
wopr2: xyzzy=dynamic
|
||||
wopr2:
|
||||
wopr4: foo=/usr
|
||||
wopr4: bar=/tmp
|
||||
wopr4: baz=/etc
|
||||
wopr4: xyzzy=static
|
||||
wopr4:
|
||||
wopr5: foo=/usr
|
||||
wopr5: bar=/tmp
|
||||
wopr5: baz=/etc
|
||||
wopr5: xyzzy=static
|
||||
wopr5:
|
||||
wopr3: foo=/usr
|
||||
wopr3: bar=/tmp
|
||||
wopr3: baz=/etc
|
||||
wopr3: xyzzy=static
|
||||
wopr3:
|
||||
|
||||
As you can see, it's beginning to get pretty long and perhaps a bit
|
||||
hard to digest.
|
||||
|
||||
Pdsh also comes with a tool called dshbak for buffering this output to
|
||||
make it more human readable.
|
||||
|
||||
> pdsh -w "wopr[0-5]" "cat /tmp/pretend_config" | dshbak
|
||||
----------------
|
||||
wopr1
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=static
|
||||
|
||||
----------------
|
||||
wopr3
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=static
|
||||
|
||||
----------------
|
||||
wopr5
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=static
|
||||
|
||||
----------------
|
||||
wopr2
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=dynamic
|
||||
|
||||
----------------
|
||||
wopr4
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=static
|
||||
|
||||
This is a much nicer output to read. However, if you have a much
|
||||
larger cluster (or possibly much larger output), this type of output
|
||||
will still be quite difficult to handle. Dshbak also comes with a
|
||||
consolidation function to shorten the output.
|
||||
|
||||
> pdsh -w "wopr[0-5]" "cat /tmp/pretend_config" | dshbak -c
|
||||
----------------
|
||||
wopr[0-1,3-5]
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=static
|
||||
|
||||
----------------
|
||||
wopr2
|
||||
----------------
|
||||
foo=/usr
|
||||
bar=/tmp
|
||||
baz=/etc
|
||||
xyzzy=dynamic
|
||||
|
||||
We see that for this particular pretend cluster config file, one
|
||||
node's configuration is different.
|
||||
|
||||
Another problem that often comes up with large clusters is that nodes
|
||||
are removed from the cluster for servicing or are down due to hardware
|
||||
problems, hangs, crashes, etc. So tools like pdsh can often sit and
|
||||
timeout on those nodes that have problems.
|
||||
|
||||
In the cluster used in this example, wopr6 is a node that is currently
|
||||
down and times out after awhile when you use pdsh.
|
||||
|
||||
> time pdsh -w "wopr[0-6]" hostname
|
||||
wopr0: wopr0
|
||||
wopr1: wopr1
|
||||
wopr4: wopr4
|
||||
wopr2: wopr2
|
||||
wopr5: wopr5
|
||||
wopr3: wopr3
|
||||
pdsh@wopri: wopr6: mcmd: connect failed: No route to host
|
||||
|
||||
real 0m3.007s
|
||||
user 0m0.003s
|
||||
sys 0m0.007s
|
||||
|
||||
However, your average user may not know wopr6 is down, or does not
|
||||
wish to continually remove problem nodes (in this case wopr6) from the
|
||||
list of nodes to communicate with.
|
||||
|
||||
The -v option in pdsh is used to selectively eliminate those nodes
|
||||
that are considered down by whatsup and the libnodeupdown library
|
||||
(http://whatsup.sourceforge.net).
|
||||
|
||||
Whatsup currently shows that wopr6 is down.
|
||||
|
||||
> whatsup
|
||||
up: 7: wopr[0-5],wopri
|
||||
down: 1: wopr6
|
||||
|
||||
So the -v option will have pdsh skip wopr6 automatically.
|
||||
|
||||
> time pdsh -v -w "wopr[0-6]" hostname
|
||||
wopr1: wopr1
|
||||
wopr0: wopr0
|
||||
wopr2: wopr2
|
||||
wopr5: wopr5
|
||||
wopr4: wopr4
|
||||
wopr3: wopr3
|
||||
|
||||
real 0m0.034s
|
||||
user 0m0.005s
|
||||
sys 0m0.012s
|
||||
|
||||
The time differences may not seem like much difference in these
|
||||
examples. But think of when this is done across an extremeley large
|
||||
cluster (i.e. thousands of nodes).
|
||||
|
||||
2) Hostrange input/output in FreeIPMI
|
||||
-------------------------------------
|
||||
|
||||
Much of the hostrange input/output can be handled by running FreeIPMI
|
||||
tools with pdsh. However, pdsh requires that a shell be executed on
|
||||
the remote node. This can disrupt the CPU of running jobs on the
|
||||
cluster and removes the advantage that IPMI over LAN does not
|
||||
interrupt a CPU.
|
||||
|
||||
Hostrange support has been added into most FreeIPMI tools. More than
|
||||
one node at a time can be specified on the command line using the
|
||||
hostrange format similar in pdsh. Using a threaded model similar to
|
||||
pdsh, each of the tools will create a sliding-window of threads, each
|
||||
executing out-of-band IPMI in parallel. The number of threads in the
|
||||
window can be increased or decreased using the fanout -F option.
|
||||
|
||||
The tools now have similar functionality to pdsh, but all of the IPMI
|
||||
communication is done out-of-band. Ipmipower, which supported
|
||||
hostranges since 0.1.0, has had some of its options and output
|
||||
modified to to be consistent with the other tools.
|
||||
|
||||
(Note: On our test cluster, 'pwopr' hostnames have been used instead
|
||||
of 'wopr' for configuring the IPMI IP addresses. We have also XXXed
|
||||
out our local usernames and passwords of course :-)
|
||||
|
||||
For example:
|
||||
|
||||
> ipmi-sensors -h "pwopr[0-5]" -u XXX -p YYY --record-ids=10
|
||||
pwopr0: 10 | CPU3 Vcore | Voltage | 1.31 | V | 'OK'
|
||||
pwopr5: 10 | CPU3 Vcore | Voltage | 1.25 | V | 'OK'
|
||||
pwopr1: 10 | CPU3 Vcore | Voltage | 1.23 | V | 'OK'
|
||||
pwopr3: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
pwopr2: 10 | CPU3 Vcore | Voltage | 1.32 | V | 'OK'
|
||||
pwopr4: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
|
||||
Dshback functionality has been added with the -B (--buffered) and -C
|
||||
(--consolidated) options.
|
||||
|
||||
> bmc-info -h "pwopr[0-5]" -u XXX -p YYY --get-device-id -B
|
||||
----------------
|
||||
pwopr5
|
||||
----------------
|
||||
Device ID : 34
|
||||
Device Revision : 1
|
||||
Device SDRs : unsupported
|
||||
Firmware Revision : 1.0c
|
||||
Device Available : yes (normal operation)
|
||||
IPMI Version : 2.0
|
||||
Sensor Device : supported
|
||||
SDR Repository Device : supported
|
||||
SEL Device : supported
|
||||
FRU Inventory Device : supported
|
||||
IPMB Event Receiver : unsupported
|
||||
IPMB Event Generator : unsupported
|
||||
Bridge : unsupported
|
||||
Chassis Device : supported
|
||||
Manufacturer ID : Peppercon AG (10437)
|
||||
Product ID : 4
|
||||
Auxiliary Firmware Revision Information : 38420000h
|
||||
<snip - there's a lot more of the same stuff>
|
||||
|
||||
> bmc-info -h "pwopr[0-5]" -u XXX -p YYY --get-device-id -C
|
||||
----------------
|
||||
pwopr[0-1,5]
|
||||
----------------
|
||||
Device ID : 34
|
||||
Device Revision : 1
|
||||
Device SDRs : unsupported
|
||||
Firmware Revision : 1.0c
|
||||
Device Available : yes (normal operation)
|
||||
IPMI Version : 2.0
|
||||
Sensor Device : supported
|
||||
SDR Repository Device : supported
|
||||
SEL Device : supported
|
||||
FRU Inventory Device : supported
|
||||
IPMB Event Receiver : unsupported
|
||||
IPMB Event Generator : unsupported
|
||||
Bridge : unsupported
|
||||
Chassis Device : supported
|
||||
Manufacturer ID : Peppercon AG (10437)
|
||||
Product ID : 4
|
||||
Auxiliary Firmware Revision Information : 38420000h
|
||||
<snip - different firmware for pwopr[2-4]>
|
||||
|
||||
If you have happened to install pdsh on your system, you may use
|
||||
dshbak instead of the -B or -C option. The -B and -C options were
|
||||
added since many users may have not installed pdsh.
|
||||
|
||||
A whatsup-like tool and library have also been developed called
|
||||
ipmidetect. It performs a similar functionality to whatsup, but
|
||||
instead detects what IPMI nodes exist in the cluster for faster
|
||||
hostranged output. The tool requires the ipmidetectd daemon be setup
|
||||
and configured on the client (see ipmidetectd(8) and
|
||||
ipmidetectd.conf(5) for more information). The ipmidetectd daemon
|
||||
regularly ipmipings remote nodes. The ipmidetect tool and library
|
||||
will determine detected vs. undetected ipmi systems based on the most
|
||||
recent ipmipings received. [1]
|
||||
|
||||
> /usr/sbin/ipmidetect
|
||||
detected: 6: pwopr[0-5]
|
||||
undetected: 1: pwopr6
|
||||
|
||||
For example, we re-introduce the bad 'pwopr6' node into the hostrange:
|
||||
|
||||
> time ipmi-sensors -h "pwopr[0-6]" -u XXX -p YYY --record-ids=10
|
||||
pwopr5: 10 | CPU3 Vcore | Voltage | 1.25 | V | 'OK'
|
||||
pwopr4: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
pwopr0: 10 | CPU3 Vcore | Voltage | 1.31 | V | 'OK'
|
||||
pwopr3: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
pwopr2: 10 | CPU3 Vcore | Voltage | 1.32 | V | 'OK'
|
||||
pwopr1: 10 | CPU3 Vcore | Voltage | 1.23 | V | 'OK'
|
||||
pwopr6: ipmi_ctx_open_outofband(): Connection timed out
|
||||
real 0m25.000s
|
||||
user 0m0.029s
|
||||
sys 0m0.003s
|
||||
|
||||
Running with the -E option (and assuming ipmidetectd has been setup
|
||||
and is running) the -E option quickly eliminates pwopr6.
|
||||
|
||||
> time ipmi-sensors -h "pwopr[0-6]" -u XXX -p YYY --record-ids=10 -E
|
||||
pwopr0: 10 | CPU3 Vcore | Voltage | 1.31 | V | 'OK'
|
||||
pwopr2: 10 | CPU3 Vcore | Voltage | 1.32 | V | 'OK'
|
||||
pwopr1: 10 | CPU3 Vcore | Voltage | 1.23 | V | 'OK'
|
||||
pwopr4: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
pwopr5: 10 | CPU3 Vcore | Voltage | 1.25 | V | 'OK'
|
||||
pwopr3: 10 | CPU3 Vcore | Voltage | 1.26 | V | 'OK'
|
||||
|
||||
real 0m0.113s
|
||||
user 0m0.030s
|
||||
sys 0m0.003s
|
||||
|
||||
Notice the large affect this has on the time for the command to
|
||||
complete.
|
||||
|
||||
3) Suggested use of hostrange input/output in FreeIPMI
|
||||
------------------------------------------------------
|
||||
|
||||
Unlike pdsh, where you can run an arbitrary shell command, each
|
||||
FreeIPMI tool has a relatively fixed type of output or sets of outputs
|
||||
you can run. Based on the features run or the output of the command,
|
||||
the hostrange input/output will likely be used differently
|
||||
dependending with the tool. The following are some suggestions. They
|
||||
are the ways the author thinks most will use the hostrange
|
||||
input/output.
|
||||
|
||||
ipmi-sensors:
|
||||
|
||||
Each node of the cluster will likely have slightly different
|
||||
temperatures, voltages, etc. Therefore you may wish to run
|
||||
ipmi-sensors with the -q option to make it easier to consolidate
|
||||
output.
|
||||
|
||||
> ipmi-sensors -h "pwopr[0-6]" -u XXX -p YYY -g temperature -E -C -q
|
||||
----------------
|
||||
pwopr[0-2,4-5]
|
||||
----------------
|
||||
4 | CPU1 Temp | Temperature | 'OK'
|
||||
5 | CPU2 Temp | Temperature | 'OK'
|
||||
6 | CPU3 Temp | Temperature | 'OK'
|
||||
7 | CPU4 Temp | Temperature | 'OK'
|
||||
8 | Sys Temp | Temperature | 'OK'
|
||||
----------------
|
||||
pwopr3
|
||||
----------------
|
||||
4 | CPU1 Temp | Temperature | 'OK'
|
||||
5 | CPU2 Temp | Temperature | 'OK'
|
||||
6 | CPU3 Temp | Temperature | 'OK'
|
||||
7 | CPU4 Temp | Temperature | 'OK'
|
||||
8 | Sys Temp | Temperature | 'At or Below (<=) Lower Non-Recoverable Threshold'
|
||||
|
||||
Based on what you see, you can of course dig deeper on those
|
||||
individual nodes. I imagine many users will want to run ipmi-sensors
|
||||
with the default output (each line of output is prepended with
|
||||
"hostname: "). In this mode, key error messages and the node it came
|
||||
from can be easily monitored along w/ grep and awk in scripts.
|
||||
|
||||
The --no-header-output and --ignore-not-available-sensors options may
|
||||
be useful for reducing output across a lot of nodes. The
|
||||
--sdr-cache-recreate option may be useful to gracefully handle errors.
|
||||
|
||||
Users may wish to use the --output-sensor-state option w/ ipmi-sensors
|
||||
to also output the current sensor state. This option will output
|
||||
NOMINAL, WARNING, and CRITICAL states which allow for easy grepping.
|
||||
|
||||
ipmi-sel:
|
||||
|
||||
Each node will likely have drastically different ipmi-sel output and a
|
||||
massive amount of it. Therefore buffered or consolidated output will
|
||||
not be very useful. The hostrange input is most useful for gathering
|
||||
the SEL output of the entire cluster quickly and out-of-band. You can
|
||||
then grep for some type of error condition you are specifically
|
||||
looking for or pipe it into a log monitoring utility.
|
||||
|
||||
The hostrange functionality is also very useful to quickly clear the
|
||||
SEL logs across the entire cluster.
|
||||
|
||||
The --no-header-output option may be useful for reducing output across
|
||||
a lot of nodes. The --sdr-cache-recreate option may be useful to
|
||||
gracefully handle errors.
|
||||
|
||||
Users may wish to use the --output-event-state option w/ ipmi-sel to
|
||||
also output the current sensor state. This option will output
|
||||
NOMINAL, WARNING, and CRITICAL states which allow for easy grepping.
|
||||
|
||||
bmc-info:
|
||||
|
||||
When using hostranges, you are probably trying to verify the firmware
|
||||
version or hardware type for each BMC in your cluster. You probably
|
||||
want to run bmc-info with the consolidated output (-C) set most of the
|
||||
time. System GUIDs are also different between systems, so in order to
|
||||
limit the amount of different output, you may want to run with the
|
||||
--get-device-id option to limit the output.
|
||||
|
||||
ipmi-raw:
|
||||
|
||||
The output of ipmi-raw will likely be only 1 long line. The
|
||||
consolidated output is likely what you're interested in using.
|
||||
|
||||
ipmi-config:
|
||||
|
||||
The typical use is to run w/ --checkout to checkout a configuration,
|
||||
modify that file with new configuration information, then run w/
|
||||
--commit to write the new configuration. I imagine most users will
|
||||
only run with hostrange support with the --commit option to configure
|
||||
multiple machines in parallel. Note that since a significant amount
|
||||
of configuration must be done in-band before out-of-band communication
|
||||
can occur (i.e. configuring IP addresses, MAC addresses), most may
|
||||
elect to not configure a machine out of band at all. The --diff
|
||||
option may be used across many machines to see if a configuration
|
||||
differs on any machine within a cluster.
|
||||
|
||||
4) Exceptions to the hostrange support in FreeIPMI
|
||||
--------------------------------------------------
|
||||
|
||||
The hostrange input/output is not been supported in a few situations.
|
||||
|
||||
o Each BMC in the cluster must be configured with a different IP
|
||||
address and MAC address. So the parallelism that the hostrange input
|
||||
gives you effectively cannot be used when trying to use ipmi-config's
|
||||
--commit option to configure a cluster using one config file.
|
||||
Therefore we prohibit hostranged input when trying to configure these
|
||||
values in ipmi-config.
|
||||
|
||||
o Ipmipower was written with a different architecture than bmc-info,
|
||||
ipmi-sensors, ipmi-sel, etc. because of need for it to interact with
|
||||
Powerman, so it cannot use the parallel stdout libraries developed.
|
||||
It instead emulates the --buffer-output, --consolidate-output, and
|
||||
--fanout functionality of the other tools.
|
||||
|
||||
Additional Notes
|
||||
----------------
|
||||
|
||||
[1] Why doesn't FreeIPMI just use whatsup? Whatsup defines "up" to
|
||||
typically mean that an OS up running healthily. IPMI can operate
|
||||
without the OS running, even when the node is "powered off."
|
||||
Therefore, an alternate tool had to be developed. A plugin for
|
||||
whatsup could have been developed to determine "up vs. down" using
|
||||
IPMI, but the authors of FreeIPMI did not want FreeIPMI to become
|
||||
dependent on whatsup.
|
||||
@@ -0,0 +1,134 @@
|
||||
FreeIPMI Libraries
|
||||
|
||||
by
|
||||
|
||||
Albert Chu
|
||||
chu11@llnl.gov
|
||||
Last Updated: May 18, 2012
|
||||
|
||||
The following is a short summary of the libraries and APIs available for
|
||||
use in FreeIPMI.
|
||||
|
||||
Libfreeipmi
|
||||
-----------
|
||||
|
||||
Libfreeipmi is the primary library that most of the FreeIPMI tools are based
|
||||
upon. The following describe the sub-sections of the library.
|
||||
|
||||
api - The highest level API provided by libfreeipmi. It abstracts
|
||||
away the details of inband and outofband protocols from the user. It
|
||||
also provides useful error codes for the user to easily interpret IPMI
|
||||
problems. 'api' is used by most FreeIPMI tools and libraries, such as
|
||||
bmc-info(8), ipmi-sensors(8), and libipmimonitoring(3).
|
||||
|
||||
cmds - Provides fiid templates and 'fill' functions for IPMI
|
||||
commands. Also provides macros definining common parameters for
|
||||
IPMI commands. The cmds are used by most other portions of
|
||||
libfreeipmi including the 'api' sub-section and tools such as
|
||||
ipmipower(8) and ipmiconsole(8).
|
||||
|
||||
debug - Provides various packet/record dumping utility functions.
|
||||
Utilized by the 'api' subsection and by tools such as ipmipower(8) and
|
||||
ipmiconsole(8).
|
||||
|
||||
driver - Provides APIs for in-band IPMI communication. Currently
|
||||
supported drivers are KCS, SSIF, OpenIPMI, and sunbmc. The 'driver'
|
||||
subsction is used by tools such as bmc-watchdog(8) and the 'api'
|
||||
sub-section.
|
||||
|
||||
fiid - The "FreeIPMI Interface Definition" provides an API used for
|
||||
the construction/deconstruction of packets in libfreeipmi. The API
|
||||
works around fiid-templates, which are then used to create
|
||||
fiid-objects. Fiid-templates are used to describe packets through
|
||||
a string-name to bit-field mapping. The API allows users to
|
||||
read/write fields in an object using the string to bit-field
|
||||
mapping. Marshalling, packing, endian, and various other network
|
||||
issues are handled within 'fiid'. Fiid objects are used throughout
|
||||
libfreeipmi, including the 'api' sub-section, 'cmds' sub-sections,
|
||||
and various tools.
|
||||
|
||||
fru - Provides an API for reading and parsing Field Replaceable Unit
|
||||
(FRU) records. Utilized by tools such as ipmi-fru(8).
|
||||
|
||||
interface - Provides 'assemble' and 'disassemble' functions for
|
||||
building packets for individual in-band or out-of-band protocols.
|
||||
Also provides all necessary fiid templates, 'fill' functions, and
|
||||
other utility functions necessary to communicate on an IPMI
|
||||
interface. Utilized by the 'api' sub-section and tools such as
|
||||
ipmipower(8) and ipmiconsole(8).
|
||||
|
||||
interpret - Provides an API for interpreting sensor or SEL events by
|
||||
mapping them into Nominal, Warning, or Critical states. Utilized by
|
||||
FreeIPMI tools and libraries, such as ipmi-sensors(8), ipmi-sel(8),
|
||||
and libipmimonitoring(3).
|
||||
|
||||
locate - Provides an API to probe several standards to find default
|
||||
values for in-band IPMI communication. Utilized by the 'api'
|
||||
sub-section and the ipmi-locate(8) tool.
|
||||
|
||||
payload - Provides macros, fiid-templates, and information on paylods
|
||||
used in IPMI. Used predominantly by ipmiconsole(8) and other
|
||||
serial-over-LAN (SOL) related code.
|
||||
|
||||
record-format - Provides macros, fiid-templates, and information on
|
||||
records used in IPMI. Utilized by the 'fru' and 'sdr' subsection and
|
||||
tools like ipmi-sensors(8) and ipmi-fru(8).
|
||||
|
||||
sdr - Provides an API for creating, caching, reading, and parsing a
|
||||
sensor data repository (SDR) and the SDR records within it. Utilized
|
||||
by tools such as ipmi-fru(8) and ipmi-sensors(8).
|
||||
|
||||
sel - Provides an API for reading and parsing System Event Log (SEL)
|
||||
entries. Utilized by tools such as ipmi-sel(8).
|
||||
|
||||
sensor-read - Provides an API for reading a sensor. Utilized by tools
|
||||
such as ipmi-sensors(8).
|
||||
|
||||
spec - Provides macros and arrays for various other definitions and
|
||||
tables in IPMI. Utilized by tools such as ipmi-sensors(8).
|
||||
|
||||
util - Provides various utility functions for the calculation of keys,
|
||||
sensor readings, etc. Utilized by most of the rest of FreeIPMI.
|
||||
|
||||
Libipmiconsole
|
||||
--------------
|
||||
|
||||
Libipmiconsole implements a high level serial-over-lan (SOL) API for
|
||||
remote console access. It can be used to establish and manage
|
||||
multiple IPMI 2.0 SOL sessions. The goal of this library is to
|
||||
abstract away all of the underlying IPMI/SOL details away from the
|
||||
user into a relatively simple file descriptor interface.
|
||||
|
||||
Libipmimonitoring
|
||||
-----------------
|
||||
|
||||
Libipmimonitoring implements a high level SEL and sensor monitoring
|
||||
API. An iterator interface is provided that allows the user to
|
||||
iterate through sensor values, groups, units, and states.
|
||||
|
||||
Libipmidetect
|
||||
-------------
|
||||
|
||||
Libipmidetect implements a high level API for determing which nodes in
|
||||
a cluster do or do-not support IPMI. This library is primarily useful
|
||||
for detecting when nodes are removed from a cluster for servicing, so
|
||||
that IPMI applications can avoid unnecessary timeouts. The library
|
||||
interacts with the ipmidetectd(8) daemon.
|
||||
|
||||
pkg-config support
|
||||
------------------
|
||||
|
||||
FreeIPMI provides pkg-config support for all the above libraries.
|
||||
|
||||
You can thus use the standard configure macros:
|
||||
|
||||
PKG_CHECK_MODULES(FREEIPMI, libfreeipmi, HAVE_LIBFREEIPMI="yes", HAVE_LIBFREEIPMI="no")
|
||||
|
||||
Or use direct pkg-config calls:
|
||||
|
||||
CFLAGS += $(shell pkg-config --cflags libfreeipmi)
|
||||
LIBS += $(shell pkg-config --libs libfreeipmi)
|
||||
|
||||
|
||||
For more information, refer to pkg-config documentation:
|
||||
http://www.freedesktop.org/wiki/Software/pkg-config
|
||||
@@ -0,0 +1,227 @@
|
||||
IPMI OEM additions/extensions documentation requirements
|
||||
|
||||
Albert Chu
|
||||
chu11@llnl.gov
|
||||
Last Updated: January 3, 2011
|
||||
|
||||
The following is a list of the common OEM documentation requirements
|
||||
that are needed for full OEM support in FreeIPMI.
|
||||
|
||||
IPMI OEM Command Extensions/Additions
|
||||
-------------------------------------
|
||||
|
||||
IPMI OEM command extensions/additions for setting up, controlling,
|
||||
configuring, monitoring, and managing the system that are not in the
|
||||
IPMI specification. Many times, this is needed to configure hardware
|
||||
or gather information for monitoring, gather information to diagnose
|
||||
problems, etc. Or in more general terms, OEM command
|
||||
extensions/additions necessary to help manage the system.
|
||||
|
||||
Examples include:
|
||||
|
||||
OEM commands for configuring the hardware for IPMI. For example,
|
||||
configuring the ethernet port to be shared or dedicated (ipmi-oem's
|
||||
Inventec's get/set-nic-mode commands are an example of this).
|
||||
|
||||
OEM commands for retrieving motherboard specific information. For
|
||||
example, OEM commands for reading firmware versions (ipmi-oem's
|
||||
Supermicro extra-firmware-info command is an example of this).
|
||||
|
||||
OEM commands for retrieving motherboard specific hardware information
|
||||
necessary for hardware monitoring. For example, retrieving the
|
||||
current health status of hardware (ipmi-oem's Fujitsu
|
||||
get-remote-storage-status command is an example of this).
|
||||
|
||||
OEM commands for resetting configuration back to the manufacturer
|
||||
defaults (ipmi-oem's Dell reset-to-defaults command is an
|
||||
example of this).
|
||||
|
||||
OEM commands for configuring any additional "features" added to IPMI
|
||||
by the vendor. For example, how to configure the ports, timeout,
|
||||
on/off of web server abilities on the BMC (ipmi-oem's Dell
|
||||
get/set-web-server-config commands are an example of this).
|
||||
|
||||
IPMI OEM Parameter Extensions
|
||||
-----------------------------
|
||||
|
||||
IPMI OEM parameter extensions to IPMI for setting up, controlling,
|
||||
configuring, monitoring, and managing the system that are not in the
|
||||
IPMI specification. For example, IPMI parameter extensions for
|
||||
reading service tags via the Get System Info Parameters command or
|
||||
configuring SOL Inactivity Timeouts via the Get/Set SOL Configuration
|
||||
Parameters command (ipmi-oem's Dell get-system-info and
|
||||
get/set-sol-inactivity-timeout commands are examples of this).
|
||||
|
||||
The following is a (likely) incomplete list of IPMI commands OEM
|
||||
parameter extensions may have been added to.
|
||||
|
||||
Get/Set System Info Parameters (22.14a/22.14b)
|
||||
|
||||
Get/Set LAN Configuration Parameters (23.1/23.2)
|
||||
|
||||
Get/Set PEF Configuration Parameters (30.3/30.4)
|
||||
|
||||
Get/Set SOL Configuration Parameters (26.2/26.3)
|
||||
|
||||
Get/Set Serial Modem Configuration Parameters (25.1/25.2)
|
||||
|
||||
Get/Set System Boot Options (28.12/28.13)
|
||||
|
||||
IPMI OEM events offsets and event data
|
||||
--------------------------------------
|
||||
|
||||
IPMI OEM event offsets and event data to read sensors and system event
|
||||
log (SEL) information. The following is a (likely) incomplete list of
|
||||
areas where IPMI OEM extensions may have been added pertaining to
|
||||
event offsets and event data.
|
||||
|
||||
OEM Event Type Codes (see Table 42-1)
|
||||
|
||||
OEM Sensor Types and Offsets and Event Data2/3 information (see Table 42-3)
|
||||
|
||||
OEM Entity IDs (see 43.14)
|
||||
|
||||
OEM System Event Data2 and Data3 information for all possible events (see 29.7)
|
||||
|
||||
IPMI OEM Records
|
||||
----------------
|
||||
|
||||
IPMI OEM records that store motherboard information or motherboard
|
||||
event information. The following is a (likely) incomplete list of
|
||||
areas where IPMI OEM extensions may have been added pertaining to
|
||||
various records.
|
||||
|
||||
OEM SEL Records (32.2 and 32.3)
|
||||
|
||||
OEM SDR Records (43.12)
|
||||
|
||||
OEM FRU Records (see Platform Management FRU Information Storage Definition v1.0)
|
||||
|
||||
IPMI OEM Misc
|
||||
-------------
|
||||
|
||||
The following are miscellaneous IPMI commands or areas that may have
|
||||
OEM options or extensions related to setting up, controlling,
|
||||
configuring, monitoring, and managing the system that are not in the
|
||||
IPMI specification.
|
||||
|
||||
Get Device ID Auxiliary Information (see 20.1)
|
||||
|
||||
DCMI Get/Set Power Limit Exception Actions (See DCMI 6.6.2 and 6.6.3)
|
||||
|
||||
Necessary Documentation Details
|
||||
-------------------------------
|
||||
|
||||
The following is a summary of documentation information detail that is
|
||||
necessary to add OEM extension support into FreeIPMI.
|
||||
|
||||
A)
|
||||
|
||||
Details on the exact bit/hex and field layout of the packet or record
|
||||
should be documented.
|
||||
|
||||
For example, sometimes we are given nothing more than a hex string, e.g.
|
||||
|
||||
"0x21 0x33 0x44 0x00 0x00 0x01"
|
||||
|
||||
and told this will do FOO action. This isn't useful because we don't
|
||||
know what each byte does or what additional options are available.
|
||||
|
||||
A specific packet/record layout similar to what is in the IPMI
|
||||
spec should be documented.
|
||||
|
||||
B)
|
||||
|
||||
Hex to string/flag mapping information in sensors, system event logs,
|
||||
configuration fields, etc. should be documented.
|
||||
|
||||
For example, documentation may list:
|
||||
|
||||
"[0:3] - FOO type"
|
||||
|
||||
OR
|
||||
|
||||
"event data 2 holds the FOO type"
|
||||
|
||||
OR
|
||||
|
||||
"event data 2 - FOO error, see FOO error doc."
|
||||
|
||||
with nothing else.
|
||||
|
||||
Details for how to map hex/masks to strings/flags should be
|
||||
documented. For example, something like:
|
||||
|
||||
0x1 = type 1
|
||||
0x2 = type 2
|
||||
0x3 = type 3
|
||||
|
||||
OR
|
||||
|
||||
0x1 = bitmask condition 1
|
||||
0x2 = bitmask condition 2
|
||||
0x4 = bitmask condition 3
|
||||
|
||||
OR
|
||||
|
||||
0x80 = error message 1
|
||||
0x81 = error message 2
|
||||
0x82 = error message 3
|
||||
|
||||
C)
|
||||
|
||||
Enough detail should be documented to calculate, determine, handle
|
||||
errors, etc. of various packet or record fields. This is especially
|
||||
true when bitmasks, bit shifts, bit manipulation, multipliers,
|
||||
etc. are involved.
|
||||
|
||||
For example, we may be given a code snippet such as:
|
||||
|
||||
if (event_data2 & 0xF)
|
||||
printf("DIMM bank %d\n", event_data3);
|
||||
|
||||
In the example above, there is a fair amount of detail missing:
|
||||
|
||||
- How do you print DIMM information if "event_data2 & 0xF" isn't true?
|
||||
|
||||
- Or is it an error condition? If so what error conditions are
|
||||
possible?
|
||||
|
||||
- It seems that event_data2 holds a bitmask, what other bitmask
|
||||
conditions are possible?
|
||||
|
||||
D)
|
||||
|
||||
The units of packet or record fields should always be documented.
|
||||
|
||||
E)
|
||||
|
||||
The endian of multibyte fields should always be documented.
|
||||
|
||||
F)
|
||||
|
||||
Configuration fields should be documented as read only, write only, or
|
||||
read/write.
|
||||
|
||||
G)
|
||||
|
||||
Details for mapping between technical information and "real life"
|
||||
information should be documented.
|
||||
|
||||
For example, documents may show how to map DIMM locations into DIMM 0,
|
||||
DIMM 1, DIMM2, DIMM 3, etc. However, no algorithm for mapping this
|
||||
into information physically printed on the motherboard (e.g. DIMM A1,
|
||||
DIMM A2, DIMM B1, DIMM B2) is not given. Without it, the information
|
||||
is of very little use to those using FreeIPMI to diagnose problems.
|
||||
|
||||
Other Notes
|
||||
-----------
|
||||
|
||||
While it is possible that code would be sufficient documentation of
|
||||
the above, it is typically not sufficient. Code often implements a
|
||||
subset of the actual data/information for the needs of the particular
|
||||
software. For example, outputting only the information the software
|
||||
deems "useful" and ignoring the rest. Code is often not documented
|
||||
at a level that is sufficient as real documentation. In order to
|
||||
convert the code into code necessary for another project may require
|
||||
reverse engineering or guesses.
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user