<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi Patrick,<br>
    <br>
    I had a discussion with xCAT team member regarding set LAN command.<br>
    <br>
    xCAT does the LAN configuration from the host OS only. xCAT data to
    manage a cluster is<br>
    stored in a relational database. The xCAT tables need to be updated
    for the cluster and<br>
    nodes are rebooted into the genesis image and the following standard
    script is run.<br>
    xCAT has no usecase to run out-of-band set lan configuration
    commands.<br>
    <br>
 <a class="moz-txt-link-freetext" href="https://github.com/xcat2/xcat-core/blob/master/xCAT-genesis-scripts/bin/bmcsetup#L285">https://github.com/xcat2/xcat-core/blob/master/xCAT-genesis-scripts/bin/bmcsetup#L285</a><br>
    <br>
    In the script the following commands are executed if the IP
    configuration is static.<br>
    <br>
    <i>ipmitool lan set 1 ipaddr x.x.x.x</i><i><br>
    </i><i>ipmitool lan set 1 netmask x.x.x.x</i><i><br>
    </i><i>ipmitool lan set 1 defgw ipaddr x.x.x.x</i><br>
    <br>
    After the above IP settings are applied, there is a step in the
    script, which expects<br>
    that the ip settings are applied after 30 sec on OpenPower boxes and
    eventually does a<br>
    bmc reset.<br>
    <br>
    <i># After network commands are issued, pause to allow the BMC to
      apply (OpenPower)</i><i><br>
    </i><i>snooze</i><br>
    .<br>
    .<br>
    .<br>
    <i># Cold reset the BMC</i><i><br>
    </i><i>cold_reset_bmc</i><br>
    <br>
    From this it looks like the implementation done on Barreleye would
    work straight with xCAT implementation.<br>
    <br>
    The script has Open Power specific code as well to define specific
    behavior. For example cold_reset_bmc<br>
    has code specifically for OpenPower AMI boxes, there is code for OEM
    commands as well.<br>
    <br>
    Since we need similar set of lan configuration commands for
    net-ipmid and host-ipmid. In the case we<br>
    support Set Channel Access or an OEM command to trigger applying the
    ip changes. It would mean we <br>
    modify the xCAT bmcsetup script.<br>
    <br>
    Regards,<br>
    Tom<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On Monday 07 November 2016 09:20 AM,
      Patrick Williams wrote:<br>
    </div>
    <blockquote cite="mid:20161107035006.GB15757@heinlein.lan"
      type="cite">
      <pre wrap="">Tom,

Thanks for the explanation.  With this website you pointed to and some
other investigation I've done, I am comfortable with us using the 'Set
Channel Access' as the time to apply the settings.  The documentation of
two competition products both seem to require an 'ipmitool mc reset
warm' for IP address changes to take effect, so we are at least better
than that.

Can you internally track down a contact on the xCAT team and verify that
this will be ok with them?  xCAT is an open source management tool that
uses IPMI for most of the system management and we should understand
what process they use for applying IP address changes.  If they expect
to do a sequence of set-lan command and then a reset, then our
implementation using 'Set Channel Access' won't cover their cases
either.

On Fri, Nov 04, 2016 at 11:20:25PM +0530, tomjose wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">Hi Patrick,

In the IPMI command flow that Nan mentioned in the earlier mail. Any of 
the following ipmitool command for
setting the IPv4 configuration, one of the step is to 'Commit 
Write'(Step 8 in Nan's mail).

ipmitool lan set 1 ipaddr x.x.x.x
ipmitool lan set 1 netmask x.x.x.x
ipmitool lan set 1 defgw ipaddr x.x.x.x

As part of the execution of any of the above commands a commit write is 
executed. In that case we cannot use
'Commit Write' as a way to denote the completion of a transaction.

The IPMI specification expects the IP configuration parameters as 
non-volatile parameters. The commit write
parameter is a way to implement rollback feature. The BMC would make a 
copy of the existing parameters
when the 'Set in Progress' state is asserted.

The Get/Set LAN Configuration commands do not provide an option to apply 
the configuration and is identified as
LAN channel settings. The link below used 'Set Channel Access' command 
to apply the settings.
(ipmitool lan set 1 access on). Since LAN configuration parameters are 
channel settings, we thought of
applying the LAN configuration parameters as part of 'Set Channel 
Access'. I am okie if we have
an OEM command to trigger applying the LAN settings.

<a class="moz-txt-link-freetext" href="https://www.thomas-krenn.com/en/wiki/Configuring_IPMI_under_Linux_using_ipmitool">https://www.thomas-krenn.com/en/wiki/Configuring_IPMI_under_Linux_using_ipmitool</a>

In Barreleye we did not implement the 'Set Channel Access' command. 
There was no external
command to trigger apply the settings. In Barreleye the LAN settings are 
applied when all the
three entries(IP Address, Netmask and Gateway address) where set. So 
only to change the
IP address, the netmask and gateway address need to be re-entered, which 
was an imperfect
solution.

Regards,
Tom



On Friday 04 November 2016 07:44 PM, Patrick Williams wrote:
</pre>
        <blockquote type="cite">
          <pre wrap="">Tom,

On Fri, Nov 04, 2016 at 06:56:21PM +0530, tomjose wrote:
</pre>
          <blockquote type="cite">
            <pre wrap="">The Set Channel access command was decided to be used to mark the end of
a setting LAN configuration transaction.
</pre>
          </blockquote>
          <pre wrap="">The IPMI spec for the SetLanConfig has a parameter 'Set In Progress'
which states: 10b = commit write.  Why are we not utilizing that?  Maybe
in addition to Set Channel Access?

I don't see anything in the Set Channel Access command description that
would be obvious as a mechanism for updating IP addresses.  Was that
just quick behavior we decided to do for Barreleye?  Is there any reason
why we would not deprecate that behavior in favor of the Set In
Progress / commit write?

</pre>
        </blockquote>
        <pre wrap="">
</pre>
      </blockquote>
      <pre wrap="">
</pre>
    </blockquote>
    <br>
  </body>
</html>