[Anima-signaling] GRASP relaying
Brian E Carpenter <brian.e.carpenter@gmail.com> Sun, 03 January 2016 02:05 UTC
Return-Path: <brian.e.carpenter@gmail.com>
X-Original-To: anima-signaling@ietfa.amsl.com
Delivered-To: anima-signaling@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1])
by ietfa.amsl.com (Postfix) with ESMTP id B85D91A889F
for <anima-signaling@ietfa.amsl.com>; Sat, 2 Jan 2016 18:05:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.7
X-Spam-Level:
X-Spam-Status: No, score=0.7 tagged_above=-999 required=5 tests=[BAYES_50=0.8,
DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,
FREEMAIL_FROM=0.001, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44])
by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 4xgSkIHCjLVY for <anima-signaling@ietfa.amsl.com>;
Sat, 2 Jan 2016 18:05:31 -0800 (PST)
Received: from mail-pa0-x22e.google.com (mail-pa0-x22e.google.com
[IPv6:2607:f8b0:400e:c03::22e])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by ietfa.amsl.com (Postfix) with ESMTPS id 38FE21A889D
for <anima-signaling@ietf.org>; Sat, 2 Jan 2016 18:05:31 -0800 (PST)
Received: by mail-pa0-x22e.google.com with SMTP id yy13so86635499pab.3
for <anima-signaling@ietf.org>; Sat, 02 Jan 2016 18:05:31 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
h=to:from:organization:subject:message-id:date:user-agent
:mime-version:content-type:content-transfer-encoding;
bh=/FmRZD4zMLoOjGTJ1HNkpDK/vzdhquF+9wsgc6neNp4=;
b=PlmFF6iTHzBKmz0RHbE6T0TAlMNOipV4HBqTQAWXFpHx1CXsc5K2hOs5XfVL/wGXpa
qH/HSM2Tc3c3g4svzqD12Z5390xzmpqVUiDjx5sethcYdXnBz9WaBIz0AqJBKeaOaKgu
y5h4OXiV5YCQmhS9uyJ0v0HPdNw2OfjIuVZrEhEDRDXTmshFPe+mg1NK5Ek7z3PzPuDJ
UpJGeWrg4ud1GNscQjrlvfNSLvfRfQwmhFrUWIkM8las9ql0tKeqrHyfN24M5P8v1gUj
GeZS4o+zoV3eiE24AXencOTf1SGxMCrtsg7M/ZjszObGALSfpaadbkRPfdOO51QY5NH7
bAAw==
X-Received: by 10.66.251.3 with SMTP id zg3mr117530575pac.145.1451786730851;
Sat, 02 Jan 2016 18:05:30 -0800 (PST)
Received: from ?IPv6:2406:e007:44a6:1:28cc:dc4c:9703:6781?
([2406:e007:44a6:1:28cc:dc4c:9703:6781])
by smtp.gmail.com with ESMTPSA id w85sm67945812pfi.36.2016.01.02.18.05.28
for <anima-signaling@ietf.org> (version=TLSv1/SSLv3 cipher=OTHER);
Sat, 02 Jan 2016 18:05:29 -0800 (PST)
To: Anima signaling DT <anima-signaling@ietf.org>
From: Brian E Carpenter <brian.e.carpenter@gmail.com>
Organization: University of Auckland
Message-ID: <568881F7.3000603@gmail.com>
Date: Sun, 3 Jan 2016 15:05:43 +1300
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
Thunderbird/38.5.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Archived-At: <http://mailarchive.ietf.org/arch/msg/anima-signaling/cSDN1BqVNtu0gXOAOvn9ECPewio>
Subject: [Anima-signaling] GRASP relaying
X-BeenThere: anima-signaling@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Mailing list for the signaling design team of the ANIMA WG
<anima-signaling.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/anima-signaling>,
<mailto:anima-signaling-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/anima-signaling/>
List-Post: <mailto:anima-signaling@ietf.org>
List-Help: <mailto:anima-signaling-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/anima-signaling>,
<mailto:anima-signaling-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 03 Jan 2016 02:05:32 -0000
Happy New Year to the signaling design team. It's time to get
started again!
I wanted to update you on the question of how a GRASP node handles relaying.
You will remember that a node with more than one interface must relay
Discovery messages and Flood messages (which are link-local multicasts)
between interfaces. Obviously, prevention of multicast loops and storms
is important. Thus the GRASP spec has rules for this:
A. decrement the loop count in the objective being discovered/flooded,
and drop the message if the loop count expires.
B. log the session ID of an outgoing multicast, and drop the message
if the same ID appears in an incoming multicast.
C. throttle the total rate of multicasts.
Here are the things I've discovered while coding a GRASP prototype
in Python:
1. The session ID is (as expected) essential in GRASP negotiation sessions,
since it is the only way for asynchronous outgoing and incoming messages to
rendezvous at the same socket. So it is vital in the following GRASP messages:
M_REQUEST, M_NEGOTIATE, M_WAIT, M_END.
2. The session ID is not essential in a synchronization session
(M_REQUEST followed by M_SYNCH), which doesn't have a rendezvous problem,
but it's harmless and allows for an extra consistency check.
3. The session ID is pretty much useless in M_FLOOD messages, which are
read-only and generate no replies, except for loop prevention (B above).
4. A bit to my surprise, the session ID is also pretty much useless
in discovery (M_DISCOVERY and M_RESPONSE messages), except for loop
prevention. The reason for this is quite complex. In the prototype,
things work as follows:
An ASA calls discover(objective, timeout). Here's
what discover does (simplified):
if the objective is already in the discovery cache:
return cached locators
else:
send M_DISCOVER message on each interface
launch a listener thread for each interface*
wait (at most) until timeout
if the objective is now in the discovery cache:
return cached locators
else:
return nothing
Each separate listener thread waits for any M_RESPONSE
replies, and adds them to the cache.
*(yes, I know, in theory one thread can listen to replies from
all interfaces, but I tested it and it didn't work)
The bottom line is that although the M_RESPONSEs will carry
the same Session ID, it is not used in any way.
I don't propose any message format changes because of this, because
I can imagine that another implementation approach might lead to
a different conclusion. Also, the Session ID and source address
might be very useful for debugging problems with relayed messages.
However, I do want to make one small change in the spec as a result
of this. When relaying Discovery, it is *much* easier to generate
a new discovery session than to propagate the incoming one. You'd
have to try coding it to fully understand why. So I want the
rules about relaying to include this: "The relayed message MAY have a
different Session ID."
Any comments? I'd like to post the draft in a few days.
Regards
Brian
- [Anima-signaling] GRASP relaying Brian E Carpenter
- Re: [Anima-signaling] GRASP relaying Brian E Carpenter