Re: [netmod] derived-from() vs derived-from-or-self() in acl model

Mahesh Jethanandani <mjethanandani@gmail.com> Mon, 26 February 2018 21:56 UTC

Return-Path: <mjethanandani@gmail.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9E945126DFB; Mon, 26 Feb 2018 13:56:34 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2
X-Spam-Level:
X-Spam-Status: No, score=-2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
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 aFzgdTPgN1Km; Mon, 26 Feb 2018 13:56:33 -0800 (PST)
Received: from mail-pg0-x22f.google.com (mail-pg0-x22f.google.com [IPv6:2607:f8b0:400e:c05::22f]) (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 E6AC8126C2F; Mon, 26 Feb 2018 13:56:32 -0800 (PST)
Received: by mail-pg0-x22f.google.com with SMTP id e11so6703088pgq.12; Mon, 26 Feb 2018 13:56:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=P5/5E5q5enJY9qi90EW55bAZMcB+ev8f+8aqE/wPd90=; b=IsGVMqIHA6irDx4Ij4a+2hGXMgMmqKyGnVu6+4yV80qGw3ccGCYziCcCYc5vN622bc Se22pHbt01qpnWE2kyzPrlabcyEl4mJ7Msp0NDRE+L4mfF860mV37Y0KBqXqMKjh3z+L wO7+v5sKZ21ZmzwjBJM3xT32oApTEVHsZ+0dj74g0nUoCpl/FDi7OAE9jN+36Jlwb7bl YdgBR2jb3KZG8pAZzBIzRrUGg6vJrsdTb6AMqOOgj+/12tcqMpK3J0ZWg/F64e5OSBSW XjQ+iS2n02fYGdIZerSw5LyVfxYH6VWJ30r5EN31yxy033qlDz3qR/viOdH85bkaZTA+ 0UbQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=P5/5E5q5enJY9qi90EW55bAZMcB+ev8f+8aqE/wPd90=; b=lyjhfuTWEo64lNtbrZRDWP7VH+LeaG+ZwwpztSUEdoXKK2lGbGEP4oEa7iNMNwXXme olJdNhzfKE3Y01FlxAmD7g+LoojwTjeAH1XKI/O3u5Twn9yG1CyEXjqd1nMixzRcBpf5 snNeK5jc6MRd6ASlLnBL5fB0n17b2oJzEBIETYijZD6aGSQMrWhYf5+Opr4Fq6tnZ/Ah XUqLAHY7oJt1KQkJ/zHs8LoG8xaX2VuDHTmd0WXk0sFpoPMTfuJTHCBf8jm+6SFlYd4P m2QJqpqa8vnmkaLHcPMznNGr+gbHSz6fjBKHwWn3xxhzm+jzS7yQZtpO86bexeeqsx74 x+5Q==
X-Gm-Message-State: APf1xPC7gELi+Zl1chunhAeoJoMihD2jPUpkd1UsVucYPQsQ0HmbjZFV k90d707hoRUiA+/FseUPtWlg1L76
X-Google-Smtp-Source: AH8x2276giFYYX8ldU9bONy/0eIE/Uhm6VNzOfBHRyZd/Jce7Barc/SP06X5ut565utJJhLS3r3WXQ==
X-Received: by 10.99.120.197 with SMTP id t188mr9532270pgc.358.1519682192271; Mon, 26 Feb 2018 13:56:32 -0800 (PST)
Received: from ?IPv6:2601:647:4700:1280:59d9:6f72:9685:4ce6? ([2601:647:4700:1280:59d9:6f72:9685:4ce6]) by smtp.gmail.com with ESMTPSA id 205sm19556252pfy.117.2018.02.26.13.56.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 26 Feb 2018 13:56:31 -0800 (PST)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
From: Mahesh Jethanandani <mjethanandani@gmail.com>
In-Reply-To: <ba77f688-0ffc-eb47-ba13-5ebebecea6ba@tail-f.com>
Date: Mon, 26 Feb 2018 14:02:19 -0800
Cc: "netmod@ietf.org" <netmod@ietf.org>, "draft-ietf-netmod-acl-model@ietf.org" <draft-ietf-netmod-acl-model@ietf.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <512EE203-D8C7-40FA-BA05-48D240666716@gmail.com>
References: <35213d61-08b4-ce5b-f7b2-251d2d5c2e70@tail-f.com> <87y3jf51ed.fsf@nic.cz> <ed68a5f1-7854-3d7c-2ff7-ee71857707d9@tail-f.com> <E4EDCE65-70A1-41CD-ABFE-C46E758732A1@gmail.com> <ba77f688-0ffc-eb47-ba13-5ebebecea6ba@tail-f.com>
To: Per Hedeland <per@tail-f.com>
X-Mailer: Apple Mail (2.3445.5.20)
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/-rYcs76MF3x7IiLlbicOciRD1yM>
Subject: Re: [netmod] derived-from() vs derived-from-or-self() in acl model
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 26 Feb 2018 21:56:35 -0000


> On Feb 26, 2018, at 1:31 PM, Per Hedeland <per@tail-f.com> wrote:
> 
> On 2018-02-26 20:20, Mahesh Jethanandani wrote:
>>> On Feb 26, 2018, at 9:01 AM, Per Hedeland <per@tail-f.com <mailto:per@tail-f.com>> wrote:
>>> 
>>> [Adding Cc todraft-ietf-netmod-acl-model@ietf.org <mailto:draft-ietf-netmod-acl-model@ietf.org>]
>>> 
>>> On 2018-02-26 14:24, Ladislav Lhotka wrote:
>>>> Per Hedeland <per@tail-f.com <mailto:per@tail-f.com>> writes:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> A customer of ours using one of the draft versions of the
>>>>> ietf-access-control-list module reported that it was not possible to
>>>>> configure an ethernet ace with type acl:eth-acl-type, due to the
>>>>> derived-from() in
>>>>> 
>>>>>              container eth {
>>>>>                when "derived-from(../../../../type, " +
>>>>>                     "'acl:eth-acl-type')";
>>>>>                if-feature match-on-eth;
>>>>>                uses pf:acl-eth-header-fields;
>>>>>                description
>>>>>                  "Rule set that matches ethernet headers.";
>>>>>              }
>>>>> 
>>>>> evaluating to "false". I pointed out that this is correct behavior of
>>>>> our SW, since acl:eth-acl-type is not derived from acl:eth-acl-type, and
>>>>> it would need to be derived-from-or-self() in order to evaluate to
>>>>> "true". I also ventured a guess (not having followed the development of
>>>>> the acl model in detail) that the intent was that vendors should define
>>>>> their own identities, that actually *were* derived from acl:eth-acl-type
>>>>> (and ditto for all the other *-acl-type identities, of course).
>>>>> 
>>>>> However I'm not at all sure that the guess is correct, and if so why
>>>>> this should be *enforced* by excluding the base identity. And having a
>>>>> look at the example in section 4.3 of draft-ietf-netmod-acl-model-16, it
>>>>> seems to be doing exactly what our customer tried, alhough with
>>>>> ipv4-acl-type:
>>>>> 
>>>>> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
>>>>>  <access-lists xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list">
>>>>>    <acl>
>>>>>      <name>sample-ipv4-acl</name>
>>>>>      <type>ipv4-acl-type</type>
>>>>>      <aces>
>>>>>        <ace>
>>>>>          <name>rule1</name>
>>>>>          <matches>
>>>>>            <l3>
>>>>>              <ipv4>
>>>>>                <protocol>tcp</protocol>
>>>>> 
>>>>> As far as I can see, this snippet is invalid for the model, since the
>>>>> 'ipv4' container has
>>>>> 
>>>>>              container ipv4 {
>>>>>                when "derived-from(../../../../type, " +
>>>>>                     "'acl:ipv4-acl-type')";
>>>>> 
>>>>> - and ipv4-acl-type is *not* derived from ipv4-acl-type. (Of course
>>>>> there shouldn't be any <l3> element either, but that's another thing.)
>>>>> 
>>>>> So, is it the case that the derived-from()s should actually be
>>>>> derived-from-or-self()s, or is the example wrong?
>>>> 
>>>> This has to do with the irreflexivity property of identity derivation,
>>>> which is, in my view, an unnecessary complication. It would be simpler
>>>> but sufficient to define derivation as a reflexive relation, and have
>>>> only one "derived-from()" XPath function.
>>> 
>>> Be that as it may, it is obviously not what RFC 7950 says.
>> I would agree that that is not how I am reading RFC 7950. For now my choice is to change all the derived-from() to derived-from-or-self().
> 
> I think that is a useful change. FWIW, when I actually tried the example
> as the payload of an <edit-config> towards our NETCONF server, I found
> some other problems, which I believe are still relevant with the pull
> request applied:
> 
> 1) (Aldready mentioned) the <l3> element corresponding to the choice in
> the model should not be present (RFC 7950 section 7.9.5).

Removed <l3>. Although I have say the tree diagram confused me. It identifies l3 as a node with a +—rw next to it, while for ipv4 it says +—.

> 
> 2) "tcp" is not a valid value for the 'protocol' leaf - from
> ietf-packet-fields@2018-02-02.yang:
> 
>    leaf protocol {
>      type uint8;
>      description
>        "Internet Protocol number. Refers to the protocol of the
>         payload. In IPv6, this field is known as 'next-header.";
>      reference "RFC 719, RFC 2460.";
>    }
> 
> I.e. it should be "6". And the reference for this leaf, as well as for
> 'length' and 'ttl', should presumably be RFC 791, not RFC 719.

Changed it to 6, and 719 to 791.

> 
> 3) 11.11.11.1/24 (for 'destination-ipv4-network') and 10.10.10.1/24 (for
> 'source-ipv4-network') are not valid (canonical) values for
> inet:ipv4-prefix - from ietf-inet-types.yang:
> 
>      The canonical format of an IPv4 prefix has all bits of
>      the IPv4 address set to zero that are not part of the
>      IPv4 prefix.";
> 
> And of course it doesn't make much sense to have bits outside the prefix
> length set for a match specification. It seems the pull request changes
> these prefixes to RFC 1918 / RFC 5737 space, but those prefixes have
> the same issue.

Made the host part of the network address 0.

> 
> I'm attaching the output from a <get-config> towards our NETCONF server
> with these issues fixed (and the derived-from() ->
> derived-from-or-self() change made).

Thanks.

> 
> --Per
> 
>>> 
>>>> Identities that are considered "abstract" should not be instantiated, and
>>>> then derived-from() and derived-from-or-self() give the same result.
>>> 
>>> So I guess your take is that the *-acl-type identities derived from
>>> acl:acl-base in the ietf-access-control-list module should be considered
>>> "abstract", and thus the example should not use ipv4-acl-type for the
>>> 'type' leaf, but instead some other identity derived from
>>> acl:ipv4-acl-type. Do the authors agree?
>>> 
>>> --Per
>>> 
>>>> Lada
>>>> 
>>>>> 
>>>>> --Per Hedeland
>>>>> 
>>>>> _______________________________________________
>>>>> netmod mailing list
>>>>> netmod@ietf.org <mailto:netmod@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/netmod
>> Mahesh Jethanandani
>> mjethanandani@gmail.com <mailto:mjethanandani@gmail.com>
> 
> <example.xml>

Mahesh Jethanandani
mjethanandani@gmail.com