<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:25:21 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-2456] Dynamic LNet Config Main Development Work</title>
                <link>https://jira.whamcloud.com/browse/LU-2456</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;This ticket has been created to track the main development work for the Dynamic LNet Config project.&lt;/p&gt;</description>
                <environment></environment>
        <key id="15616">LU-2456</key>
            <summary>Dynamic LNet Config Main Development Work</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="ashehata">Amir Shehata</assignee>
                                    <reporter username="doug">Doug Oucharek</reporter>
                        <labels>
                    </labels>
                <created>Tue, 28 Aug 2012 13:39:26 +0000</created>
                <updated>Mon, 29 May 2017 03:16:56 +0000</updated>
                            <resolved>Tue, 10 Mar 2015 13:36:21 +0000</resolved>
                                    <version>Lustre 2.6.0</version>
                                    <fixVersion>Lustre 2.7.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>20</watches>
                                                                            <comments>
                            <comment id="43904" author="doug" created="Tue, 28 Aug 2012 18:06:43 +0000"  >&lt;p&gt;Project development timeline&lt;/p&gt;</comment>
                            <comment id="43908" author="doug" created="Tue, 28 Aug 2012 18:20:37 +0000"  >&lt;p&gt;I&apos;ve attached a PDF of a timeline I have projected for the development work for this project.  It was done with the following criteria:&lt;/p&gt;

&lt;p&gt;1- One developer is working on the project (me).&lt;br/&gt;
2- Only 80% of my time is included.  I&apos;m assuming 20% time on other Jira bugs, etc.&lt;br/&gt;
3- I rounded each line item off to the nearest week.&lt;br/&gt;
4- Each line item will be a separate code patch requiring inspections.&lt;br/&gt;
5- Time has not been allocated for correcting patches based on inspection feedback.&lt;br/&gt;
6- Time has not been allocated for other potential project demands such as FastForward.&lt;/p&gt;</comment>
                            <comment id="49173" author="doug" created="Wed, 12 Dec 2012 21:24:56 +0000"  >&lt;p&gt;The first of 5 patches is in Gerrit: &lt;a href=&quot;http://review.whamcloud.com/#change,4793&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#change,4793&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="49468" author="doug" created="Wed, 19 Dec 2012 18:46:48 +0000"  >&lt;p&gt;The second of 5 patches in Gerrit: &lt;a href=&quot;http://review.whamcloud.com/#change,4872&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#change,4872&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="49472" author="doug" created="Wed, 19 Dec 2012 20:37:17 +0000"  >&lt;p&gt;3rd patch (route_buffer support) in Gerrit: &lt;a href=&quot;http://review.whamcloud.com/#change,4874&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#change,4874&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="50306" author="doug" created="Thu, 10 Jan 2013 19:58:10 +0000"  >&lt;p&gt;4th patch (net support) in Gerrit: &lt;a href=&quot;http://review.whamcloud.com/#change,4994&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#change,4994&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="68667" author="ashehata" created="Wed, 9 Oct 2013 15:43:45 +0000"  >&lt;p&gt;Previous patches are no longer applicable.  I&apos;m in the process of adding new patches.&lt;/p&gt;</comment>
                            <comment id="71933" author="morrone" created="Tue, 19 Nov 2013 23:03:30 +0000"  >&lt;p&gt;In patch &lt;a href=&quot;http://review.whamcloud.com/#/c/8024/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;8024&lt;/a&gt;, Doug said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I&apos;m all for retrieving a src.rpm file during the build, but am not sure the package manager is the right way to go for 3 reasons:&lt;/p&gt;

&lt;p&gt;1- My understanding is many sites don&apos;t have direct access to the internet so how can the interaction with a package manager be integrated seamlessly into a build system? If you have to carry files to a system on a USB key, I fail to see where the package manager buys you anything.&lt;/p&gt;

&lt;p&gt;2- This goes against the open source freedom ideology, but I don&apos;t feel a product as complex, and critical, as Lustre should use a package manager to grab code which is not &quot;exactly&quot; the same as we tested with in-house. I know you can specify version numbers to a package manager, but it seems better overall to just get a src.rpm with all the other build stuff that has been used in all pre-release testing.&lt;/p&gt;

&lt;p&gt;3- Is there a universal package manager available for all the distro&apos;s using Lustre today (does everything support &quot;yum&quot;)? What about customers who might be rolling their own vanilla kernel like Fujitsu does?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Doug, yes, the conversation and examples were mostly about the rpm packaging path, but they should not be intrepretted as requiring rpm.  When building rpms, the methods I described should be used.  When rpm packaging is not the end goal, folks should be able to build lustre at the command line as they choose.  I fully support that.&lt;/p&gt;

&lt;p&gt;There are is a standard autotools mechanisms for building against external packages.  See this section of the autoconf manual:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gnu.org/software/autoconf/manual/autoconf.html#External-Software&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://www.gnu.org/software/autoconf/manual/autoconf.html#External-Software&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You guys should add  &quot;AC_ARGS_WITH(&lt;span class=&quot;error&quot;&gt;&amp;#91;libyaml&amp;#93;&lt;/span&gt;&quot; handling to Lustre&apos;s build system.  Then users can either:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Install libyaml in system-standard locations and standard paths (be it through &quot;make install&quot; under the libyaml build tree, or by installing an rpm, or by isntalling a dpkg package, or whatever method they choose).  They should not need to specify --with-libyaml=&amp;lt;PATH&amp;gt; in this case.&lt;/li&gt;
	&lt;li&gt;They build libyaml in their home directory or some other nostandard location that does not appear in known compiler and linker paths.  They will have to add &quot;--with-libyaml=/path/to/my/fine/libyaml/directory&quot; at lustre&apos;s configure time.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;This stuff is absolutely simple and standard in the open source software world.  Please embrace it. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="71936" author="ashehata" created="Wed, 20 Nov 2013 02:56:12 +0000"  >&lt;p&gt;November 19th, 2013 &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Attached Feature Test Plan (DLC_FTP.docx)&lt;/li&gt;
	&lt;li&gt;Code Patches are now available&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8020&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8020&lt;/a&gt;&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8021&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8021&lt;/a&gt;&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8022&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8022&lt;/a&gt;&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8023&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8023&lt;/a&gt;&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8025&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8025&lt;/a&gt;&lt;br/&gt;
     &lt;a href=&quot;http://review.whamcloud.com/8026&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Documentation patch:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/8263&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8263&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="71940" author="morrone" created="Wed, 20 Nov 2013 08:31:44 +0000"  >&lt;p&gt;I think it would be helpful if someone could explain the general plan for all of the new libraries being introduced to the lustre install by this work.  For instance, why do we want to see:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;libcYAML
liblustreconfigapi
libauto_complete
liblustre_cfg_cmds
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Without looking into the code too closely, my naive thought is that what we really want is:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;liblnet
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Just one clearly named library.  Do we really need four new libraries, at least two of which aren&apos;t even very clearly lustre related (from their names)?  None of the names identify them as related to lnet configuration.&lt;/p&gt;

&lt;p&gt;I would also suggest that any new libraries that we introduce need to be properly versioned.  That has been sorely lacking in lustre.  Using libtool would simplify the make files and provide the options to correctly version the libraries.&lt;/p&gt;</comment>
                            <comment id="71973" author="ashehata" created="Wed, 20 Nov 2013 18:03:20 +0000"  >&lt;p&gt;&lt;b&gt;liblustreconfigapi:&lt;/b&gt;&lt;br/&gt;
This library introduces a C-API which abstracts away the interaction with the kernel.  Underneath the sheets this API calls ioctl to communicate with the kernel and do the actual work.  It introduces two sets of APIs:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;APIs to configure/delete/show routes, networks, buffers&lt;/li&gt;
	&lt;li&gt;APIs that take a YAML file describing the entities that need to be operated on.  These YAML blocks are parsed &lt;b&gt;in user space&lt;/b&gt; and then the first set of APIs are called appropriately.&lt;/li&gt;
	&lt;li&gt;The design intent is to give tools such as IML (which is python based) an easy way to configure multiple entities, by the use of a YAML text file&lt;/li&gt;
	&lt;li&gt;The YAML file can also be used to configure multiple nodes&lt;/li&gt;
	&lt;li&gt;EX: a node is configured, then you can issue a show configuration command, to dump a YAML representation of the configuration, then take that YAML file and use it to configure newly provisioned nodes or other nodes in the system.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;b&gt;libcYAML&lt;/b&gt;&lt;br/&gt;
This library is needed to wrap the libyaml library.  The 3rd party libyaml library, provides a YAML stream parsing.  Meaning as it parses the YAML file it reports events.  What I do is take these events and build and internal representation of the YAML text file.  This internal representation is then passed as parameters between functions and used as out parameters for show APIs and error blocks&lt;/p&gt;

&lt;p&gt;&lt;b&gt;libauto_complete&lt;/b&gt;&lt;br/&gt;
Is a new library for the configuration utility introduced.  This library provides a way to do CLI auto-completion based on the commands described in a YAML file.  The idea is that you&apos;re able to reuse this same library for any CLI utility in the future, without having to modify the infrastructure.  All you&apos;ll need to do is provide a YAML file describing the CLI commands and the action function names that need to be called whenever a command is matched.  The library will be able to parse the YAML file describing the commands using the libyaml and libcYAML as described above, and read the commands being typed in, perform auto completion if desired by user (hitting the tab or &apos;?&apos; keys), then once a command is matched and the level of matching in the YAML description file defines a function to be called, the library calls it.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;liblustre_cfg_cmds&lt;/b&gt;&lt;br/&gt;
Is the library which defines the action functions to be called when a command is matched by the libauto_complete library.  Multiple of these libraries can be created for different CLIs and the underlying infrastructure need not to be changed.&lt;/p&gt;

&lt;p&gt;Please note that the design intention is not to restrict DLC to only LNET parameters, but to allow the expansion to configuring other Lustre parameters in the future (if the use case arises).  That&apos;s why I don&apos;t use the term LNET explicitly when I&apos;m naming libraries, since under this design, the same libraries can be expanded to include APIs to configure Lustre parameter.&lt;/p&gt;

&lt;p&gt;Also all this is explained in greater detail in the user documentation:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/8263&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8263&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for appropriately versioning the libraries, I was simply following the way the rest of the lustre libraries are being built.  I will need to look at how libtool can be used.&lt;/p&gt;</comment>
                            <comment id="71979" author="morrone" created="Wed, 20 Nov 2013 18:54:02 +0000"  >&lt;p&gt;From that description, it sounds like libauto_complete, libcYAML, and possibly liblustre_cfg_cmds libraries are internal implementation details of the lustre tools, and not appropriate for installation system-wide for users.  Perhaps you want what the GNU tools call &quot;convenience&quot; libraries:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gnu.org/software/automake/manual/html_node/Libtool-Convenience-Libraries.html&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://www.gnu.org/software/automake/manual/html_node/Libtool-Convenience-Libraries.html&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Also all this is explained in greater detail in the user documentation:&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/8263&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/8263&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I will try to provide more review details in the documentation patch, but I may not get to it before some time next week.  But some high level comments here:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;I think you might have the wrong target audience in mind for this documentation.  The graphic that you include should be removed.  It mentions things like Chroma - a code name that is not used publically any longer, and is also Intel proprietary software, so not really appropriate for the manual that covers the open source lustre tree.  It doesn&apos;t really provide any useful information to system administrators, and that is your target audience for this chapter.&lt;/li&gt;
	&lt;li&gt;Details about internal implementation of the library functions are not appropriate for the operation manual.&lt;/li&gt;
	&lt;li&gt;This should not discuss the &quot;dynamic lnet configuration project&quot;.  The project will soon enough be in the past.  The commands that users will use are the focus.  As such, this new code should &lt;em&gt;start&lt;/em&gt; the lnet configuration section, not appear at the end, and simply be called &quot;LNet Configuration&quot;.&lt;/li&gt;
	&lt;li&gt;The &lt;em&gt;first&lt;/em&gt; thing you need to talk about is how to use the user-space commands to configure lnet.  In fact, I don&apos;t think that &lt;em&gt;any&lt;/em&gt; talk of APIs is appropriate for &quot;Configuring Lustre Networking (LNET)&quot; chapter of the book.  Move the APIs to much later in the book.  You could have a one-line note of the form &quot;see chapter X for APIs details&quot; that links to the appropriate API chapter.&lt;/li&gt;
&lt;/ul&gt;


&lt;blockquote&gt;&lt;p&gt;As for appropriately versioning the libraries, I was simply following the way the rest of the lustre libraries are being built. I will need to look at how libtool can be used.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That is understandable.  Unfortunately, Lustre has a great deal of technical debt that we do not wish to perpetuate in new code.&lt;/p&gt;</comment>
                            <comment id="71983" author="morrone" created="Wed, 20 Nov 2013 19:25:50 +0000"  >&lt;p&gt;Additionally, I think that the &quot;liblustreconfigapi&quot; name should be changed.  This is specifically about configuring &lt;em&gt;lnet&lt;/em&gt;, not &lt;em&gt;lustre&lt;/em&gt;.  Giving the library that name will confuse users and system administrators.&lt;/p&gt;</comment>
                            <comment id="71985" author="ashehata" created="Wed, 20 Nov 2013 19:44:51 +0000"  >&lt;p&gt;Thanks for the documentation feedback, I&apos;ll work on another revision of the patch.&lt;/p&gt;

&lt;p&gt;With regards to the libraries, I don&apos;t see them as convenience libraries.  These are libraries which are required for both the new configuration tool and the LNET Configuration C-API, and they will need to be installed along with the standard Lustre installation.  &lt;/p&gt;

&lt;p&gt;The libcYAML has to be separate... since it&apos;s potentially used by multiple binaries.  Integrating it in the C-API or the configuration tool would mean code replication&lt;/p&gt;

&lt;p&gt;The auto_complete library is infrastructure library.  The intent is for it to be used by any future configuration utilities.  As it currently stands the new configuration tool is the only one utilizing it, so I can possibly make it as part of the binary (which in earlier iterations of the code it was), however, it is good design to create it as a separate infrastructure entity, so the potential for its reuse is obvious..&lt;/p&gt;</comment>
                            <comment id="71986" author="ashehata" created="Wed, 20 Nov 2013 19:48:37 +0000"  >&lt;p&gt;As I mentioned the intent is for the possibility of extending the liblustreconfigapi to contain also lustre configuration.  Making the name change will force us to create a different library, if and when this happens.  I&apos;ll discuss internally and see which approach we want to take going forward.&lt;/p&gt;</comment>
                            <comment id="71994" author="morrone" created="Wed, 20 Nov 2013 20:42:00 +0000"  >&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;With regards to the libraries, I don&apos;t see them as convenience libraries. These are libraries which are required for both the new configuration tool and the LNET Configuration C-API, and they will need to be installed along with the standard Lustre installation.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You may be misinterpreting the term &quot;convenience library&quot;.  It doesn&apos;t mean that the code is unimportant.  It simply means that the library only exists within the confines of the build tree, and is a &quot;convenience&quot; to the software developers in that they can refer to a group of object files by a single name to use the code.&lt;/p&gt;

&lt;p&gt;The configuration tool and the &quot;LNET Configuration C-API&quot; are both things that are developed internal to the Lustre tree.  Unless we have a very clear use case for applications external to lustre that need to use these internal libraries, they definitely do not belong in /usr/lib.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;As I mentioned the intent is for the possibility of extending the liblustreconfigapi to contain also lustre configuration.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I don&apos;t remember that being a stated goal of this project.  Did I miss that?  Does the design document explain how that would be done?  I thought that the goal of this project was to make configuring lnet more like you configure other networks on Linux systems.  To make the networking configuration cleaner, more like sysadmins are used to, and dynamic.&lt;/p&gt;

&lt;p&gt;I&apos;m rather uneasy about that goal of configuring lnet and lustre from one unified interface.  We have long kept a clean separation between lnet and the rest of lustre, and we need to be very careful about throwing that away.  I for one would prefer that we keep lnet and lustre configuration separate.&lt;/p&gt;

&lt;p&gt;At LLNL, we even have two separate and distinct init files, one for starting lnet, and another for starting lustre servers.&lt;/p&gt;</comment>
                            <comment id="72000" author="ashehata" created="Wed, 20 Nov 2013 21:28:59 +0000"  >&lt;p&gt;The new configuration tool, like lctl will be in /usr/sbin.  The tool needs to link against these libraries.  Also let&apos;s say a 3rd party tool is developed to configure LNET, such as IML, it will need to link against the LNET Configuration Library which will pull in the libcYAML, as an example.  From my reading on Convenience Library: &lt;a href=&quot;http://www.sourceware.org/autobook/autobook/autobook_74.html#SEC74&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://www.sourceware.org/autobook/autobook/autobook_74.html#SEC74&lt;/a&gt;&lt;br/&gt;
These are entities which are neither a library nor an executable, but will subsequently need to be linked into either in order for it to be useful.  this means to me that when convenience library get linked, they become part of the entity they are linked against.  Instead of specifying a bunch of .o files in your gcc command you just specify that name of the convenience library and then that gets expanded into the .o files.  This is not the intention of these libraries.  They are intended to be standalone shared libraries, which will linked dynamically against an executable. &lt;/p&gt;

&lt;p&gt;The other concern I understand is you&apos;re saying that since they do not have a use outside of lustre, then they shouldn&apos;t be in /usr/lib.  Where would they be?  For example both liblustre and liblustreapi are in /usr/lib64, and both of these libraries are intended for use in lustre only.  Can you please clarify this point.&lt;/p&gt;</comment>
                            <comment id="72003" author="rread" created="Wed, 20 Nov 2013 23:04:39 +0000"  >&lt;p&gt;These look like interesting libraries and they might potential for reuse, but I think most users would be quite surprised to see the lustre package install seemingly extraneous utility libraries into /usr/lib.  If these libraries are indeed more generally useful, then the proper thing to do is move them to their own project and publish them as a standalone package. For now, though, I suggest just linking these libraries into the one tool that is using them (as already suggested), and we can consider whether or not we publish them as standalone libraries independently of this discussion. &lt;/p&gt;

&lt;p&gt;Next time, just write the CLI in Python. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="72004" author="ashehata" created="Wed, 20 Nov 2013 23:08:27 +0000"  >&lt;p&gt;after discussing it with Robert, I more fully understand the reasons for not installing these libraries in /usr/lib.  I&apos;ll change it to eliminate the installation of these libraries.  However, as liblustreconfigapi is intended to be used externally, same as liblustre and liblustreapi, it will still be installed as it is now.  However, I see your point about separation between lustre and lnet and will make the appropriate changes.&lt;/p&gt;</comment>
                            <comment id="72005" author="doug" created="Wed, 20 Nov 2013 23:17:38 +0000"  >&lt;p&gt;The consideration I want to add is the need for the new API libraries to be LGPL rather than GPL.  Third party applications which are not GPL&apos;ed cannot use these libraries if they have to be GPL.  If the way these libraries are built into our existing binaries dictate they be GPL, then that won&apos;t work.&lt;/p&gt;</comment>
                            <comment id="72008" author="rread" created="Wed, 20 Nov 2013 23:40:21 +0000"  >&lt;p&gt;Just a nit, but would you mind dropping the &quot;api&quot; from then name of that library?  It&apos;s a bit like saying &quot;PIN number&quot;&lt;/p&gt;</comment>
                            <comment id="72018" author="rread" created="Thu, 21 Nov 2013 00:40:14 +0000"  >&lt;p&gt;+1 for LGPL. There is already a precedent for this as the new HSM library functions were helpfully added by CEA as LGPL.  (Though they are distributed in liblustreapi, with is of course mostly GPL. d&apos;oh!)&lt;/p&gt;</comment>
                            <comment id="72021" author="morrone" created="Thu, 21 Nov 2013 01:33:13 +0000"  >&lt;blockquote&gt;&lt;p&gt;after discussing it with Robert, I more fully understand the reasons for not installing these libraries in /usr/lib. I&apos;ll change it to eliminate the installation of these libraries. However, as liblustreconfigapi is intended to be used externally, same as liblustre and liblustreapi, it will still be installed as it is now.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Awesome!  I&apos;m glad we are on the same page.  I do understand that liblustreconfigapi should be public, which is why I only listed the other three as a problem.  My only issue with liblustreconfigapi was the name.  Robert makes a good point about dropping &quot;api&quot; from the name as well.  We did that for &quot;liblustreapi&quot;, but it did feel dirty when I did it.  The rationale was that &quot;liblustre&quot; name was already taken in the lustre world.  So you can add liblustreapi to your list of lustre counter-examples. &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                            <comment id="72161" author="ashehata" created="Fri, 22 Nov 2013 18:59:18 +0000"  >&lt;p&gt;After getting feedback from Andreas, Robert and Chris, I believe the best way to move forward, is to make the LNET configuration utility use the existing lctl infrastructure.  This will naturally eliminate all libraries except for the LNET C Configuration API (the LGPL library).  The utility will be a thin layer, which parses commands line input and directly call into the LNET C Configuration API, without doing any error checking, since all error checking is localized in the library.&lt;/p&gt;

&lt;p&gt;Additionally, I&apos;ll move the LNET C Configuration API Library and the LNET configuration utility into the lnet/utils directory, to maintain a strict separation between LNET and Lustre. &lt;/p&gt;

&lt;p&gt;Let me know if this plans sounds good to everyone.&lt;/p&gt;</comment>
                            <comment id="72172" author="rread" created="Fri, 22 Nov 2013 23:02:54 +0000"  >&lt;p&gt;That&apos;s disappointing since lctl is hardly a shining example of CLI design, and it looked like you had some good ideas that would could have used to upgrade the rest of of our tools.  However, it&apos;s your call. There&apos;s always python...&lt;/p&gt;

&lt;p&gt;BTW, I think having error checking in the library is fine just as long as the library is only returning error codes to the caller and &lt;b&gt;not&lt;/b&gt; printing any error messages itself. &lt;/p&gt;</comment>
                            <comment id="72270" author="morrone" created="Mon, 25 Nov 2013 22:23:28 +0000"  >&lt;blockquote&gt;&lt;p&gt;After getting feedback from Andreas, Robert and Chris, I believe the best way to move forward, is to make the LNET configuration utility use the existing lctl infrastructure.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Actually, I&apos;m not sure that I am in favor of that at all.  Right now lnet is pretty much a stand-alone component.  lustre has dependencies on lnet, but lnet does not depend on lustre.  If you make lnet&apos;s configuration reliant on lctl, you introduce a new dependency from lnet on lustre.&lt;/p&gt;

&lt;p&gt;I think we would like to maintain the clear separation of code and tools between lnet and lustre.&lt;/p&gt;</comment>
                            <comment id="72273" author="rread" created="Mon, 25 Nov 2013 22:50:38 +0000"  >&lt;p&gt;The core command line Parser code is actually in libcfs, and is already being used by tools in lnet/utils so this is at least not adding any new dependencies. &lt;/p&gt;</comment>
                            <comment id="72637" author="morrone" created="Mon, 2 Dec 2013 19:20:54 +0000"  >&lt;p&gt;OK, granted.&lt;/p&gt;

&lt;p&gt;Still, I am not not in favor of adding this to lctl.  I would like to see it as a separate command under the lnet subdirectory somewhere (lnet/utils, for instance).&lt;/p&gt;</comment>
                            <comment id="72648" author="rread" created="Mon, 2 Dec 2013 21:04:50 +0000"  >&lt;p&gt;Agreed, and I believe Amir does intend to create a new config utility in lnet. The difference is he now plans to use the same cli parser library that lctl uses, instead of using the new one he originally wrote for DLC. &lt;/p&gt;
</comment>
                            <comment id="72705" author="ashehata" created="Tue, 3 Dec 2013 16:31:37 +0000"  >&lt;p&gt;That is correct.  I&apos;m almost done my updates to the DLC patches.&lt;/p&gt;</comment>
                            <comment id="73505" author="morrone" created="Fri, 13 Dec 2013 19:59:47 +0000"  >&lt;p&gt;I would like to argue again for seeing an updated DLC design document attached to this ticket (or in confluence or something).&lt;/p&gt;

&lt;p&gt;One thing I&apos;m realizing is that I&apos;m not particularly in favor of the command line design.  The design currently looks something like this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;lnetcfg {add|del|show} OBJECT [options]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I think that is fundamentally backwards.  Instead, we should take inspiration from the linux &quot;ip&quot; command, and other commands like git.  The basic model should be:&lt;/p&gt;

&lt;p&gt;So for instance the first line of the ip command&apos;s man page synopsis shows this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;ip [ OPTIONS ] OBJECT { COMMAND | help }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is the style that I think we want to emulate for the new command.  So some examples might be:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;lnetctl network add o2ib0 dev ib0
lnetctl route add o2ib9 routers 192.168.121.[160-163]@o2ib2
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If there are global variables that we want to set, it is reasonable to use global get/set commands.  For instance:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;lnetctl set small_buffers 1000
lnetctl set medium_buffers 1000
lnetctl set large_buffers 1000
lnetctl set routing 1
lnetctl set routing 0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For handling yaml files, I think the original plan is kind of ugly:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;lnetctl add file --name &amp;lt;yaml file name&amp;gt;
lnetctl del file --name &amp;lt;yaml file name&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can&apos;t even really wrap my head around how the &quot;del file&quot; behavior would even work.  For instance if I have this section in my yaml file:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;buffer:
        enable: 0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and then I feed it &quot;del file&quot;, do I wind up with routing enabled?  If I have this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;buffer:
        tiny: 2000
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What does &quot;del file&quot; do???  If I can&apos;t figure this out, there is no way that a sysadmin will.&lt;/p&gt;

&lt;p&gt;And &quot;buffer&quot; is the wrong name for that yaml section as well.  But I digress.&lt;/p&gt;

&lt;p&gt;A better command line for this might look like:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;lnetctl import &amp;lt; myfinefile.yaml
lnetctl import myfinefile.yaml
lnetctl export &amp;gt; backupsettings.yaml
lnetctl export backupsettings.yaml
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
</comment>
                            <comment id="73532" author="ashehata" created="Sat, 14 Dec 2013 02:32:11 +0000"  >&lt;p&gt;The CLI&lt;/p&gt;

&lt;p&gt;lnetctl &amp;lt;cmd&amp;gt; &amp;lt;entity&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;parameters&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;except that we use optional parameters to pass in the different parameters.  The decision is to get away from positional parameters.&lt;/p&gt;

&lt;p&gt;ex:&lt;/p&gt;

&lt;p&gt;add route --net tcp0 --gateway 10.1.1.2@tcp1 --hop 1 --priority 0&lt;/p&gt;

&lt;p&gt;Also please note that the examples you gave above are not consistent form.  In some cases you have &lt;/p&gt;

&lt;p&gt;lnetctl &amp;lt;command&amp;gt; &amp;lt;object&amp;gt;&lt;br/&gt;
ex: lnetctl set small_buffers 1000&lt;/p&gt;

&lt;p&gt;and in other cases you have&lt;/p&gt;

&lt;p&gt;lnetctl OBJECT COMMAND&lt;br/&gt;
ex: lnetctl network add o2ib0 dev ib0&lt;/p&gt;

&lt;p&gt;In my opinion, I think a consistent form makes it easier to get more familiar with the command line.&lt;/p&gt;

&lt;p&gt;I agree that &quot;del file&quot; with regards to enabling/disabling routing might be confusing.  Here is my suggestion.&lt;/p&gt;

&lt;p&gt;To reset all router buffers to default values the yaml file that you feed to the del command would look like:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;buffer&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you add other parameters under buffer they will be ignored.  For example:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;buffer:&lt;br/&gt;
     tiny: 2000&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;it&apos;ll still reset the buffer to the default values.&lt;/p&gt;

&lt;p&gt;To disable routing the yaml file would include:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;routing&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This way you can take the exact same YAML file feed it to any of the commands and they will get processed correctly.  Parameters that are meaningless to the command are ignored.&lt;/p&gt;

&lt;p&gt;With your suggestion:&lt;br/&gt;
lnetctl import myfinefile.yaml&lt;/p&gt;

&lt;p&gt;What operations do we do on myfinefile.yaml?  What is contained in the yaml file?&lt;/p&gt;

&lt;p&gt;That&apos;s why you explicitly tell the utility what to do on the yaml file (add, del or show)&lt;/p&gt;</comment>
                            <comment id="73533" author="ashehata" created="Sat, 14 Dec 2013 02:37:06 +0000"  >&lt;p&gt;User Documentation as exported from the internal Wiki&lt;/p&gt;</comment>
                            <comment id="73534" author="ashehata" created="Sat, 14 Dec 2013 02:55:11 +0000"  >&lt;p&gt;I have a recommendation.  I&apos;m finding that progressing on the project with this form of communication is inefficient.  Would you agree for a skype/phone meeting, where we can hash out the different points of view.  I would say that we can call a meeting with yourself, Doug Oucharek, Andreas and myself.  Does that sound like a reasonable plan?&lt;/p&gt;
</comment>
                            <comment id="73602" author="morrone" created="Mon, 16 Dec 2013 18:15:59 +0000"  >&lt;p&gt;I&apos;m up for a call.  I am free after 3:30 PST today, or most of the day tomorrow.&lt;/p&gt;</comment>
                            <comment id="80273" author="liang" created="Wed, 26 Mar 2014 02:31:25 +0000"  >&lt;p&gt;comments for DLC patch &lt;a href=&quot;http://review.whamcloud.com/#/c/9785/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9785/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="81489" author="liang" created="Sat, 12 Apr 2014 19:17:55 +0000"  >&lt;p&gt;suggestions about dlc APIs based on discussion in Miami&lt;/p&gt;</comment>
                            <comment id="83985" author="simmonsja" created="Tue, 13 May 2014 14:12:54 +0000"  >&lt;p&gt;&lt;a href=&quot;http://review.whamcloud.com/#/c/9830&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9830&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/9831&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9831&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/9832&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/9832&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://review.whamcloud.com/#/c/8021&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8021&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8022&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8022&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8023&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8023&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8025&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8025&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8026&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8026&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8027&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8027&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://review.whamcloud.com/#/c/8028&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#/c/8028&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="93195" author="simmonsja" created="Thu, 4 Sep 2014 15:27:55 +0000"  >&lt;p&gt;I have been testing this the utilities and I saw this:&lt;/p&gt;

&lt;p&gt;lnetctl &amp;gt; help set&lt;br/&gt;
set: set &lt;/p&gt;
{tiny_buffers | small_buffers | large_buffers | routing}
&lt;p&gt;lnetctl &amp;gt; help set large_buffers&lt;br/&gt;
setlarge_buffers: Unknown command.&lt;/p&gt;

&lt;p&gt;Is this correct behavior?&lt;/p&gt;</comment>
                            <comment id="93213" author="ashehata" created="Thu, 4 Sep 2014 17:58:43 +0000"  >&lt;p&gt;lnetctl utility has the same work flow as the ip utility.  The only difference is that the infrastructure I was asked to use for the utility allows interactive mode, and the patter &quot;help &amp;lt;cmd&amp;gt;&quot; in interactive mode.  However, that infrastructure doesn&apos;t support the pattern &quot;help &amp;lt;cmd&amp;gt; &amp;lt;subcmd&amp;gt;&quot; readily.&lt;/p&gt;

&lt;p&gt;The way it works:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;lnetctl &amp;gt; help set
set: set {tiny_buffers | small_buffers | large_buffers | routing}

lnetctl &amp;gt; set tiny_buffers help
set tiny_buffers: set tiny routing buffers
        VALUE must be greater than 0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;so help &amp;lt;cmd&amp;gt; gives the first level of help.  To get help on subsequent commands, you put the &quot;help&quot; keyword after the subcommand.&lt;/p&gt;

&lt;p&gt;If you run directly from the command line, the output would look like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[root@rt1 lutfTMP]# lnetctl help
Available commands are:
        lnet
        route
        net
        routing
        set
        &lt;span class=&quot;code-keyword&quot;&gt;import&lt;/span&gt;
        export
        stats
        peer_credits
        help
        exit
        quit
For more help type: help command-name
[root@rt1 lutfTMP]# lnetctl route help
route add: add a route
        --net: net name (ex tcp0)
        --gateway: gateway nid (ex 10.1.1.2@tcp)
        --hop: number to &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; destination (1 &amp;lt; hops &amp;lt; 255)
        --priority: priority of route (0 - highest prio

route del: delete a route
        --net: net name (ex tcp0)
        --gateway: gateway nid (ex 10.1.1.2@tcp)

route show: show routes
        --net: net name (ex tcp0) to filter on
        --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on
        --hop: number to &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; destination (1 &amp;lt; hops &amp;lt; 255) to filter on
        --priority: priority of route (0 - highest prio to filter on
        --detail: display detailed output per route

route help: display &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; help

[root@rt1 lutfTMP]# lnetctl route show help
route show: show routes
        --net: net name (ex tcp0) to filter on
        --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on
        --hop: number to &lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; destination (1 &amp;lt; hops &amp;lt; 255) to filter on
        --priority: priority of route (0 - highest prio to filter on
        --detail: display detailed output per route
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="95243" author="adilger" created="Mon, 29 Sep 2014 21:04:11 +0000"  >&lt;p&gt;One question that came up at LAD last week was why the &lt;tt&gt;lnetctl&lt;/tt&gt; functionality was not (also) available via &lt;tt&gt;lctl&lt;/tt&gt;?  Like the other LNet-specific commands that are already available via lctl, these commands could also be added just by adding them to the lctl parser.&lt;/p&gt;

&lt;p&gt;It is still desirable to have a standalone lnetctl command for the systems that are using only LNet (there are a few). &lt;/p&gt;

&lt;p&gt;The stated benefit of having these new commands in lctl is that this reduces the number of binaries that need to be installed on the compute nodes, which try to have a minimal memory/space footprint.&lt;/p&gt;

&lt;p&gt;That isn&apos;t a requirement for landing, but rather an enhancement request from the end users.&lt;/p&gt;</comment>
                            <comment id="95627" author="simmonsja" created="Fri, 3 Oct 2014 14:24:16 +0000"  >&lt;p&gt;Ticket &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-5705&quot; title=&quot;Dynamic LNet Config: merge lnetctl into lctl&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-5705&quot;&gt;LU-5705&lt;/a&gt; was created to discuss lctl versus lnetctl&lt;/p&gt;</comment>
                            <comment id="95816" author="doug" created="Tue, 7 Oct 2014 16:33:31 +0000"  >&lt;p&gt;Ticket &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-5712&quot; title=&quot;Derive LGPL library from libcfs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-5712&quot;&gt;&lt;del&gt;LU-5712&lt;/del&gt;&lt;/a&gt; was created to look at creating a new LGPL library from the parts of libcfs (GPL) used by this feature.&lt;/p&gt;</comment>
                            <comment id="97727" author="sarah" created="Tue, 28 Oct 2014 18:06:49 +0000"  >&lt;p&gt;Test plan attached is dated, please update the document. &lt;/p&gt;</comment>
                            <comment id="98677" author="ashehata" created="Fri, 7 Nov 2014 18:06:36 +0000"  >&lt;p&gt;Landed in 2.7&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="13105">LU-1071</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="13847">LU-1279</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="26986">LU-5734</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="26251">LU-5568</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27405">LU-5838</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27419">LU-5849</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27434">LU-5854</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27450">LU-5861</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27475">LU-5874</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27476">LU-5875</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27506">LU-5884</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="21863">LUDOC-204</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="24797">LU-5098</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27422">LU-5850</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="13844" name="DLC_FTP.docx" size="160329" author="ashehata" created="Wed, 20 Nov 2013 02:56:12 +0000"/>
                            <attachment id="13920" name="DLC_User_doc.pdf" size="103580" author="ashehata" created="Sat, 14 Dec 2013 02:37:06 +0000"/>
                            <attachment id="12161" name="Dynamic LNet Config Test Plan.pdf" size="300472" author="doug" created="Thu, 10 Jan 2013 20:09:51 +0000"/>
                            <attachment id="11807" name="Dynamic LNet Config.pdf" size="56726" author="doug" created="Tue, 28 Aug 2012 18:06:43 +0000"/>
                            <attachment id="14705" name="dlc_api.patch" size="14477" author="liang" created="Sat, 12 Apr 2014 19:17:55 +0000"/>
                            <attachment id="14602" name="l_dlc.patch" size="5211" author="liang" created="Wed, 26 Mar 2014 02:31:25 +0000"/>
                    </attachments>
                <subtasks>
                            <subtask id="15923">LU-2457</subtask>
                            <subtask id="17207">LU-2633</subtask>
                    </subtasks>
                <customfields>
                                                                                                                                                                <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzvdj3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5798</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>