X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C88915.BC35DFA0@onstor-exch02.onstor.net>; Tue, 18 Mar 2008 09:33:02 -0700
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C88915.BC35DFA0"
Content-class: urn:content-classes:message
Subject: RE: FTI code + Migration script review
Date: Tue, 18 Mar 2008 09:33:02 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E02025662@onstor-exch02.onstor.net>
In-Reply-To: <20080314183550.70e594cc@ripper.onstor.net>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: FTI code + Migration script review
Thread-Index: AciGPOcV0klpWq52THOF/iDzjlFWMQC003Ag
References: <BB375AF679D4A34E9CA8DFA650E2B04E05B95C4A@onstor-exch02.onstor.net> <20080314183550.70e594cc@ripper.onstor.net>
From: "Sripal Surendiran (HCL)" <sripal.surendiran@onstor.com>
To: "Andy Sharp" <andy.sharp@onstor.com>,
	"Sudharsan Srinivasan" <sudharsan@onstor.com>
Cc: "Tim Gardner" <tim.gardner@onstor.com>,
	"Paul Hammer" <paul.hammer@onstor.com>,
	"Narain Ramadass" <narain.ramadass@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C88915.BC35DFA0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Thanks Andy,

I have incorporated your review comments. Request you to re-review.

Please see my inline comments.

Thanks again,
Sripal.

-----Original Message-----
From: Andy Sharp=20
Sent: Saturday, March 15, 2008 7:06 AM
To: Sudharsan Srinivasan
Cc: Tim Gardner; Paul Hammer; Sripal Surendiran (HCL); Narain Ramadass
Subject: Re: FTI code + Migration script review

On Thu, 13 Mar 2008 08:18:48 -0700 "Sudharsan Srinivasan"
<sudharsan@onstor.com> wrote:

> Hi Andy,
> While you continue your review of FTI, please pass on any review
> comments that you have so far. Sripal can take care of these
> comments. Also, I guess Larry has reviewed the makefiles. Kindly pass
> on any review comments that Larry might have.=20
> Regards
> Sudharsan

Here you go.  There is some work to do.  ifdef {OpenBSD,Linux} has to
be removed, plus some other stuff.  I think there are one or two files
that appear to have been a name change and not much more, but they are
showing up as adds from perforce.  Did they start as integrates or were
they just done as adds?



linux/rootfs/Makefile


     See Larry Scheer's review of this file.

Sripal> No comments found


linux/rootfs/etc/init.d/onstor


     not happy with removal of initial-config script, but am happy
     with emrscron related changes.

     please preserve the code from initial-config that performed the
     auto-upgrade function, and keep that functionality here.
Sripal>Done. Performed similar movement in BSD also.
Affected files:
//depot/cg_fti/openbsd/src/etc/rc
//depot/cg_fti/openbsd/src/etc/rc.initial
//depot/cg_fti/openbsd/src/etc/Makefile

     line 40, the grep regex is hair-raising.  please make it sane
     and as simple as possible.  something like

     grep -v '^#' /etc/network/interfaces | egrep "iface
eth[01][[space]]\+ dhcp"
Sripal>Done



linux/rootfs/etc/init.d/onstor-config


     I think someone else said this already, but I'll repeat it: fix
     the name and/or the logic surrounding the variable INITIALCONFIG.
     It is not intuitive or self-documenting as is.  For example, change
     the name to NOT_INITIALCONFIG or change the logic, or even better,
     change the possible values to yes/no, and have INITIALCONFIG=3Dyes
     when the filer is in an initial config state.
Sripal>Done

     line 38, seriously dense sed script.  for maintainability,
     please turn it into 3 separate scripts, or better yet,
     three separate shell functions like "interfaces_reset_type",
     "interfaces_reset_address", "interfaces_reset_netmask" and
     call them from this function, for greater code reuseability.
Sripal>Done

     line 76, you can remove the call to newaliases, it is a no-op
Sripal>Done

     line 86, add back auto-upgrade logic from
     /etc/onstor/initial-config here.
Sripal>Done


linux/rootfs/etc/onstor/initial-config


     >>delete linux/rootfs/etc/onstor/initial-config

     don't delete it, just remove it from makefile for now
Sripal>File is preserved. Removed stuff other than auto upgrade=20


nfx-tree/code/sm-sct/taskmgr.c


     line 93-94; 112-113 indentation style does not match surrounding
     code.

Sripal> Nothing part of my change

     line 2333-2336, what does this do?

Sripal> added comment in code

nfx-tree/code/ssc-initial-config/Makefile


     line 23 make this based on the value of $(OS) rather than $(PROD).
Sripal>Done


nfx-tree/code/ssc-initial-config/initial-config-linux.c


     >>add nfx-tree/code/ssc-initial-config/initial-config-linux.c

     this should be an integrate of initial-config-linux.c
Sripal> This is new file added in this branch

     please pare down that massive list of includes to only those that
     are actually needed.
Sripal>Done

     line 85, many whitespace violations, including trailing whitespace
Sripal>Done

     line 93, return the errno, not -1.  adjust callers accordingly.
Sripal>Changed return value to NFX_ERR and NFX_OK.

     line 99,151 not needed, fgets does this
Sripal>Done

     line 136,233,244 trailing whitespace
Sripal>Done

     line 142,156,164,173,177,188,196,203,207 return some kind of
     errno value, like ENOTFOUND.  ok, i just made that up, but you
     know what i mean. EINVAL, ENOENT, something like that.
Sripal>Changed return value to NFX_ERR and NFX_OK

     line 244, spacing?  operators should be surrounded with a space,
     like =3D=3D, ?, : and so on.  and of course fix the trailing space.
Sripal>Done

     line 250 why not return the actual errno? same for all the returns
     in this function.
Sripal>Changed return value to NFX_ERR and NFX_OK

     line function initconf_updateInterfaceConf()
     Instead of writing shell scripts on the fly like
     this, create a library of commonly used shell
     functions for yourself that do these common tasks,
     and then just invoke from your C code like so:
     do_system(". /onstor/lib/system-config-lib.sh;
     function_name %s %s", argument, argument);

     Many of these functions can be culled from the current
     initial-config script, and other places.  See my comments
     for onstor-config.

Sripal> Deferred for now. This has to been put to my todo list. Will
take up later.

     line 361 the description text and the argument variable name
     could use some clarifying.  This method updates the default
     gateway address in the configuration file.  gateway - ip address
     of the gateway.  you get the idea.
Sripal>Done
     line 374, trailing whitespace
Sripal>Done
     line 385, this is a bogus route command.  you can let the route
     program figure out the netmask, or specify it correctly, but
     0.0.0.0 is never right, obviously.  to let route figure it out,
     which is probably best, use this:

     fprintf(fp, "route add default gw %s", gateway);

     obviously that also implies that you change the variable name to
     gateway, which is what it really is.
Sripal>Deferred. This is how initial-config script works. This format
is also used by ipmd libraries. Not sure of side effects.

nfx-tree/code/ssc-initial-config/initial-config-openbsd.c


     >>add nfx-tree/code/ssc-initial-config/initial-config-openbsd.c

     I seriously doubt you need all these include files.  Please pare
     these down to the absolute minimum.  Same goes for the Linux
     version of this file.

     same comments as for the Linux version.
Sripal>Done

     much trailing whitespace as well.
Sripal>Done


nfx-tree/code/ssc-initial-config/initial-config.c


     Please do not use if[n]def OpenBSD or Linux, or variants thereof.
     Read the porting guide wiki page under the Cougar project if you
     need pointers on how to do that.
Sripal>Done

     please clean up trailing whitespace.
Sripal>Done

     Error return paths: in initial-config-$(OS) I said return errno
     value instead of -1.  Well, you can do that, or you can return
     some NFX_error_value that is appropriate.  Your choice.
Sripal>used NFX_ERR and NFX_OK as return value

     line 10 spelling
Sripal>Done


     line 381 do not use parens in return statements.  return is not
     a function call.
Sripal>Done


     line 385, this logic is broken in several ways.  just because a
     string in the file is longer than INITCONF_MAX_STR_SIZE, whatever
     the heck that is, doesn't mean an automatic error.  errors should
     only come from the parsing part of the code. not to mention that if
     (buf[0] !=3D '\0' && buf[strlen(buf) - 1] =3D=3D '\n') might fail =
but the
     string be complete.  and the assignement on line 386 is redundant.
Sripal>Done

     line 458, is there some reason the last argument in this function
     call is on another line?
Sripal>Done

     line 519 there is a standard scanf way to specify a variable
     field width.  please use that.  barring that, at least add a
     comment about what this code is doing.
Sripal>That requires you hardcode the field width in format specifier.
       I used my MACRO for specifying the field width.

     these (void) casts are not needed.
Sripal>Done

     line 529,564, why did these lines change?
Sripal>Could not understand the comment

     line 646, all operators should be surrounded by space, like '|'
Sripal>Done


     After these issues have been addressed I'll re-review.

nfx-tree/code/ssc-initial-config/initial-config.h


     line 22 no ifdef OpenBSD/Linux, please.  portable files should
     remain that way, not to mention that we don't build on the target
     system, so these macros shouldn't be counted on.  put OS specific
     defines in $(OS).h.
Sripal>Done

     line 95 ditto
Sripal>Done



nfx-tree/code/ssc-initial-config/migrate.sh


     >>add nfx-tree/code/ssc-initial-config/migrate.sh

     please clean up trailing whitespace.
Sripal>Done

     line 117,147 do something like this instead: /bin/mount -o
     ro,ufstype=3D44bsd "$SEC_DEV_FILE"4 $MOUNT_PT > /dev/null 2>&1
Sripal>Done

     line 119,149 please use proper spacing -- operators like ']' and
     ';' should have space around them.
Sripal>Done

     line 229,242 use spaces or tabs to indent, not both.  tabs are
     always preferred, of course.
Sripal>Changed to spaces.

     line 388, please include the official list(s) of config files, in
     /onstor/lib.  see flash_install.sh or initial-config for examples.
Sripal> Certain config files are irrelevant to migration. Hence having
my
	  own list.

     updateCrontab() - cannot emrscron be used for this?  in conjunction
     with the modify-cron command, of course.  that way, you don't have
     to "upgrade" the crontab file.  on boot up, root crontab file is
     wiped and rebuilt every time, so this should be necessary at all.
Sripal>I am importing only audit export details. Currently we do not
have
	 audit export details in cluster DB and these entry will not
       be added if we wipe crontab. Probably bug in "audit export"

     line 513 s/send/set/
Sripal>Done

     I like the fact that you've added code to have the user set the
     root password in addition to the admin password.  Please put a
     message in here to the user informing them that we cannot recover
     this password if they lose it, so they should make a record of
     it and keep it in a safe place;  only a system config reset will
     allow them to get the root password again, and of course all
     config info will be lost.
Sripal>Done




nfx-tree/code/ssc-initial-config/minlabel.c


     >>add nfx-tree/code/ssc-initial-config/minlabel.c

     looks ok


nfx-tree/code/ssc-initial-config/minlabel.h


     >>add nfx-tree/code/ssc-initial-config/minlabel.h

     looks ok

nfx-tree/code/ssc-nfxsh/Makefile


     looks good


nfx-tree/code/ssc-nfxsh/cmd_flash.c


     looks good


nfx-tree/code/ssc-nfxsh/vtysh-linux.c


     >>delete nfx-tree/code/ssc-nfxsh/vtysh-linux.c

     looks good


nfx-tree/code/ssc-nfxsh/vtysh-openbsd.c


     >>delete nfx-tree/code/ssc-nfxsh/vtysh-openbsd.c

     looks good


nfx-tree/code/ssc-nfxsh/vtysh_initial.c


     >>add nfx-tree/code/ssc-nfxsh/vtysh_initial.c

     this should have been done as an integrate of vtysh-openbsd.c,
     not a delete/add

     opening description: please fix
Sripal>Done


nfx-tree/code/ssc-pm/rc.onstor


     looks good


openbsd/src/usr.sbin/dhcp/dhclient/scripts/dhclient-script

     revert unchanged file?

Sripal>sent you wrong file. It should be
//depot/cg_fti/linux/rootfs/sbin/dhclient-script


------_=_NextPart_001_01C88915.BC35DFA0
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.5.7653.38">
<TITLE>RE: FTI code + Migration script review</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">Thanks Andy,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier New">I =
have incorporated your review comments.</FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT SIZE=3D2 FACE=3D"Courier New">Request you to =
re-review.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">Please see my inline comments.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">Thanks again</FONT></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Courier New">,</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">Sripal</FONT></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Courier New">.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">-----Original Message-----<BR>
From: Andy Sharp<BR>
Sent: Saturday, March 15, 2008 7:06 AM<BR>
To: Sudharsan Srinivasan<BR>
Cc: Tim Gardner; Paul Hammer; Sripal Surendiran (HCL); Narain =
Ramadass<BR>
Subject: Re: FTI code + Migration script review</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier New">On =
Thu, 13 Mar 2008 08:18:48 -0700 &quot;Sudharsan =
Srinivasan&quot;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&lt;sudharsan@onstor.com&gt; wrote:</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; Hi Andy,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; While you continue your review of FTI, please pass on any =
review</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; comments that you have so far. Sripal can take care of =
these</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; comments. Also, I guess Larry has reviewed the makefiles. =
Kindly pass</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; on any review comments that Larry might have. =
</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; Regards</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&gt; Sudharsan</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">Here you go.&nbsp; There is some work to do.&nbsp; ifdef =
{OpenBSD,Linux} has to</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier New">be =
removed, plus some other stuff.&nbsp; I think there are one or two =
files</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">that appear to have been a name change and not much more, but they =
are</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">showing up as adds from perforce.&nbsp; Did they start as =
integrates or were</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">they just done as adds?</FONT></SPAN></P>
<BR>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">linux/rootfs/Makefile</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; See Larry Scheer's review of this =
file.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt; No comments</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
found</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">linux/rootfs/etc/init.d/onstor</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; not happy with removal of initial-config =
script, but am happy</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; with emrscron related =
changes.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; please preserve the code from =
initial-config that performed the</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; auto-upgrade function, and keep that =
functionality here.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">. =
Performed similar movement in BSD also</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Affected files:</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier =
New">//depot/cg_fti/openbsd/src/etc/rc</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier =
New">//depot/cg_fti/openbsd/src/etc/rc.initial</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier =
New">//depot/cg_fti/openbsd/src/etc/Makefile</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 40, the grep regex is =
hair-raising.&nbsp; please make it sane</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; and as simple as possible.&nbsp; something =
like</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; grep -v '^#' /etc/network/interfaces | =
egrep &quot;iface eth[01][[space]]\+ dhcp&quot;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">linux/rootfs/etc/init.d/onstor-config</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; I think someone else said this already, =
but I'll repeat it: fix</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; the name and/or the logic surrounding the =
variable INITIALCONFIG.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; It is not intuitive or self-documenting as =
is.&nbsp; For example, change</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; the name to NOT_INITIALCONFIG or change =
the logic, or even better,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; change the possible values to yes/no, and =
have INITIALCONFIG=3Dyes</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; when the filer is in an initial config =
state.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 38, seriously dense sed script.&nbsp; =
for maintainability,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; please turn it into 3 separate scripts, or =
better yet,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; three separate shell functions like =
&quot;interfaces_reset_type&quot;,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &quot;interfaces_reset_address&quot;, =
&quot;interfaces_reset_netmask&quot; and</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; call them from this function, for greater =
code reuseability.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 76, you can remove the call to =
newaliases, it is a no-op</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 86, add back auto-upgrade logic =
from</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; /etc/onstor/initial-config =
here.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">linux/rootfs/etc/onstor/initial-config</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;delete =
linux/rootfs/etc/onstor/initial-config</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; don't delete it, just remove it from =
makefile for now</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">File is =
preserved.</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">Removed stuff other than auto =
upgrade</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New"></FONT></SPAN><SPAN LANG=3D"en-us"> =
</SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/sm-sct/taskmgr.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 93-94; 112-113 indentation style does =
not match surrounding</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; code.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt; Nothing part of my =
change</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 2333-2336, what does this =
do?</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt; added comment</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> in =
code</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/Makefile</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 23 make this based on the value of =
$(OS) rather than $(PROD).</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/initial-config-linux.c</FONT></SPAN=
></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-initial-config/initial-config-linux.c</FONT></SPAN></P>=


<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; this should be an integrate of =
initial-config-linux.c</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> This is new file added =
in this branch</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; please pare down that massive list of =
includes to only those that</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; are actually needed.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 85, many whitespace violations, =
including trailing whitespace</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 93, return the errno, not -1.&nbsp; =
adjust callers accordingly.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">Change</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">d</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> return value to NFX_ERR =
and NFX_OK</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 99,151 not needed, fgets does =
this</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 136,233,244 trailing =
whitespace</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 142,156,164,173,177,188,196,203,207 =
return some kind of</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; errno value, like ENOTFOUND.&nbsp; ok, i =
just made that up, but you</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; know what i mean. EINVAL, ENOENT, =
something like that.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">Change</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">d</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> return value to NFX_ERR =
and NFX_OK</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 244, spacing?&nbsp; operators should =
be surrounded with a space,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; like =3D=3D, ?, : and so on.&nbsp; and of =
course fix the trailing space.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 250 why not return the actual errno? =
same for all the returns</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; in this function.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">Change</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">d</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> return value to NFX_ERR =
and NFX_OK</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line function =
initconf_updateInterfaceConf()</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; Instead of writing shell scripts on the =
fly like</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; this, create a library of commonly used =
shell</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; functions for yourself that do these =
common tasks,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; and then just invoke from your C code like =
so:</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; do_system(&quot;. =
/onstor/lib/system-config-lib.sh;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; function_name %s %s&quot;, argument, =
argument);</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; Many of these functions can be culled from =
the current</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; initial-config script, and other =
places.&nbsp; See my comments</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; for onstor-config.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt; Deferred f</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">or =
now. This has to be</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">en</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New"></FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">put</FONT></SPAN><SPAN LANG=3D"en-us"> =
<FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">to</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New"></FONT></SPAN><SPAN LANG=3D"en-us"> <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">my</FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">todo list</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">. Will take up later</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 361 the description text and the =
argument variable name</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; could use some clarifying.&nbsp; This =
method updates the default</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; gateway address in the configuration =
file.&nbsp; gateway - ip address</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; of the gateway.&nbsp; you get the =
idea.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 374, trailing =
whitespace</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 385, this is a bogus route =
command.&nbsp; you can let the route</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; program figure out the netmask, or specify =
it correctly, but</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0 is never right, obviously.&nbsp; =
to let route figure it out,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; which is probably best, use =
this:</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; fprintf(fp, &quot;route add default gw =
%s&quot;, gateway);</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; obviously that also implies that you =
change the variable name to</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; gateway, which is what it really =
is.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">Defe</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">r</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">red. This is how</FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">initial-config script w</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">orks. This =
format</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">is</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">also</FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">used by ipmd libraries. Not sure of side effects.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/initial-config-openbsd.c</FONT></SP=
AN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-initial-config/initial-config-openbsd.c</FONT></SPAN></=
P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; I seriously doubt you need all these =
include files.&nbsp; Please pare</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; these down to the absolute minimum.&nbsp; =
Same goes for the Linux</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; version of this file.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; same comments as for the Linux =
version.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; much trailing whitespace as =
well.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/initial-config.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; Please do not use if[n]def OpenBSD or =
Linux, or variants thereof.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; Read the porting guide wiki page under the =
Cougar project if you</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; need pointers on how to do =
that.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; please clean up trailing =
whitespace.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; Error return paths: in =
initial-config-$(OS) I said return errno</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; value instead of -1.&nbsp; Well, you can =
do that, or you can return</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; some NFX_error_value that is =
appropriate.&nbsp; Your choice.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">used</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
NFX_ERR and NFX_OK as return value</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 10 spelling</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 381 do not use parens in return =
statements.&nbsp; return is not</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; a function call.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 385, this logic is broken in several =
ways.&nbsp; just because a</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; string in the file is longer than =
INITCONF_MAX_STR_SIZE, whatever</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; the heck that is, doesn't mean an =
automatic error.&nbsp; errors should</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; only come from the parsing part of the =
code. not to mention that if</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; (buf[0] !=3D '\0' &amp;&amp; =
buf[strlen(buf) - 1] =3D=3D '\n') might fail but the</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; string be complete.&nbsp; and the =
assignement on line 386 is redundant.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 458, is there some reason the last =
argument in this function</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; call is on another line?</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 519 there is a standard scanf way to =
specify a variable</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; field width.&nbsp; please use that.&nbsp; =
barring that, at least add a</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; comment about what this code is =
doing.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">That requires you =
hardcode the</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">field</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
width in format specifier.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I used my =
MACRO for specifying the</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">field</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
width.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; these (void) casts are not =
needed.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 529,564, why did these lines =
change?</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">Could not understand the =
comment</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 646, all operators should be =
surrounded by space, like '|'</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; After these issues have been addressed =
I'll re-review.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/initial-config.h</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 22 no ifdef OpenBSD/Linux, =
please.&nbsp; portable files should</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; remain that way, not to mention that we =
don't build on the target</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; system, so these macros shouldn't be =
counted on.&nbsp; put OS specific</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; defines in $(OS).h.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 95 ditto</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/migrate.sh</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-initial-config/migrate.sh</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; please clean up trailing =
whitespace.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 117,147 do something like this =
instead: /bin/mount -o</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; ro,ufstype=3D44bsd =
&quot;$SEC_DEV_FILE&quot;4 $MOUNT_PT &gt; /dev/null =
2&gt;&amp;1</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 119,149 please use proper spacing -- =
operators like ']' and</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; ';' should have space around =
them.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 229,242 use spaces or tabs to indent, =
not both.&nbsp; tabs are</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; always preferred, of =
course.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">Changed to =
spaces</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 388, please include the official =
list(s) of config files, in</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; /onstor/lib.&nbsp; see flash_install.sh or =
initial-config for examples.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> Certain config files =
are irrelevant to migration. Hence having my</FONT></SPAN></P>

<P DIR=3DLTR><SPAN =
LANG=3D"en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">&nbsp; own =
list.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; updateCrontab() - cannot emrscron be used =
for this?&nbsp; in conjunction</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; with the modify-cron command, of =
course.&nbsp; that way, you don't have</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; to &quot;upgrade&quot; the crontab =
file.&nbsp; on boot up, root crontab file is</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; wiped and rebuilt every time, so this =
should be necessary at all.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">I am</FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier =
New">importing only audit export details. Currently we do not =
have</FONT></SPAN></P>

<P DIR=3DLTR><SPAN =
LANG=3D"en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> audit export details in =
cluster DB and</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">these</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
entry</FONT></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New"> will</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">not</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
be</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">added if we wipe</FONT></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New"> =
crontab.</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier New">Probably bug in &quot;audit =
export&quot;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; line 513 s/send/set/</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; I like the fact that you've added code to =
have the user set the</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; root password in addition to the admin =
password.&nbsp; Please put a</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; message in here to the user informing them =
that we cannot recover</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; this password if they lose it, so they =
should make a record of</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; it and keep it in a safe place;&nbsp; only =
a system config reset will</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; allow them to get the root password again, =
and of course all</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; config info will be =
lost.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>
<BR>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/minlabel.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-initial-config/minlabel.c</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks ok</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-initial-config/minlabel.h</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-initial-config/minlabel.h</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks ok</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-nfxsh/Makefile</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks good</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-nfxsh/cmd_flash.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks good</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-nfxsh/vtysh-linux.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;delete =
nfx-tree/code/ssc-nfxsh/vtysh-linux.c</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks good</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-nfxsh/vtysh-openbsd.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;delete =
nfx-tree/code/ssc-nfxsh/vtysh-openbsd.c</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks good</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-nfxsh/vtysh_initial.c</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;add =
nfx-tree/code/ssc-nfxsh/vtysh_initial.c</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; this should have been done as an integrate =
of vtysh-openbsd.c,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; not a delete/add</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; opening description: please =
fix</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;Done</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">nfx-tree/code/ssc-pm/rc.onstor</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; looks good</FONT></SPAN></P>
<BR>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">openbsd/src/usr.sbin/dhcp/dhclient/scripts/dhclient-script</FONT></S=
PAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp; revert unchanged file?</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#FF00FF" SIZE=3D2 =
FACE=3D"Courier New">Sripal&gt;</FONT></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#FF00FF" SIZE=3D2 FACE=3D"Courier New">sent you wrong file. It =
should be</FONT></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#FF00FF" =
SIZE=3D2 FACE=3D"Courier =
New">//depot/cg_fti/linux/rootfs/sbin/dhclient-script</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN></P>

</BODY>
</HTML>
------_=_NextPart_001_01C88915.BC35DFA0--
