Re: [Anima] I-D Action: draft-liu-anima-grasp-distribution-13.txt

"Liubing (Leo)" <> Wed, 18 December 2019 10:54 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 34563120103; Wed, 18 Dec 2019 02:54:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.201
X-Spam-Status: No, score=-4.201 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id tPATlcy9tkKS; Wed, 18 Dec 2019 02:54:52 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 62788120019; Wed, 18 Dec 2019 02:54:52 -0800 (PST)
Received: from (unknown []) by Forcepoint Email with ESMTP id C1B9FF15362DB234525E; Wed, 18 Dec 2019 10:54:48 +0000 (GMT)
Received: from ( by ( with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 18 Dec 2019 10:54:48 +0000
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Dec 2019 10:54:48 +0000
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.1.1713.5 via Frontend Transport; Wed, 18 Dec 2019 10:54:48 +0000
Received: from ([]) by ([fe80::fca6:7568:4ee3:c776%31]) with mapi id 14.03.0439.000; Wed, 18 Dec 2019 18:54:41 +0800
From: "Liubing (Leo)" <>
To: Brian E Carpenter <>, Anima WG <>
CC: "" <>
Thread-Topic: [Anima] I-D Action: draft-liu-anima-grasp-distribution-13.txt
Thread-Index: AQHVsQhOPF3DhgplkUKWiVFJA32CkKe7qDKAgAQMysA=
Date: Wed, 18 Dec 2019 10:54:41 +0000
Message-ID: <>
References: <> <>
In-Reply-To: <>
Accept-Language: en-US, zh-CN
Content-Language: zh-CN
x-originating-ip: []
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-CFilter-Loop: Reflected
Archived-At: <>
Subject: Re: [Anima] I-D Action: draft-liu-anima-grasp-distribution-13.txt
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Autonomic Networking Integrated Model and Approach <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 18 Dec 2019 10:54:55 -0000

Hi Brian,

Thanks for the detailed review. Please see my replies inline.

> -----Original Message-----
> From: Anima [] On Behalf Of Brian E Carpenter
> Sent: Monday, December 16, 2019 12:21 PM
> To: Anima WG <>
> Subject: Re: [Anima] I-D Action: draft-liu-anima-grasp-distribution-13.txt
> Hi,
> I think this is a useful extension of the basic autonomic infrastructure. Here are
> some comments and questions on the GRASP part of the draft. I'd be interested
> in the authors' comments.
> > 5.1 Realizing Instant P2P Transmission
> >
> >    This could be a new message in GRASP. In fragmentary CDDL, an Un-
> >    solicited Synchronization message follows the pattern:
> >
> >       unsolicited_synch-message = [M_UNSOLIDSYNCH, session-id,
> >       objective]
> I suggest simply calling this M_PUSH (but see later comments).

[Bing] Personally I'm ok with it. "PUSH" sounds more intuitive.

> >    A node MAY actively send a unicast Un-solicited Synchronization
> >    message with the Synchronization data, to another node. This MAY be
> >    sent to port GRASP_LISTEN_PORT at the destination address,
> That port is normally tied up with multicast reception. But since we have a
> SUBSCRIBE mechanism below, the question of the port can be resolved at
> SUBSCRIBE time. There must be a listener process for this port, of course.

[Bing] The M_PUSH is not bind with SUBSCRIBE. It could be sent standalone. Is it possible we could specify that GRASP_LISTEN_PORT MUST monitor M_PUSH as well?
> >    which
> >    might be obtained by GRASP Discovery or other possible ways. The
> >    synchronization data are in the form of GRASP Option(s) for specific
> >    synchronization objective(s).
> One objective per message is much simpler to implement. If not, this becomes
> more like a "unicast Flood". If you want that, we could define the syntax
> precisely like M_FLOOD.

[Bing] I tend to agree from practical perspective. However, I'm not very sure whether it's necessary to close the little flexibility of multiple objective in one message?

> > 5.2 Realizing Instant Selective Flooding
> >
> >    Since normal flooding is already supported by GRASP, this section
> >    only defines the selective flooding extension.
> ....
> >    The action means, when the match rule applies, the current device
> >    just continues flood or discontinues.
> Please remember that a normal M_FLOOD has two aspects for a node that
> receives it. First, the node stores the objectives delivered in its own flood cache.
> Second, *if* it is a relay node (with interfaces to more than one link within the
> AN, such as a router) it relays a copy of the M_FLOOD to its AN neighbors,
> subject to anti-looping rules.
> 1) If the result of the match is "continue" I assume that the node does exactly
> what it does with a normal flood, i.e. caches the received objectives and if it is a
> relay, it relays the flood to its neighbors.

[Bing] Exactly.

> 2) If result of the match is "discontinue" I assume the node does not cache the
> flooded objectives.

[Bing] The text doesn't explicitly specify the cache behavior. But I share the same opinion that the node does not cache when the match is "discontinue".

> 2) If result of the match is "discontinue" and the node is also a GRASP relay,
> what does the node do? Discard or relay? It cannot know the result of the match
> in its neighbors.

[Bing] If there is matching condition in the packet, then the matching rules behavior automatically be superior. So, even it is a GRASP relay, it would discard the packet when match condition is "discontinue".
The match rules don't consider whether how the neighbors would react on the same rule. This might be "rude" for some scenarios, but could be efficient in some specific scenarios, e.g., highly-herachycal networks.

> I really don't understand the meaning of the matching rules, especially "match-
> object = NEIGHBOR / SELF". I think this needs a lot more explanation and some
> more detailed examples.

[Bing] Normally, the match object is the node itself. But we wanted to keep a bit programmability to allow the node to judge whether to continue or discontinue the flooding based on its neighbors' information.
It assumes that the node has already learned the neighbors' info previously. Let me try to make some detailed examples in the next version.
> > 5.3 Realizing Subscription as An Event
> >
> >    In fragmentary CDDL, a Subscription Objective Option follows the
> >    pattern:
> >
> >          subscription-objection-option = [SUBSCRIPTION, 2, 2, subobj]
> >          objective-name = SUBSCRIPTION
> >
> >          objective-flags = 2
> >
> >          loop-count = 2
> >
> >          subobj = text
> >
> >
> >    This option MAY be included in GRASP M_Synchronization, when
> >    included, it means this message is for a subscription to a specific
> >    object.
> The M_SYNCH message is the reply from a data source to a data destination, so
> I think that's wrong. I think that SUBSCRIPTION should  be used in M_REQ_SYN,
> when a node first wants to get the value of a given objective but also wants to
> subscribe to future push updates. So the reply to a M_REQ_SYN with a
> SUBSCRIPTION option would be M_SYNCH with an initial value for the objective,

[Bing] You are right, we made the mistake. Thanks for pointing it out.

> but the session could stay open with M_PUSH to follow at any time. (So that
> solves the question of the port: whatever port is used for sending the
> M_REQ_SYN listens for the M_PUSH messages.)

[Bing] As replied above, I believe this is a valid use case. But we wanted to decouple M_PUSH and SUBSCRIBE. 

> A new M_REQ_SYN would also be used to carry UNSUBSCRIBE. Alternatively,
> the node could simply close the port and the next M_PUSH would fail. If we did
> that, UNSUBSCRIBE would not be needed.

[Bing] If M_PUSH is standalone, then UNSUB is needed.
> Finally do we actually need M_PUSH, rather than just sending M_SYNCH again
> whenever needed?

[Bing] Even if we don't need M_PUSH standalone. I think current GRASP doesn't support multiple M_SYNCH for a single M_REQ_SYNCH? 
Quoted as below from GRASP, I interpret it as "Per Sync Per Req":
" It then sends a synchronization request (using M_REQ_SYN)
   to the counterpart, including a specific synchronization objective.
   The counterpart responds with a Synchronization message (M_SYNCH,
   Section 2.8.10) containing the current value of the requested
   synchronization objective.  No further messages are needed and the
   transport connection SHOULD be closed. "
> > 5.5 Publishing Objective Option
> >
> >    In fragmentary CDDL, a Publish Objective Option follows the pattern:
> >
> >       publish-objection-option = [PUBLISH, 2, 2, pubobj] objective-name
> >       = PUBLISH
> >       objective-flags = 2
> >       loop-count = 2
> >       pubobj = text
> >
> >    This option MAY be included in GRASP M_Synchronization, when
> >    included, it means this message is for a publish of a specific object
> >    data.
> I don't understand this. An M_SYNCH by definition delivers the current value of
> an objective. Why do we need to say that we're publishing it?

[Bing] I think it's another mistake. The PUB option should be in the M_PUSH message. Since it is per Sync per Req (if I understand it correctly).

Many thanks again!

> Regards
>    Brian Carpenter
> _______________________________________________
> Anima mailing list