Thanks a ton Neale for sharing the detailed view.

From the example you mentioned, “to send to a GRE interface for output if a 
classifier is matched”,
can I configure this classifier using VPP constructs i.e. 
policy-classifier/ACL/N-tuple-classifier(https://wiki.fd.io/view/VPP/Introduction_To_N-tuple_Classifiers)
 ?

My use-case also involves ‘extract’ a packet that matches some criteria. For 
e.g., matching particular fields (DMAC, ether-type, port, etc) in the packet 
with the value-of-interest.

Thanks,
Leela sankar

From: <vpp-dev@lists.fd.io> on behalf of "Neale Ranns via Lists.Fd.Io" 
<nranns=cisco....@lists.fd.io>
Reply-To: "nra...@cisco.com" <nra...@cisco.com>
Date: Wednesday, February 6, 2019 at 10:51 PM
To: Leela Gudimetla <lgudi...@ciena.com>, "vpp-dev@lists.fd.io" 
<vpp-dev@lists.fd.io>
Cc: "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io>
Subject: Re: [**EXTERNAL**] [vpp-dev] Understanding feature-arcs & features

the vlib graph is a completely free form directed and acyclic. Meaning you can 
construct a graph of any nodes ‘pointing’ to any other.

A router or switch has a well-known set of functions and so a graph is built in 
VPP to implement these functions. This graph is typically referred to as the L3 
or L2 switch path. In order for you to augment this switch-path you need to 
hook your node into the existing graph. Using vlib functions you could build a 
edge from any node in the switch path to point to your new node, say from 
ip4-input to my-node, however, without modifications to ip4-input to ‘classify’ 
packets of interest there is no way a packet would make it to your node. The 
community is unlikely to accept changes to ip4-input and indeed any other node 
on the switch-path as they are performance critical.

This is what feature arcs are for. A ‘feature’ in this context is any 
subsystem/module/etc that wants to see/modify/fiddle with the packet as it 
traverses the switch-path.

A feature arc is a sub-graph of nodes – maybe graph is too flexible a word in 
this context as it’s really only an ordered linear set, or pipeline, of nodes. 
A feature-arc is rooted, or begins, at one of the nodes defined in the 
switch-path and ends at the next node in the switch-path (one can imagine it 
starting and ending at the same node and then immediately moving onto the 
next). Any node on the arc has the usual choice of sending the packet to the 
next node of its choice, e.g. to send to a GRE interface for output if a 
classifier matched, or drop it, and thus ‘extract’ the packet from the 
switch-path, or it can select the next feature/node on the arc so the packet 
can continue along the switch-path.

The L2 and L3 switch-path both have feature arcs that are rooted at different 
places (see slide 15 of the attached deck for L3).

How you use a feature-arc is well described in the wiki you reference.

Benoit recently added a neat feature that allows you to visualise the graph;
  show vlib graphviz

which might help you understand the monsters you create 😉

/neale



De : <vpp-dev@lists.fd.io> au nom de "Gudimetla, Leela Sankar" 
<lgudi...@ciena.com>
Date : jeudi 7 février 2019 à 02:43
À : "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io>
Objet : Re: [**EXTERNAL**] [vpp-dev] Understanding feature-arcs & features

Dave/Neale,

Sharing any details would help to understand better on top of ‘use the force 
and read the source’.

Thanks,
Leela sankar

From: <vpp-dev@lists.fd.io> on behalf of Leela Gudimetla <lgudi...@ciena.com>
Date: Wednesday, February 6, 2019 at 11:35 AM
To: "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io>
Subject: [**EXTERNAL**] [vpp-dev] Understanding feature-arcs & features

Hello All,

I have a use case with VPP as below.

1.      Need to send customized packets (similar to some L3 control packets. 
ARP, ICMP, etc) from ‘my-node’ to loopback.

2.      The loopback interface is attached to a bridge-domain. So, the 
customized packets need to be either flooded in the bridge-domain or

sent on a particular interface based on the destination-MAC in the packet.

From the code-walk, I see that loopback-interface has a set of nodes i.e. 
‘output-node’ and ‘tx-node’ created as part of interface creation.
And I also see that the loopback-interface tx-node is added next to its 
output-node. And the output-node is added to ‘interface-output’ feature-arc.

I looked at the https://wiki.fd.io/view/VPP/Feature_Arcs and also lot of code 
that does VPP_FEATURE_ARC_INIT & VPP_FEATURE_INIT, to get a clear understanding 
on how my customized packet would traverse the VPP’s node graph. But somehow I 
am missing the full packet traversal after the loopback-interface’s output-node.

Could someone share details on how the feature-arcs and ‘features that use the 
feature-arcs’ work?
And to be specific how the ‘interface-output’ feature-arc works in order to 
send the packet out from loopback-interface output-node to the corresponding 
NIC?
And why is that ‘tx-node’ needed/used?

Too many questions, but any help understanding the flow would really help.

Thanks,
Leela sankar

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#12209): https://lists.fd.io/g/vpp-dev/message/12209
Mute This Topic: https://lists.fd.io/mt/29685539/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to