Ok! So what do you think if then we were to also disallow applying the ACL that 
doesn't exist yet ?

It feels like it would be a matching symmetric behavior "from the other side". ?

--a

On 16 Jun 2017, at 15:38, Luke, Chris <chris_l...@comcast.com> wrote:

>> From: Marco Varlese [mailto:marco.varl...@suse.com]
>> Sent: Friday, June 16, 2017 9:23
>>> On Fri, 2017-06-16 at 15:12 +0200, Andrew 👽  Yourtchenko wrote:
>>>> On 6/16/17, Marco Varlese <marco.varl...@suse.com> wrote:
>>>> 
>>>>> On Thu, 2017-06-15 at 14:22 +0200, Andrew 👽  Yourtchenko wrote:
>>>>> 
>>>>> After a bit more thinking - there is a way that should take care of both:
>>>>> 
>>>>> 1) What Chris wrote: have consistent behaviour with non-existent
>>>>> ACL as if the ACL matching fell off the end of the ACL: if an
>>>>> empty ACL is referenced, treat it as if it had entries but none of
>>>>> them had matched. Then we still hit the "default deny" if none of
>>>>> the applied ACLs match, and drop the packets - so it will be logical.
>>>>> 
>>>>> 2) What Marco wrote: when deleting an already referenced ACL,
>>>>> unapply it from all the places where it is applied.
>>>>> 
>>>>> It's a change in the behaviour in that the current behaviour is to
>>>>> have the empty ACL act as if it was "deny any any", and block the
>>>>> matching even if there is another ACL after it - but on the other
>>>>> hand this would take both viewpoints in mind...
>>>> I think this approach would still leave the system in an inconsistent 
>>>> state:
>>>> an
>>>> interface is basically assigned an ACL which does not exist in the system.
>>>> Also, the risk I see is if I later on create an ACL with the
>>>> previously used index then an interface would see that ACL being
>>>> applied automatically (since it's referenced). However, I may not
>>>> want to have that ACL assigned to that particular interface.
>>>> Correct?
>>>> 
>>>> I think that the "deletion" of an ACL could see one of the two
>>>> behaviours
>>>> below:
>>>> 1) the deletion of an ACL should be DENIED if that ACL is assigned
>>>> to any interface (probably the easier and safer approach);
>>>> 2) the deletion of an ACL should see a CASCADING effect onto the
>>>> interfaces which would be "cleaned up" of any references to that
>>>> ACL;
>>>> 
>>> 
>>> Right, the (2) was what I was trying to suggest to do...
>>> 
>>>> 
>>>> I think (1) is a very good way of solving the initial problem since
>>>> it works nicely if you manage VPP directly (e.g. via command-line)
>>>> and if you use a controller. In the latter, the controller can react
>>>> on the "error" returned by the acl_del API because that ACL is
>>>> assigned somewhere.
>>>> 
>>> 
>>> ...but the (1) is another good option to me.
>>> 
>>> So it seems we are converging on (1) ?
>> I would go with (1)...
> 
> I feel I have a slight preference for this (1) also; In general I don't like 
> the implicit actions such as in (2).
> 
> Chris
> 
>>> 
>>> --a
>>> 
>>> 
>>> 
>>>> 
>>>> 
>>>> Cheers,
>>>> Marco
>>>> 
>>>>> 
>>>>> 
>>>>> What do you think ?
>>>>> 
>>>>> --a
>>>>> 
>>>>>> On 6/9/17, Andrew 👽  Yourtchenko <ayour...@gmail.com> wrote:
>>>>>> 
>>>>>> 
>>>>>> Assuming the only change is to effectively have
>>>>>> "unbind_acl_from_everywhere; delete_acl" instead of
>>>>>> "delete_acl", maybe it would be best to tackle that post-17.07
>>>>>> with a separate API message acl_del_and_unbind or similar ?
>>>>>> 
>>>>>> I feel a beet wary of adding more hidden state (even though the
>>>>>> reflected sessions table does provide already plenty of it :)
>>>>>> 
>>>>>> --a
>>>>>> 
>>>>>>> On 6/9/17, Luke, Chris <chris_l...@comcast.com> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> Would it make sense to have a flag on the interface (or
>>>>>>> globally), set when applying the ACL, that indicates the
>>>>>>> desired behavior when the ACL is empty or non-existent? At the
>>>>>>> moment to me it seems logical that this is the same behavior
>>>>>>> as when matching falls off the end of the ACL.
>>>>>>> 
>>>>>>> Chris.
>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: vpp-dev-boun...@lists.fd.io
>>>>>>>> [mailto:vpp-dev-boun...@lists.fd.io]
>>>>>>>> On
>>>>>>>> Behalf Of Andrew ?? Yourtchenko
>>>>>>>> Sent: Friday, June 9, 2017 7:53
>>>>>>>> To: Marco Varlese <marco.varl...@suse.com>
>>>>>>>> Cc: vpp-dev@lists.fd.io
>>>>>>>> Subject: Re: [vpp-dev] Bind / Unbind of ACL
>>>>>>>> 
>>>>>>>> Hi Marco,
>>>>>>>> 
>>>>>>>> Yes, this works as expected, assuming after deletion *all*
>>>>>>>> the traffic is denied, rather than just the SSH traffic.
>>>>>>>> 
>>>>>>>> If you apply to an interface the ACL# that does not exist,
>>>>>>>> that is the same as if there was an ACL with just the "deny
>>>>>>>> all" semantics, to avoid the perception that a given policy
>>>>>>>> is enforced when it isn't - so I erred on the side of
>>>>>>>> caution.
>>>>>>>> 
>>>>>>>> The way to remove the ACL: you would ensure the ACL is not
>>>>>>>> applied to the
>>>>>>>> interface(s) first, then remove the ACL (or replace it with
>>>>>>>> a different policy in- place).
>>>>>>>> 
>>>>>>>> Alternatively, you can just replace the existing ACL
>>>>>>>> in-place with "permit any"
>>>>>>>> for IPv4 and IPv6 - this way you explicitly state that there
>>>>>>>> is a policy to permit all the traffic.
>>>>>>>> 
>>>>>>>> I've been bitten myself and seen several times in my career
>>>>>>>> when an applied but non-existent ACL caused problems later
>>>>>>>> on, in the worst possible moment. The current behaviour IMHO
>>>>>>>> makes the config discrepancy clear - what do you think ?
>>>>>>>> 
>>>>>>>> --a
>>>>>>>> 
>>>>>>>>> On 6/9/17, Marco Varlese <marco.varl...@suse.com> wrote:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Hi,
>>>>>>>>> 
>>>>>>>>> I am trying the ACL functionality and I found a "strange"
>>>>>>>>> behaviour.
>>>>>>>>> 
>>>>>>>>> The steps I follow to use an ACL are:
>>>>>>>>> * I create an ACL to deny SSH traffic between VMs (via the
>>>>>>>> 'acl_add_replace'
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> function)
>>>>>>>>> * Set that ACL to the interfaces involved (via the
>>>>>>>>> 'acl_interface_set_acl_list'
>>>>>>>>> function)
>>>>>>>>> 
>>>>>>>>> After performing the above steps the traffic was correctly
>>>>>>>>> being blocked.
>>>>>>>>> 
>>>>>>>>> However, when I decided to enable the SSH traffic again, I
>>>>>>>>> simply deleted the ACL (via the 'acl_del' function) with
>>>>>>>>> the consequence though that the traffic was still being denied.
>>>>>>>>> 
>>>>>>>>> Is this behaviour correct?
>>>>>>>>> If so what would be the right way to unset hence disable a
>>>>>>>>> given ACL from an interface (or multiple)?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Marco
>>>>>>>>> 
>>>>>>>>> _______________________________________________
>>>>>>>>> vpp-dev mailing list
>>>>>>>>> vpp-dev@lists.fd.io
>>>>>>>>> https://lists.fd.io/mailman/listinfo/vpp-dev
>>>>>>>> _______________________________________________
>>>>>>>> vpp-dev mailing list
>>>>>>>> vpp-dev@lists.fd.io
>>>>>>>> https://lists.fd.io/mailman/listinfo/vpp-dev
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
> 
_______________________________________________
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

Reply via email to