Subject: FCIP Last Call technical comments

From: [email-masked]
Date: Mon, 18 Mar 2002 00:40:22 -0500

[T] Technical comments only.  Editorial comments have been sent directly
to the document editor.

----- FC over TCP/IP -09 -----

-- Section 6.6 - FCIP Data Engine (FCIP_DE)

   Table 2 shows the SOF and EOF code values that are legal in FCIP
   Frames. This list may be a subset of the SOF and EOF codes listed in
   the FC Frame Encapsulation [27].

[T] This is a problem because these codes are being specified in more
than one place.  I think the FC Frame Encapsulation document is the right
place for the normative specification of these codes (and see my comments
against it on the need to get IANA involved).  This would be ok as a list
of codes that are currently valid, but the specification authority needs
to be in one place.

-- Section 6.6.2.2 - Errors in FCIP Headers and Discarding FCIP Frames

   In addition to the tests above, the validity and positioning of the
   following FCIP Frame information SHOULD be used to detect
   encapsulation errors that may or may not affect synchronization:
 
   a)  Protocol # field and its ones complement (2 tests);
   b)  Version field and its ones complement (2 tests);
[... list continues, snipped ...]

[T] I think at least these two are MUSTs.  At a minimum, the Protocol#
and Version field must be checked against expected values - I might accept
the checks against their ones complements being SHOULDs.  Same comment
applies to the Flags field and SOF.  Someone MUST check the FC frame CRC
before forwarding the frame, but that responsibility could be assigned
to the FC Entity.

   At least 5 of the 18 tests listed above SHALL be performed. Failure
   of any of the above tests actually performed SHALL indicate an
   encapsulation error and the frame SHALL NOT be forwarded on to the
   FC Entity. Further, such errors SHOULD be considered carefully,
   since some may be synchronization errors.

[T] There aren't 18 tests, and I think some of the individual tests (or
subsets) are MUSTs (see previous comment).  This needs to be gone over
carefully - in essence a MUST is only appropriate where failure to apply
the test carries a non-negligible risk of forwarding a bad frame to FC.
The authors are the experts on this and need to do this analysis.  I
don't understand the last "SHOULD" - what is the (testable) requirement
on an implementation?

-- Section 6.6.2.3 - Synchronization Failures

   If the FCIP_DE attempts to recover synchronization, the
   resynchronization algorithm used SHALL meet the following
   requirements:

[T] One requirement is missing, which may be part of b):

   b)  return to sending valid FC Frames only after synchronization has
       been verified; and

[T] Verification of synchronization MUST exclude any possibility of
forwarding an FC frame that was not sent by the transmitting FCIP Entity.
This includes the scenario in which a valid encapsulated
FCIP frame occurs in the payload of an FC frame that is encapsulated
and sent over FCIP; excluding this scenario is necessary but not
sufficient to meet the requirement.

   An example algorithm meeting these requirements can be found in
   annex C.

[T] That doesn't meet the missing requirement that my
above comment wants to add.  The problem is at step 2 of the algorithm
description.

   2)  Use multiple strong candidate headers to locate a verified
       candidate header:
 
       The Frame Length in one strong candidate header is used to skip
       incoming bytes until the expected location of the next strong
       candidate header is reached. Then the tests described in step 1)
       are applied to see if another strong candidate header has
       successfully been located.

The "skip incoming bytes" step makes it possible that a set of valid
FC headers is interlaced in the payloads of FC frames in a fashion
that causes all the real headers to be skipped.  This is a rather
unlikely, but not impossible scenario.  This could be dealt with by
searching for headers instead of skipping data and aborting if a
header is found where data should have been or carrying on and
aborting if an interlaced header chain scenario arises.  The algorithm
in Annex C does address the scenario of FCIP frames occurring in
FC frame payloads, but it doesn't meet the "can't be fooled"
requirement that I think should be added.

Unfortunately, this issue appears to not be resolvable within the WG.
I have had heated and lengthy offline discussions with the FCIP Authors
in which they have made clear their strong opposition to the "missing
requirement" and resulting scan rather than skip of data, and have
argued that the algorithm in Annex C produces a long enough chain of
headers that the odds of having followed a chain that is interlaced
through frame payloads is small enough to be ignored.  I will have to
consult the Area Directors.

-- Section 7 - Checking FC Frame Transit Times in the IP Network
 
[T] I don't believe that this paragraph meets the requirements in the
FC Frame Encapsulation specification for processing transit time
information.  Punting this up to the FC Entity is problematic -
the minimum functional requirements on the FC Entity to meet the
FC Frame Encapsulation requirements will need to be spelled out here
in detail (i.e., a single sentence saying "must meet requirements in
Section 4 of the FC Frame Encapsulation document" is probably not
going to fly).  Mallikarjun caught some issues in this area also.

-- Section 8 - The FCIP Special Frame

[T] How is the FCIP Special Frame payload protected?  I don't see the
equivalent
of an FC Frame CRC.

   The Connection Usage Code field contains Fibre Channel defined
   information regarding the intended usage of the connection as
   specified in FC-BB-2 [4].

[T] The authors need to talk to me about this, so that I can understand
what's going on here, and whether we need another IANA registry, as is
the case for the SOF and EOF values.

[T] This section needs to describe the usage of the FCIP Special Frame,
including the structure of the interaction between the two FCIP Entities,
and how that establishes the security and connection usage properties
that are desired.  The descriptions in Section 9 contain a great deal
of detail that mixes several mechanisms together - a high level guide
to what's going on is necessary to understand them.

-- Section 9.1.2.1 - Non-Dynamic Creation of New TCP Connections

   If the TCP connect request is rejected, the FCIP Entity SHALL act to
   limit unnecessary repetition of attempts to establish similar
   connections.

[T] That's a little vague.  How about specifying a minimum time period
that MUST elapse before retry?

   It is recommended that an FCIP Entity not initiate TCP connect
   requests to another FCIP Entity if incoming TCP connect requests
   from that FCIP Entity have already been accepted.

[T] Needs an upper case "SHOULD" or "RECOMMENDED".  This also needs
a MUST or SHOULD on the configuration mechanism to indicate in which
direction connections are to be established between a pair of FCIP
Entities in order to deal with a problem that turns up near the end
of Section 9.1.3.  This is related to Mallikarjun's issue about
handling of simultaneous opens.

-- Section 9.1.2.3 - Connection Setup After a Successful TCP Connect Request

[T] This dives into the details of FCIP Special Frame handling without
explaining
the overall structure and goals of the use, and is unclear as a result.  For
example, For example, on p. 29, after constructing the FCIP Special Frame,
the
text says:

   After the FCIP Special Frame bytes are sent on the newly formed
   connection, the FCIP Entity SHALL wait for the FCIP Special Frame to
   be echoed as the first bytes received on the newly formed connection.

But one has to wade all the way down to p.33 towards the end of Section
9.1.3
to discover that the other FCIP Entity is expected to perform validation
actions
before echoing the frame.  The structural outline of the usage of the FCIP
Special Frame (without the blow by blow details) needs to be described in
Section 8.

   The remaining steps in this section SHALL be performed only if the
   echoed FCIP Special Frame bytes exactly match the FCIP Special Frame
   bytes sent (words 7 through 17 inclusive).

-- Section 9.1.3 - Processing Incoming TCP Connect Requests

   If the requested connection is
   allowed, the FC Entity SHALL ensure that required IP security
   features are enabled and accept the TCP connect request.

[T] As written, this appears to require a dynamic interrogation of the IPsec
Security Association Database, and possibly the IPsec Security Policy
Database.
I suspect that this is in excess of what was intended, and suspect a longer
description is needed.

   If the Destination FC Fabric Entity World Wide Name contains 0, the
   FCIP Entity SHALL take one of the following three actions:
 
   1)  Leave the Destination FC Fabric Entity World Wide Name field and
       Ch bit both 0;
   2)  Change the Destination FC Fabric Entity World Wide Name field to
       match FC Fabric Entity World Wide Name associated with the FCIP
       Entity that received the TCP connect request and change the Ch
       bit to 1; or
   3)  Close the TCP Connection without sending any response.
 
   The choice between the above actions depends on the anticipated
   usage of the FCIP Entity and is outside the scope of this
   specification.  The FCIP Entity may consult the "shared" database
   when choosing between the above actions.

[T] I'm not buying the "outside the scope" disclaimer.  Some more
description
of why the three choices are available is in order even if the normative
criteria for choosing among them are specified in FC-BB-2.  If my assumption
about FC-BB-2 is correct, the last sentence is almost certainly too weak -
it needs to refer to consulting the FC Entity to determine what to do.

   If:
   a)  The Destination FC Fabric Entity World Wide Name contains a non-
       zero value that does not match the FC Fabric Entity World Wide
       Name associated with the FCIP Entity that received the TCP
       connect request, or
   b)  The contents of the Connection Usage Flags, and Connection Usage
       Code fields is not acceptable to the FCIP Entity that received
       the TCP connect request,
   then the FCIP Entity SHALL take one of the following two actions:
   1)  Change the contents of the unacceptable fields to correct/
       acceptable values and set the Ch bit to 1; or
   2)  Close the TCP Connection without sending any response.

[T] 1) looks like a security hole that discloses information an attacker
may find useful in establishing an undesired connection to FCIP.  What's
the motivation/purpose for this?

   If the Source FC Fabric Entity World Wide Name and Source FC/FCIP
   Entity Identifier field values in the FCIP Special Frame match the
   Source FC Fabric Entity World Wide Name and Source FC/FCIP Entity
   Identifier associated with an existing FCIP_LEP, the FCIP Entity
   SHALL:
 
   1)  Request that the FC Entity authenticate the source of TCP
       connect request, providing the following information to the FC
       Entity for authentication purposes:

[T] Need to say more about what the FC Entity MUST do to "authenticate the
source".
I realize that the details are specified in FC-BB-2, but the functional
requirements on the FC Entity can be specified here.

       The FCIP Entity SHALL wait indefinitely for the FC Entity to
       authenticate source of the TCP connect request and SHALL not use
       the new TCP Connection for any purpose until the FC Entity
       completes the authentication.

[T] "wait indefinitely" creates an obvious denial of service attack
vulnerability.  Try something else.

   Note that the originator of TCP connect requests uses IP Address and
   TCP Port to identify which TCP Connections belong to which FCIP_LEPs
   while the recipient of TCP connect requests uses the Source FC
   Fabric Entity World Wide Name, Source FC/FCIP Entity Identifier
   fields from the FCIP Special Frame to identify which TCP Connection
   belong to which FCIP_LEPs.  For this reason, an FCIP Entity that both
   originates and receives TCP connect requests is unable to match the
   FCIP_LEPs associated with originated TCP connect requests to the
   FCIP_LEPs associated with received TCP connect requests.

[T] That's a problem.  See comment against Section 9.1.2.1 for one
suggestion
for how to fix this, but some sort of fix appears necessary to me.

-- Section 9.3.4 TCP_NODELAY Option
 
   FCIP Entities SHALL set the TCP_NODELAY option to one. This will
   disable the Nagle Algorithm that is designed for usage in a telnet
   environment.

[T] I believe that "SHALL" should be a lower case "should".  This is a local
performance optimization that has no other effects.

-- Section 9.5 - Flow Control Mapping between TCP and FC

   Coordination of these flow control mechanisms one of which is credit
   based and the other of which is window based depends on painstaking
   design that is outside the scope of this specification.

[T] This is content-free.  At least warn about some of the things that
can go wrong, in particular BB-credit starvation and the potential to
really screw up a Fibre Channel fabric if this is long-lived.

-- Section 10 Security

[T] Need to get this whole section aligned with the latest (currently -11)
version of the IPS Security draft.

-- Section 10.3.1 - IPSec ESP Authentication and Confidentiality
 
   FCIP Entities MUST implement IPSec ESP [16] in Tunnel Mode for
   providing Data Integrity and Confidentiality. FCIP Entities MAY
   implement IPSec ESP in Transport Mode, if deployment considerations
   require use of Transport Mode.

[T] Those deployment considerations include RFC 2401 requirement for
Transport mode because the IPsec implementation is a host implementation
rather than a security gateway.  I thought this was understood by the FCIP
authors, and it needs to be explicit here including an appropriate reference
to RFC 2401.  I expect to be able to double-check this requirement with the
IETF Security Area in the next few days.

-- Section 10.3.2 - Key Management

   When pre-shared keys are used, IKE Aggressive Mode SHOULD be used
   and Main Mode SHOULD NOT be used.

[T] I think this is too strong and will cause problems.  Pre-Shared keys
are a "MUST", Aggressive Mode is a "MAY", so this "SHOULD" is inconsistent.
The issue with Main Mode arises when dynamically assigned IP addresses are
used (and hence Main Mode can't figure out which pre-shared key to use).
The escape from this box appears to be that Aggressive Mode is a MUST
(SHOULD?) when dynamic assignment of IP addresses to FCIP implementations
is used, but support for dynamic assignment of IP addresses is NOT REQUIRED.

The problem with this approach is that one gets into trouble on one end
of an FCIP Link when the *other* end has its IP address dynamically
assigned.  The obvious solutions to this issue are to forbid (MUST NOT)
dynamic IP address assignment (which has no chance of making it through
the IESG) or to REQUIRE Aggressive Mode.  In addition, the IPS Security
draft appears to need some editing to allow Aggressive Mode to be a "MAY"
for FCIP (and iFCP).  Darn - I thought we had this issue closed in
Huntington
Beach -- I didn't pay enough attention to the details of what we did at
the very end of the security session.

	Support for IKE Oakley Groups is not required.

[T] What does this refer to?  At a minimum, it needs a reference.

   For the purposes of establishing a secure FCIP Link, the two
   participating FCIP Entities consult a Security Policy Database
   (SPD).

-- Section 10.4.2 - TCP Connection Security Associations (SAs)
 
   For a TCP Connection establishment, IKE Phase 2 is employed,
   resulting in an SA, identified by an SPI. All IP datagrams of the
   TCP Connection MUST carry an ESP header with a valid SPI and
   Sequence Number to be accepted as valid by the receiving peer.

[T] The requirement for a phase 2 SA per TCP connection has been removed.
This text (and possibly the rest of this section) need some editing to
reflect that.

-- Section 10.4.3 - Handling data integrity and confidentiality violations
 
   Confidentiality checks MUST be performed if Confidentiality is
   enabled.

[T] And what would those be, please?  Replace this with a prohibition on
use of Confidentiality without Integrity.

-- Section 10.4.4 - Handling SA parameter mismatches
 
   When SA parameters do not match, the TCP Connection may reach a
   point where no traffic moves, or there are excessive TCP
   retransmissions. In such a case, either side MAY take one of the
   following actions:
   a)  Reestablish another set of SA parameters; or
   b)  Close the TCP Connection and notify the FC Entity with the
       reason for the closure.

[T/E] Needs some more explanation, including an example of the sort of
mismatch that could cause this problem.  Recall that IKE negotiates SA
parameters, and this fact needs to be included in the explanation and
example.

-- Section 11.2 - IP Quality of Service (QoS) Support

   If diffserv/PHB QoS is NOT implemented, the DSCP field for all IP
   packets SHALL be set to '000000'.

[T] Not a good idea.  That's not consistent with RFC 2474.  Best
bet is to drop this sentence, but if the authors want to say something
here, they should contact me directly to discuss/vet appropriate text

-- Section 12 - Normative References

[E] This needs to be carefully checked to minimize normative references.
[7] is definitely non-normative.  Most of the QoS references are or can
be non-normative, specifically [11], [22], [23], [24]).  [22] is
an Informational RFC and hence has to be referenced in a non-normative
fashion, and I really want to see [23] and [24] be non-normative (else
any FCIP implementation will have to implement both EF and AF, which
is surely not what was intended).  Need to add a non-normative MPLS
reference.

-- Section 14 - Acknowledgments
 
[E] This is a good place to thank everyone who's reviewed the document,
commented on ideas in it, or helped in other ways.
 
-- Section 15 - Contributors' Addresses
 
We'll try this structure of not separating the folks listed on p.1 from
the other contributors and see if there are any procedural objections.
It's unusual to say the least.

-- Annex A - IANA Considerations

[T] Instruct IANA to change the authority for those port allocations to
reference
this RFC when it is approved.  Add a sentence forbidding the use of UDP with
FCIP even though IANA has allocated a port.

[T] Will need to reference the SOF/EOF registry that the FC Frame
Encapsulation
Draft will need to set up.  Point to the Protocol# allocation done by that
draft also.  If a connection usage registry is needed (see comment against
Section 8, details of that will have to go here).

[E] Should the ANNEXes be APPENDIXes instead?

-- Annex C - Example of synchronization recovery algorithm

[T] See comment on this Annex under Section 6.6.2.3 above.

-- Annexes E, F, and G

I skipped reviewing these three annexes based on the assumption that they
correctly reproduce information specified elsewhere, and the amount of time
I've already spent on this review.

---------------------------------------------------
David L. Black, Senior Technologist
EMC Corporation, 42 South St., Hopkinton, MA  01748
+1 (508) 249-6449 *NEW*      FAX: +1 (508) 497-8500
[email-masked]         Cell: +1 (978) 394-7754
---------------------------------------------------